From 8aaeda701936541acff6ec6e5602054fdb6358dd Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Fri, 30 Sep 2022 14:26:48 -0300 Subject: [PATCH 01/28] Os 67 (#75) * core to quarkus * Se hace upgrade de las dependencias con vulnerabilidades * Se cambian los requestscope a applicationscope y se arregla el startupmanager Co-authored-by: Leandro Beretta --- packages/openscore-core-quarkus/.dockerignore | 5 + packages/openscore-core-quarkus/.gitignore | 40 +++ .../.mvn/wrapper/.gitignore | 1 + .../.mvn/wrapper/MavenWrapperDownloader.java | 142 ++++++++ .../.mvn/wrapper/maven-wrapper.properties | 18 + packages/openscore-core-quarkus/README.md | 1 + packages/openscore-core-quarkus/mvnw | 316 ++++++++++++++++++ packages/openscore-core-quarkus/mvnw.cmd | 188 +++++++++++ packages/openscore-core-quarkus/pom.xml | 258 ++++++++++++++ .../src/main/docker/Dockerfile.jvm | 94 ++++++ .../src/main/docker/Dockerfile.legacy-jar | 90 +++++ .../src/main/docker/Dockerfile.native | 27 ++ .../src/main/docker/Dockerfile.native-micro | 30 ++ .../openscore/core/OpenScoreApplication.java | 9 + .../openscore/core/api/ApiResponse.java | 35 ++ .../openscore/core/api/ImagenApi.java | 32 ++ .../semantic/openscore/core/api/TokenDTO.java | 18 + .../core/api/admin/UsuarioCompletoDTO.java | 87 +++++ .../CrearDefinicionCompeticionDTO.java | 33 ++ .../DefinicionCompeticionDTO.java | 32 ++ .../core/api/equipos/CrearEquipoDTO.java | 41 +++ .../openscore/core/api/equipos/EquipoDTO.java | 52 +++ .../openscore/core/api/grupos/FaseDTO.java | 23 ++ .../openscore/core/api/grupos/GrupoDTO.java | 23 ++ .../core/api/information/Information.java | 35 ++ .../openscore/core/api/paises/PaisDTO.java | 23 ++ .../api/partidos/CrearOUpdatePartidoDTO.java | 70 ++++ .../core/api/partidos/PartidoDTO.java | 101 ++++++ .../core/api/partidos/ResultadoDTO.java | 23 ++ .../openscore/core/api/post/CrearPost.java | 32 ++ .../api/pronosticos/CrearPronosticoDTO.java | 42 +++ .../api/pronosticos/PartidoPronosticoDTO.java | 16 + .../core/api/pronosticos/PronosticoDTO.java | 49 +++ .../openscore/core/api/ranking/Ranking.java | 50 +++ .../core/api/usuarios/CrearUsuarioDTO.java | 100 ++++++ .../core/api/usuarios/LoginUsuarioDTO.java | 23 ++ .../core/api/usuarios/RecoverPassword.java | 60 ++++ .../core/api/usuarios/UpdatePassword.java | 47 +++ .../api/usuarios/UpdateSecretQuestion.java | 42 +++ .../core/api/usuarios/UpdateUsuarioDTO.java | 46 +++ .../core/api/usuarios/UsuarioDTO.java | 69 ++++ .../openscore/core/cache/TokenCache.java | 74 ++++ .../openscore/core/email/FSMailProvider.java | 34 ++ .../openscore/core/email/MailFactory.java | 17 + .../openscore/core/email/MailProvider.java | 6 + .../openscore/core/email/MailServer.java | 30 ++ .../openscore/core/email/MailTemplate.java | 38 +++ .../openscore/core/email/SMTPProvider.java | 34 ++ .../core/email/StdoutMailSender.java | 22 ++ .../core/exceptions/ApplicationException.java | 14 + .../core/exceptions/EmailException.java | 7 + .../exceptions/EntityNotFoundException.java | 8 + .../NoSePuedeLeerInformacionException.java | 8 + .../exceptions/PartidoBloqueadoException.java | 9 + .../core/exceptions/ValidationException.java | 44 +++ .../openscore/core/logging/BaseLogger.java | 24 ++ .../openscore/core/logging/ServiceLogger.java | 14 + .../openscore/core/mapping/EquipoMapper.java | 21 ++ .../openscore/core/mapping/FaseMapper.java | 16 + .../openscore/core/mapping/GrupoMapper.java | 15 + .../openscore/core/mapping/PaisMapper.java | 18 + .../openscore/core/mapping/PartidoMapper.java | 20 ++ .../core/mapping/PronosticoMapper.java | 36 ++ .../openscore/core/mapping/UsuarioMapper.java | 37 ++ .../semantic/openscore/core/model/Equipo.java | 47 +++ .../semantic/openscore/core/model/Fase.java | 42 +++ .../openscore/core/model/Ganador.java | 8 + .../semantic/openscore/core/model/Grupo.java | 36 ++ .../semantic/openscore/core/model/Pais.java | 48 +++ .../openscore/core/model/Partido.java | 132 ++++++++ .../openscore/core/model/PartidoStatus.java | 5 + .../semantic/openscore/core/model/Post.java | 51 +++ .../openscore/core/model/PostStatus.java | 5 + .../openscore/core/model/PreguntaSecreta.java | 28 ++ .../openscore/core/model/Pronostico.java | 91 +++++ .../core/model/RespuestaPreguntaSecreta.java | 29 ++ .../openscore/core/model/Resultado.java | 53 +++ .../io/semantic/openscore/core/model/Rol.java | 7 + .../openscore/core/model/Storable.java | 67 ++++ .../openscore/core/model/Usuario.java | 112 +++++++ .../core/repository/EquiposRepository.java | 41 +++ .../core/repository/FaseRepository.java | 41 +++ .../core/repository/GrupoRepository.java | 41 +++ .../openscore/core/repository/Page.java | 22 ++ .../core/repository/PaisRepository.java | 39 +++ .../core/repository/PartidoRepository.java | 107 ++++++ .../core/repository/PostRepository.java | 30 ++ .../repository/PreguntaSecretaRepository.java | 25 ++ .../core/repository/PronosticoRepository.java | 66 ++++ .../openscore/core/repository/Repository.java | 178 ++++++++++ .../openscore/core/repository/Sort.java | 10 + .../core/repository/UsuarioRepository.java | 53 +++ .../core/repository/startup/PartidoData.java | 68 ++++ .../repository/startup/StartupManager.java | 48 +++ .../core/repository/startup/StartupStep.java | 12 + .../startup/builder/DiaBuilder.java | 10 + .../startup/builder/DiaBuilderImpl.java | 28 ++ .../startup/builder/TestDiaBuilder.java | 25 ++ .../startup/steps/CrearEquipos.java | 67 ++++ .../startup/steps/CrearGruposYFases.java | 77 +++++ .../repository/startup/steps/CrearPaises.java | 61 ++++ .../startup/steps/CrearPartidos.java | 97 ++++++ .../startup/steps/CrearPreguntaSecreta.java | 51 +++ .../startup/steps/CrearUsuarioAdmin.java | 87 +++++ .../startup/steps/FileBasedStartupStep.java | 67 ++++ .../startup/steps/PreguntaSecretaData.java | 27 ++ .../openscore/core/security/Secure.java | 17 + .../openscore/core/security/SecureFilter.java | 75 +++++ .../core/security/TokenGenerator.java | 138 ++++++++ .../openscore/core/services/RestUtil.java | 18 + .../openscore/core/services/UserInfo.java | 28 ++ .../core/services/api/AdminService.java | 16 + .../api/DefinicionCompeticionesService.java | 45 +++ .../core/services/api/EquiposService.java | 19 ++ .../core/services/api/FasesService.java | 15 + .../core/services/api/GetService.java | 16 + .../core/services/api/GruposService.java | 14 + .../core/services/api/InformationService.java | 27 ++ .../core/services/api/PaisesService.java | 16 + .../core/services/api/PartidosService.java | 50 +++ .../core/services/api/PostService.java | 30 ++ .../core/services/api/PronosticosService.java | 66 ++++ .../core/services/api/RankingService.java | 24 ++ .../core/services/api/SearchService.java | 19 ++ .../core/services/api/StandardService.java | 26 ++ .../core/services/api/UsuariosService.java | 62 ++++ .../filters/ApplicationExceptionMapper.java | 38 +++ .../core/services/filters/CorsFilter.java | 35 ++ .../core/services/filters/LoggerFilter.java | 28 ++ .../filters/RuntimeExceptionMapper.java | 25 ++ .../core/services/impl/AdminServiceImpl.java | 41 +++ .../services/impl/EquiposServiceImpl.java | 106 ++++++ .../core/services/impl/FasesServiceImpl.java | 43 +++ .../core/services/impl/GruposServiceImpl.java | 44 +++ .../services/impl/InformationServiceImpl.java | 53 +++ .../core/services/impl/PaisesServiceImpl.java | 40 +++ .../services/impl/PartidosServiceImpl.java | 150 +++++++++ .../core/services/impl/PostServiceImpl.java | 101 ++++++ .../services/impl/PronosticosServiceImpl.java | 228 +++++++++++++ .../services/impl/RankingServiceImpl.java | 97 ++++++ .../services/impl/UsuariosServiceImpl.java | 248 ++++++++++++++ .../core/template/TemplateEngine.java | 35 ++ .../template/TemplateEngineException.java | 9 + .../openscore/core/util/JsonConverter.java | 10 + .../core/validation/ApplicationValidator.java | 41 +++ .../core/validation/annotations/Matches.java | 36 ++ .../core/validation/annotations/Password.java | 26 ++ .../validation/validators/EmailValidator.java | 6 + .../validators/MatchesValidator.java | 47 +++ .../validators/PasswordValidator.java | 37 ++ .../validators/RedHatEmailValidator.java | 9 + .../resources/ValidationMessages.properties | 2 + .../src/main/resources/application.properties | 7 + .../src/main/resources/data/partidos.yml | 141 ++++++++ .../src/main/resources/data/preguntas.yml | 7 + .../src/main/resources/info.properties | 2 + .../src/main/resources/logback.xml | 21 ++ .../src/main/resources/templates/recover.html | 210 ++++++++++++ .../openscore/core/model/UsuarioTest.java | 69 ++++ .../core/repository/PaisRepositoryTest.java | 33 ++ .../core/repository/RepositoryBaseTest.java | 39 +++ .../core/repository/RepositoryTest.java | 120 +++++++ .../openscore/core/repository/TestObject.java | 26 ++ .../core/repository/TestRepository.java | 19 ++ .../repository/UsuarioRepositoryTest.java | 49 +++ .../core/security/GenerateToken.java | 27 ++ .../core/security/TokenGeneratorTest.java | 57 ++++ .../impl/UsuariosServiceImplTest.java | 149 +++++++++ 168 files changed, 8340 insertions(+) create mode 100644 packages/openscore-core-quarkus/.dockerignore create mode 100644 packages/openscore-core-quarkus/.gitignore create mode 100644 packages/openscore-core-quarkus/.mvn/wrapper/.gitignore create mode 100644 packages/openscore-core-quarkus/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 packages/openscore-core-quarkus/.mvn/wrapper/maven-wrapper.properties create mode 100644 packages/openscore-core-quarkus/README.md create mode 100755 packages/openscore-core-quarkus/mvnw create mode 100644 packages/openscore-core-quarkus/mvnw.cmd create mode 100644 packages/openscore-core-quarkus/pom.xml create mode 100644 packages/openscore-core-quarkus/src/main/docker/Dockerfile.jvm create mode 100644 packages/openscore-core-quarkus/src/main/docker/Dockerfile.legacy-jar create mode 100644 packages/openscore-core-quarkus/src/main/docker/Dockerfile.native create mode 100644 packages/openscore-core-quarkus/src/main/docker/Dockerfile.native-micro create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/OpenScoreApplication.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ApiResponse.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ImagenApi.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/TokenDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/admin/UsuarioCompletoDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/competiciones/CrearDefinicionCompeticionDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/competiciones/DefinicionCompeticionDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/equipos/CrearEquipoDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/equipos/EquipoDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/grupos/FaseDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/grupos/GrupoDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/information/Information.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/paises/PaisDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/post/CrearPost.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/CrearPronosticoDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/PartidoPronosticoDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/PronosticoDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ranking/Ranking.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/CrearUsuarioDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/LoginUsuarioDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/RecoverPassword.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdatePassword.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateSecretQuestion.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateUsuarioDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UsuarioDTO.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/cache/TokenCache.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/FSMailProvider.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailFactory.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailProvider.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailServer.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailTemplate.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/SMTPProvider.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/StdoutMailSender.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/ApplicationException.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/EmailException.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/EntityNotFoundException.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/NoSePuedeLeerInformacionException.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/PartidoBloqueadoException.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/ValidationException.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/logging/BaseLogger.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/logging/ServiceLogger.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/EquipoMapper.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/FaseMapper.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/GrupoMapper.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PaisMapper.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/UsuarioMapper.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Equipo.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Fase.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Ganador.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Grupo.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Pais.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PartidoStatus.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Post.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PostStatus.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PreguntaSecreta.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Pronostico.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/RespuestaPreguntaSecreta.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Rol.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Storable.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Usuario.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/EquiposRepository.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/FaseRepository.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/GrupoRepository.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Page.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PaisRepository.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PartidoRepository.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PostRepository.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PreguntaSecretaRepository.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PronosticoRepository.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Sort.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/UsuarioRepository.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/StartupManager.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/StartupStep.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPaises.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPreguntaSecreta.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearUsuarioAdmin.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/PreguntaSecretaData.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/Secure.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/SecureFilter.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/TokenGenerator.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/RestUtil.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/UserInfo.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/AdminService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/DefinicionCompeticionesService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/FasesService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/GetService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/GruposService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/InformationService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PaisesService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PostService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/RankingService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/SearchService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/StandardService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/UsuariosService.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/ApplicationExceptionMapper.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/CorsFilter.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/LoggerFilter.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/RuntimeExceptionMapper.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/AdminServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/FasesServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/GruposServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/InformationServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PaisesServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PostServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/RankingServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/UsuariosServiceImpl.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/template/TemplateEngine.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/template/TemplateEngineException.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/util/JsonConverter.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/ApplicationValidator.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/annotations/Matches.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/annotations/Password.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/EmailValidator.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/MatchesValidator.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/PasswordValidator.java create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/RedHatEmailValidator.java create mode 100644 packages/openscore-core-quarkus/src/main/resources/ValidationMessages.properties create mode 100644 packages/openscore-core-quarkus/src/main/resources/application.properties create mode 100644 packages/openscore-core-quarkus/src/main/resources/data/partidos.yml create mode 100644 packages/openscore-core-quarkus/src/main/resources/data/preguntas.yml create mode 100644 packages/openscore-core-quarkus/src/main/resources/info.properties create mode 100644 packages/openscore-core-quarkus/src/main/resources/logback.xml create mode 100644 packages/openscore-core-quarkus/src/main/resources/templates/recover.html create mode 100644 packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/model/UsuarioTest.java create mode 100644 packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/PaisRepositoryTest.java create mode 100644 packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/RepositoryBaseTest.java create mode 100644 packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/RepositoryTest.java create mode 100644 packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/TestObject.java create mode 100644 packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/TestRepository.java create mode 100644 packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/UsuarioRepositoryTest.java create mode 100644 packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/security/GenerateToken.java create mode 100644 packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/security/TokenGeneratorTest.java create mode 100644 packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/services/impl/UsuariosServiceImplTest.java diff --git a/packages/openscore-core-quarkus/.dockerignore b/packages/openscore-core-quarkus/.dockerignore new file mode 100644 index 0000000..94810d0 --- /dev/null +++ b/packages/openscore-core-quarkus/.dockerignore @@ -0,0 +1,5 @@ +* +!target/*-runner +!target/*-runner.jar +!target/lib/* +!target/quarkus-app/* \ No newline at end of file diff --git a/packages/openscore-core-quarkus/.gitignore b/packages/openscore-core-quarkus/.gitignore new file mode 100644 index 0000000..693002a --- /dev/null +++ b/packages/openscore-core-quarkus/.gitignore @@ -0,0 +1,40 @@ +#Maven +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +release.properties +.flattened-pom.xml + +# Eclipse +.project +.classpath +.settings/ +bin/ + +# IntelliJ +.idea +*.ipr +*.iml +*.iws + +# NetBeans +nb-configuration.xml + +# Visual Studio Code +.vscode +.factorypath + +# OSX +.DS_Store + +# Vim +*.swp +*.swo + +# patch +*.orig +*.rej + +# Local environment +.env diff --git a/packages/openscore-core-quarkus/.mvn/wrapper/.gitignore b/packages/openscore-core-quarkus/.mvn/wrapper/.gitignore new file mode 100644 index 0000000..e72f5e8 --- /dev/null +++ b/packages/openscore-core-quarkus/.mvn/wrapper/.gitignore @@ -0,0 +1 @@ +maven-wrapper.jar diff --git a/packages/openscore-core-quarkus/.mvn/wrapper/MavenWrapperDownloader.java b/packages/openscore-core-quarkus/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..1708393 --- /dev/null +++ b/packages/openscore-core-quarkus/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader +{ + private static final String WRAPPER_VERSION = "3.1.1"; + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/" + WRAPPER_VERSION + + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to use instead of the + * default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main( String args[] ) + { + System.out.println( "- Downloader started" ); + File baseDirectory = new File( args[0] ); + System.out.println( "- Using base directory: " + baseDirectory.getAbsolutePath() ); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File( baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH ); + String url = DEFAULT_DOWNLOAD_URL; + if ( mavenWrapperPropertyFile.exists() ) + { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try + { + mavenWrapperPropertyFileInputStream = new FileInputStream( mavenWrapperPropertyFile ); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load( mavenWrapperPropertyFileInputStream ); + url = mavenWrapperProperties.getProperty( PROPERTY_NAME_WRAPPER_URL, url ); + } + catch ( IOException e ) + { + System.out.println( "- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'" ); + } + finally + { + try + { + if ( mavenWrapperPropertyFileInputStream != null ) + { + mavenWrapperPropertyFileInputStream.close(); + } + } + catch ( IOException e ) + { + // Ignore ... + } + } + } + System.out.println( "- Downloading from: " + url ); + + File outputFile = new File( baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH ); + if ( !outputFile.getParentFile().exists() ) + { + if ( !outputFile.getParentFile().mkdirs() ) + { + System.out.println( "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + + "'" ); + } + } + System.out.println( "- Downloading to: " + outputFile.getAbsolutePath() ); + try + { + downloadFileFromURL( url, outputFile ); + System.out.println( "Done" ); + System.exit( 0 ); + } + catch ( Throwable e ) + { + System.out.println( "- Error downloading" ); + e.printStackTrace(); + System.exit( 1 ); + } + } + + private static void downloadFileFromURL( String urlString, File destination ) + throws Exception + { + if ( System.getenv( "MVNW_USERNAME" ) != null && System.getenv( "MVNW_PASSWORD" ) != null ) + { + String username = System.getenv( "MVNW_USERNAME" ); + char[] password = System.getenv( "MVNW_PASSWORD" ).toCharArray(); + Authenticator.setDefault( new Authenticator() + { + @Override + protected PasswordAuthentication getPasswordAuthentication() + { + return new PasswordAuthentication( username, password ); + } + } ); + } + URL website = new URL( urlString ); + ReadableByteChannel rbc; + rbc = Channels.newChannel( website.openStream() ); + FileOutputStream fos = new FileOutputStream( destination ); + fos.getChannel().transferFrom( rbc, 0, Long.MAX_VALUE ); + fos.close(); + rbc.close(); + } + +} diff --git a/packages/openscore-core-quarkus/.mvn/wrapper/maven-wrapper.properties b/packages/openscore-core-quarkus/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..61a2ef1 --- /dev/null +++ b/packages/openscore-core-quarkus/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar diff --git a/packages/openscore-core-quarkus/README.md b/packages/openscore-core-quarkus/README.md new file mode 100644 index 0000000..53065ae --- /dev/null +++ b/packages/openscore-core-quarkus/README.md @@ -0,0 +1 @@ +docker run --name openscore-db -p 5432:5432 -e POSTGRES_PASSWORD=0p3nsc0r3 -e POSTGRES_USER=postgres -d postgres \ No newline at end of file diff --git a/packages/openscore-core-quarkus/mvnw b/packages/openscore-core-quarkus/mvnw new file mode 100755 index 0000000..eaa3d30 --- /dev/null +++ b/packages/openscore-core-quarkus/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/packages/openscore-core-quarkus/mvnw.cmd b/packages/openscore-core-quarkus/mvnw.cmd new file mode 100644 index 0000000..abb7c32 --- /dev/null +++ b/packages/openscore-core-quarkus/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/packages/openscore-core-quarkus/pom.xml b/packages/openscore-core-quarkus/pom.xml new file mode 100644 index 0000000..38232dd --- /dev/null +++ b/packages/openscore-core-quarkus/pom.xml @@ -0,0 +1,258 @@ + + + 4.0.0 + io.semantic + openscore-core-quarkus + 1.0.0-SNAPSHOT + + 3.8.1 + 11 + UTF-8 + UTF-8 + quarkus-bom + io.quarkus.platform + 2.12.1.Final + true + 3.0.0-M7 + + 2.10.0 + 1.2.0.Final + 4.13.1 + 1.7.24 + 1.4.1 + 1.4.1.Final + + + + + + ${quarkus.platform.group-id} + ${quarkus.platform.artifact-id} + ${quarkus.platform.version} + pom + import + + + + + + io.quarkus + quarkus-arc + + + io.quarkus + quarkus-resteasy + + + io.quarkus + quarkus-resteasy-jsonb + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + + org.slf4j + slf4j-api + ${version.org.slf4j} + + + + ch.qos.logback + logback-classic + ${version.ch.qos.logback} + + + com.google.guava + guava + 23.5-jre + + + commons-beanutils + commons-beanutils + 1.9.4 + + + javax.mail + mail + 1.4.7 + + + io.pebbletemplates + pebble + 3.1.6 + + + + org.jboss.resteasy + resteasy-client + 3.0.14.Final + test + + + com.h2database + h2 + 1.4.196 + test + + + org.apache.commons + commons-text + 1.3 + + + + org.mapstruct + mapstruct + ${org.mapstruct.version} + + + org.mapstruct + mapstruct-processor + ${org.mapstruct.version} + + + javax.el + javax.el-api + 2.2.4 + + + com.nimbusds + nimbus-jose-jwt + 9.25.4 + + + com.google.code.gson + gson + 2.9.0 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + 2.3.0 + + + com.fasterxml.jackson.core + jackson-databind + 2.13.3 + + + junit + junit + ${version.junit} + + + org.mockito + mockito-core + ${version.org.mockito} + + + + + io.quarkus + quarkus-hibernate-orm + + + + + io.quarkus + quarkus-jdbc-postgresql + + + + io.quarkus + quarkus-hibernate-validator + + + + + + ${quarkus.platform.group-id} + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + + -parameters + + + + + maven-surefire-plugin + ${surefire-plugin.version} + + + org.jboss.logmanager.LogManager + ${maven.home} + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + org.jboss.jandex + jandex-maven-plugin + 1.2.3 + + + make-index + + jandex + + + + + + + + + native + + + native + + + + false + native + + + + \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/main/docker/Dockerfile.jvm b/packages/openscore-core-quarkus/src/main/docker/Dockerfile.jvm new file mode 100644 index 0000000..63d045e --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/docker/Dockerfile.jvm @@ -0,0 +1,94 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/code-with-quarkus-jvm . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-jvm +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005) like this : EXPOSE 8080 5005 +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-jvm +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi8/openjdk-11:1.11 + +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' + + +# We make four distinct layers so if there are application changes the library layers can be re-used +COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/ +COPY --chown=185 target/quarkus-app/*.jar /deployments/ +COPY --chown=185 target/quarkus-app/app/ /deployments/app/ +COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/ + +EXPOSE 8080 +USER 185 +ENV AB_JOLOKIA_OFF="" +ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" + diff --git a/packages/openscore-core-quarkus/src/main/docker/Dockerfile.legacy-jar b/packages/openscore-core-quarkus/src/main/docker/Dockerfile.legacy-jar new file mode 100644 index 0000000..7169565 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/docker/Dockerfile.legacy-jar @@ -0,0 +1,90 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package -Dquarkus.package.type=legacy-jar +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/code-with-quarkus-legacy-jar . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-legacy-jar +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005) like this : EXPOSE 8080 5005 +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-legacy-jar +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi8/openjdk-11:1.11 + +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' + + +COPY target/lib/* /deployments/lib/ +COPY target/*-runner.jar /deployments/quarkus-run.jar + +EXPOSE 8080 +USER 185 +ENV AB_JOLOKIA_OFF="" +ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" diff --git a/packages/openscore-core-quarkus/src/main/docker/Dockerfile.native b/packages/openscore-core-quarkus/src/main/docker/Dockerfile.native new file mode 100644 index 0000000..b932d86 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/docker/Dockerfile.native @@ -0,0 +1,27 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +# +# Before building the container image run: +# +# ./mvnw package -Pnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus +# +### +FROM registry.access.redhat.com/ubi8/ubi-minimal:8.5 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root target/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/packages/openscore-core-quarkus/src/main/docker/Dockerfile.native-micro b/packages/openscore-core-quarkus/src/main/docker/Dockerfile.native-micro new file mode 100644 index 0000000..691cfe3 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/docker/Dockerfile.native-micro @@ -0,0 +1,30 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +# It uses a micro base image, tuned for Quarkus native executables. +# It reduces the size of the resulting container image. +# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. +# +# Before building the container image run: +# +# ./mvnw package -Pnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/code-with-quarkus . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus +# +### +FROM quay.io/quarkus/quarkus-micro-image:1.0 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root target/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/OpenScoreApplication.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/OpenScoreApplication.java new file mode 100644 index 0000000..c83d0db --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/OpenScoreApplication.java @@ -0,0 +1,9 @@ +package io.semantic.openscore.core; + +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; + +@ApplicationPath("api/rest") +public class OpenScoreApplication extends Application { + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ApiResponse.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ApiResponse.java new file mode 100644 index 0000000..4de138f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ApiResponse.java @@ -0,0 +1,35 @@ +package io.semantic.openscore.core.api; + +public class ApiResponse { + + private String error; + private String description; + private T data; + + public ApiResponse() { + } + + public ApiResponse(T data) { + this.data = data; + } + + public ApiResponse(String error, + String description, + T data) { + this(data); + this.description = description; + this.error = error; + } + + public String getDescription() { + return description; + } + + public String getError() { + return error; + } + + public T getData() { + return data; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ImagenApi.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ImagenApi.java new file mode 100644 index 0000000..7f4ae17 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ImagenApi.java @@ -0,0 +1,32 @@ +package io.semantic.openscore.core.api; + +public class ImagenApi { + + private long id; + private String nombre; + private byte[] content; + + public byte[] getContent() { + return content; + } + + public void setContent(byte[] content) { + this.content = content; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/TokenDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/TokenDTO.java new file mode 100644 index 0000000..e01be9d --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/TokenDTO.java @@ -0,0 +1,18 @@ +package io.semantic.openscore.core.api; + +public class TokenDTO { + + private String token; + + public TokenDTO(String token) { + this.token = token; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/admin/UsuarioCompletoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/admin/UsuarioCompletoDTO.java new file mode 100644 index 0000000..d9aa8a9 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/admin/UsuarioCompletoDTO.java @@ -0,0 +1,87 @@ +package io.semantic.openscore.core.api.admin; + +import io.semantic.openscore.core.api.paises.PaisDTO; + +public class UsuarioCompletoDTO { + private long id; + private String nombre; + private String apellido; + private PaisDTO pais; + private String email; + private boolean deleted; + private String creationDate; + private String deletionDate; + private String modificationDate; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getApellido() { + return apellido; + } + + public void setApellido(String apellido) { + this.apellido = apellido; + } + + public PaisDTO getPais() { + return pais; + } + + public void setPais(PaisDTO pais) { + this.pais = pais; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public boolean isDeleted() { + return deleted; + } + + public void setDeleted(boolean deleted) { + this.deleted = deleted; + } + + public String getCreationDate() { + return creationDate; + } + + public void setCreationDate(String creationDate) { + this.creationDate = creationDate; + } + + public String getDeletionDate() { + return deletionDate; + } + + public void setDeletionDate(String deletionDate) { + this.deletionDate = deletionDate; + } + + public String getModificationDate() { + return modificationDate; + } + + public void setModificationDate(String modificationDate) { + this.modificationDate = modificationDate; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/competiciones/CrearDefinicionCompeticionDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/competiciones/CrearDefinicionCompeticionDTO.java new file mode 100644 index 0000000..8ba4e0f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/competiciones/CrearDefinicionCompeticionDTO.java @@ -0,0 +1,33 @@ +package io.semantic.openscore.core.api.competiciones; + +public class CrearDefinicionCompeticionDTO { + + private String nombre; + private String logo; + private String descripcion; + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getLogo() { + return logo; + } + + public void setLogo(String logo) { + this.logo = logo; + } + + public String getDescripcion() { + return descripcion; + } + + public void setDescripcion(String descripcion) { + this.descripcion = descripcion; + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/competiciones/DefinicionCompeticionDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/competiciones/DefinicionCompeticionDTO.java new file mode 100644 index 0000000..42fcb71 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/competiciones/DefinicionCompeticionDTO.java @@ -0,0 +1,32 @@ +package io.semantic.openscore.core.api.competiciones; + +public class DefinicionCompeticionDTO { + + private String nombre; + private String logo; + private String descripcion; + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getLogo() { + return logo; + } + + public void setLogo(String logo) { + this.logo = logo; + } + + public String getDescripcion() { + return descripcion; + } + + public void setDescripcion(String descripcion) { + this.descripcion = descripcion; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/equipos/CrearEquipoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/equipos/CrearEquipoDTO.java new file mode 100644 index 0000000..19322c0 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/equipos/CrearEquipoDTO.java @@ -0,0 +1,41 @@ +package io.semantic.openscore.core.api.equipos; + +public class CrearEquipoDTO { + + private String nombre; + private String codigo; + private String codigoPais; + private String logo; + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public String getCodigoPais() { + return codigoPais; + } + + public void setCodigoPais(String codigoPais) { + this.codigoPais = codigoPais; + } + + public String getLogo() { + return logo; + } + + public void setLogo(String logo) { + this.logo = logo; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/equipos/EquipoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/equipos/EquipoDTO.java new file mode 100644 index 0000000..c69830a --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/equipos/EquipoDTO.java @@ -0,0 +1,52 @@ +package io.semantic.openscore.core.api.equipos; + +import io.semantic.openscore.core.api.paises.PaisDTO; + +public class EquipoDTO { + + private long id; + private String nombre; + private String codigo; + private PaisDTO pais; + private String logo; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public String getLogo() { + return logo; + } + + public void setLogo(String logo) { + this.logo = logo; + } + + public PaisDTO getPais() { + return pais; + } + + public void setPais(PaisDTO pais) { + this.pais = pais; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/grupos/FaseDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/grupos/FaseDTO.java new file mode 100644 index 0000000..b614846 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/grupos/FaseDTO.java @@ -0,0 +1,23 @@ +package io.semantic.openscore.core.api.grupos; + +public class FaseDTO { + + private String codigo; + private String nombre; + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/grupos/GrupoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/grupos/GrupoDTO.java new file mode 100644 index 0000000..b867b74 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/grupos/GrupoDTO.java @@ -0,0 +1,23 @@ +package io.semantic.openscore.core.api.grupos; + +public class GrupoDTO { + + private String codigo; + private String nombre; + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/information/Information.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/information/Information.java new file mode 100644 index 0000000..a70eed5 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/information/Information.java @@ -0,0 +1,35 @@ +package io.semantic.openscore.core.api.information; + +import java.util.Map; + +public class Information { + + private String version; + private String environment; + + private Map properties; + + public void setVersion(String version) { + this.version = version; + } + + public String getVersion() { + return version; + } + + public void setEnvironment(String environment) { + this.environment = environment; + } + + public String getEnvironment() { + return environment; + } + + public Map getProperties() { + return properties; + } + + public void setProperties(Map properties) { + this.properties = properties; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/paises/PaisDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/paises/PaisDTO.java new file mode 100644 index 0000000..648a31d --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/paises/PaisDTO.java @@ -0,0 +1,23 @@ +package io.semantic.openscore.core.api.paises; + +public class PaisDTO { + + private String codigo; + private String nombre; + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java new file mode 100644 index 0000000..da94583 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java @@ -0,0 +1,70 @@ +package io.semantic.openscore.core.api.partidos; + +import java.util.Date; + +public class CrearOUpdatePartidoDTO { + + private String local; + private String visitante; + private Date dia; + private int fecha; + private String lugar; + private String grupo; + private String fase; + + public String getLocal() { + return local; + } + + public void setLocal(String local) { + this.local = local; + } + + public String getVisitante() { + return visitante; + } + + public void setVisitante(String visitante) { + this.visitante = visitante; + } + + public Date getDia() { + return dia; + } + + public void setDia(Date dia) { + this.dia = dia; + } + + public String getLugar() { + return lugar; + } + + public void setLugar(String lugar) { + this.lugar = lugar; + } + + public int getFecha() { + return fecha; + } + + public void setFecha(int fecha) { + this.fecha = fecha; + } + + public String getGrupo() { + return grupo; + } + + public void setGrupo(String grupo) { + this.grupo = grupo; + } + + public String getFase() { + return fase; + } + + public void setFase(String fase) { + this.fase = fase; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java new file mode 100644 index 0000000..efb89eb --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java @@ -0,0 +1,101 @@ +package io.semantic.openscore.core.api.partidos; + +import io.semantic.openscore.core.api.equipos.EquipoDTO; +import io.semantic.openscore.core.api.grupos.FaseDTO; +import io.semantic.openscore.core.api.grupos.GrupoDTO; + +import java.util.Date; + +public class PartidoDTO { + + private long id; + private EquipoDTO local; + private EquipoDTO visitante; + private Date dia; + private int fecha; + private GrupoDTO grupo; + private FaseDTO fase; + private String lugar; + private String status; + private ResultadoDTO resultado; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public EquipoDTO getLocal() { + return local; + } + + public void setLocal(EquipoDTO local) { + this.local = local; + } + + public EquipoDTO getVisitante() { + return visitante; + } + + public void setVisitante(EquipoDTO visitante) { + this.visitante = visitante; + } + + public Date getDia() { + return dia; + } + + public void setDia(Date dia) { + this.dia = dia; + } + + public String getLugar() { + return lugar; + } + + public void setLugar(String lugar) { + this.lugar = lugar; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public GrupoDTO getGrupo() { + return grupo; + } + + public void setGrupo(GrupoDTO grupo) { + this.grupo = grupo; + } + + public FaseDTO getFase() { + return fase; + } + + public void setFase(FaseDTO fase) { + this.fase = fase; + } + + public int getFecha() { + return fecha; + } + + public void setFecha(int fecha) { + this.fecha = fecha; + } + + public ResultadoDTO getResultado() { + return resultado; + } + + public void setResultado(ResultadoDTO resultado) { + this.resultado = resultado; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java new file mode 100644 index 0000000..dd21c78 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java @@ -0,0 +1,23 @@ +package io.semantic.openscore.core.api.partidos; + +public class ResultadoDTO { + + private int local; + private int visitante; + + public int getLocal() { + return local; + } + + public void setLocal(int local) { + this.local = local; + } + + public int getVisitante() { + return visitante; + } + + public void setVisitante(int visitante) { + this.visitante = visitante; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/post/CrearPost.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/post/CrearPost.java new file mode 100644 index 0000000..6f2411a --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/post/CrearPost.java @@ -0,0 +1,32 @@ +package io.semantic.openscore.core.api.post; + +public class CrearPost { + + private String titulo; + private String contenido; + private String autor; + + public String getTitulo() { + return titulo; + } + + public void setTitulo(String titulo) { + this.titulo = titulo; + } + + public String getContenido() { + return contenido; + } + + public void setContenido(String contenido) { + this.contenido = contenido; + } + + public String getAutor() { + return autor; + } + + public void setAutor(String autor) { + this.autor = autor; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/CrearPronosticoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/CrearPronosticoDTO.java new file mode 100644 index 0000000..f0e0b1c --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/CrearPronosticoDTO.java @@ -0,0 +1,42 @@ +package io.semantic.openscore.core.api.pronosticos; + +public class CrearPronosticoDTO { + + + private boolean local; + private boolean visitante; + private boolean empate; + private long partido; + + public boolean isLocal() { + return local; + } + + public void setLocal(boolean local) { + this.local = local; + } + + public boolean isVisitante() { + return visitante; + } + + public void setVisitante(boolean visitante) { + this.visitante = visitante; + } + + public boolean isEmpate() { + return empate; + } + + public void setEmpate(boolean empate) { + this.empate = empate; + } + + public long getPartido() { + return partido; + } + + public void setPartido(long partido) { + this.partido = partido; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/PartidoPronosticoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/PartidoPronosticoDTO.java new file mode 100644 index 0000000..0f7408e --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/PartidoPronosticoDTO.java @@ -0,0 +1,16 @@ +package io.semantic.openscore.core.api.pronosticos; + +import io.semantic.openscore.core.api.partidos.PartidoDTO; + +public class PartidoPronosticoDTO extends PartidoDTO { + + private PronosticoDTO pronostico; + + public PronosticoDTO getPronostico() { + return pronostico; + } + + public void setPronostico(PronosticoDTO pronostico) { + this.pronostico = pronostico; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/PronosticoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/PronosticoDTO.java new file mode 100644 index 0000000..1c397e5 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/pronosticos/PronosticoDTO.java @@ -0,0 +1,49 @@ +package io.semantic.openscore.core.api.pronosticos; + +import io.semantic.openscore.core.model.Usuario; + +import javax.persistence.ManyToOne; + +public class PronosticoDTO { + + private long id; + private boolean local; + private boolean visitante; + private boolean empate; + + @ManyToOne + private Usuario usuario; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public boolean isLocal() { + return local; + } + + public void setLocal(boolean local) { + this.local = local; + } + + public boolean isVisitante() { + return visitante; + } + + public void setVisitante(boolean visitante) { + this.visitante = visitante; + } + + public boolean isEmpate() { + return empate; + } + + public void setEmpate(boolean empate) { + this.empate = empate; + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ranking/Ranking.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ranking/Ranking.java new file mode 100644 index 0000000..4704c0f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/ranking/Ranking.java @@ -0,0 +1,50 @@ +package io.semantic.openscore.core.api.ranking; + +public class Ranking { + + private int ranking; + private int puntos; + private String nombre; + private String pais; + private long usuario; + + public int getRanking() { + return ranking; + } + + public void setRanking(int ranking) { + this.ranking = ranking; + } + + public int getPuntos() { + return puntos; + } + + public void setPuntos(int puntos) { + this.puntos = puntos; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getPais() { + return pais; + } + + public void setPais(String pais) { + this.pais = pais; + } + + public long getUsuario() { + return usuario; + } + + public void setUsuario(long usuario) { + this.usuario = usuario; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/CrearUsuarioDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/CrearUsuarioDTO.java new file mode 100644 index 0000000..553b124 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/CrearUsuarioDTO.java @@ -0,0 +1,100 @@ +package io.semantic.openscore.core.api.usuarios; + +import io.semantic.openscore.core.validation.annotations.Matches; +import io.semantic.openscore.core.validation.annotations.Password; +import org.hibernate.validator.constraints.Email; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotEmpty; + +import javax.validation.constraints.NotNull; + +@Matches.List({ + @Matches(first = "password", second = "confirmacionPassword"), + @Matches(first = "email", second = "confirmacionEmail")}) +public class CrearUsuarioDTO { + + @NotNull + @Length(min = 2) + private String nombre; + + @NotNull + @Length(min = 2) + private String apellido; + + @NotNull + @NotEmpty + private String pais; + + @NotNull + @Email(regexp = ".*@redhat\\.com") + private String email; + + @NotNull + @Email(regexp = ".*@redhat\\.com") + private String confirmacionEmail; + + @NotNull + @Password + private String password; + + @NotNull + @Password + private String confirmacionPassword; + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getApellido() { + return apellido; + } + + public void setApellido(String apellido) { + this.apellido = apellido; + } + + public String getPais() { + return pais; + } + + public void setPais(String pais) { + this.pais = pais; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getConfirmacionEmail() { + return confirmacionEmail; + } + + public void setConfirmacionEmail(String confirmacionEmail) { + this.confirmacionEmail = confirmacionEmail; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getConfirmacionPassword() { + return confirmacionPassword; + } + + public void setConfirmacionPassword(String confirmacionPassword) { + this.confirmacionPassword = confirmacionPassword; + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/LoginUsuarioDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/LoginUsuarioDTO.java new file mode 100644 index 0000000..1b70131 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/LoginUsuarioDTO.java @@ -0,0 +1,23 @@ +package io.semantic.openscore.core.api.usuarios; + +public class LoginUsuarioDTO { + + private String email; + private String password; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/RecoverPassword.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/RecoverPassword.java new file mode 100644 index 0000000..1508e42 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/RecoverPassword.java @@ -0,0 +1,60 @@ +package io.semantic.openscore.core.api.usuarios; + +import io.semantic.openscore.core.validation.annotations.Matches; +import io.semantic.openscore.core.validation.annotations.Password; +import org.hibernate.validator.constraints.Email; + +import javax.validation.constraints.NotNull; + +@Matches.List({ + @Matches(first = "password", second = "confirmacionPassword")}) +public class RecoverPassword { + + + @NotNull + @Email(regexp = ".*@redhat\\.com") + private String email; + + @NotNull + private String token; + + @NotNull + @Password + private String password; + + @NotNull + @Password + private String confirmacionPassword; + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getConfirmacionPassword() { + return confirmacionPassword; + } + + public void setConfirmacionPassword(String confirmacionPassword) { + this.confirmacionPassword = confirmacionPassword; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdatePassword.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdatePassword.java new file mode 100644 index 0000000..854c287 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdatePassword.java @@ -0,0 +1,47 @@ +package io.semantic.openscore.core.api.usuarios; + +import io.semantic.openscore.core.validation.annotations.Matches; +import io.semantic.openscore.core.validation.annotations.Password; +import org.hibernate.validator.constraints.NotEmpty; + +import javax.validation.constraints.NotNull; + +@Matches.List({ + @Matches(first = "password", second = "confirmacionPassword")}) +public class UpdatePassword { + + @NotEmpty + private String oldPassword; + + @NotEmpty + @Password + private String password; + + @NotEmpty + @Password + private String confirmacionPassword; + + public String getOldPassword() { + return oldPassword; + } + + public void setOldPassword(String oldPassword) { + this.oldPassword = oldPassword; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getConfirmacionPassword() { + return confirmacionPassword; + } + + public void setConfirmacionPassword(String confirmacionPassword) { + this.confirmacionPassword = confirmacionPassword; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateSecretQuestion.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateSecretQuestion.java new file mode 100644 index 0000000..c68f7ed --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateSecretQuestion.java @@ -0,0 +1,42 @@ +package io.semantic.openscore.core.api.usuarios; + +import io.semantic.openscore.core.validation.annotations.Password; + +import javax.validation.constraints.NotNull; + +public class UpdateSecretQuestion { + + @NotNull + private String preguntaSecreta; + + @NotNull + private String respuestaPreguntaSecreta; + + @NotNull + @Password + private String password; + + public String getPreguntaSecreta() { + return preguntaSecreta; + } + + public void setPreguntaSecreta(String preguntaSecreta) { + this.preguntaSecreta = preguntaSecreta; + } + + public String getRespuestaPreguntaSecreta() { + return respuestaPreguntaSecreta; + } + + public void setRespuestaPreguntaSecreta(String respuestaPreguntaSecreta) { + this.respuestaPreguntaSecreta = respuestaPreguntaSecreta; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateUsuarioDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateUsuarioDTO.java new file mode 100644 index 0000000..1bcfcf2 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateUsuarioDTO.java @@ -0,0 +1,46 @@ +package io.semantic.openscore.core.api.usuarios; + +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotEmpty; + +import javax.validation.constraints.NotNull; + +public class UpdateUsuarioDTO { + + @NotNull + @Length(min = 2) + private String nombre; + + @NotNull + @Length(min = 2) + private String apellido; + + @NotNull + @NotEmpty + private String pais; + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getApellido() { + return apellido; + } + + public void setApellido(String apellido) { + this.apellido = apellido; + } + + public String getPais() { + return pais; + } + + public void setPais(String pais) { + this.pais = pais; + } +} + diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UsuarioDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UsuarioDTO.java new file mode 100644 index 0000000..713510c --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/usuarios/UsuarioDTO.java @@ -0,0 +1,69 @@ +package io.semantic.openscore.core.api.usuarios; + +import io.semantic.openscore.core.api.paises.PaisDTO; +import org.hibernate.validator.constraints.Email; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotEmpty; + +import javax.validation.constraints.NotNull; + +public class UsuarioDTO { + + @NotEmpty + private long id; + + @NotNull + @Length(min = 2) + private String nombre; + + @NotNull + @Length(min = 2) + private String apellido; + + @NotNull + private PaisDTO pais; + + @NotNull + @Email + private String email; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getApellido() { + return apellido; + } + + public void setApellido(String apellido) { + this.apellido = apellido; + } + + public PaisDTO getPais() { + return pais; + } + + public void setPais(PaisDTO pais) { + this.pais = pais; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/cache/TokenCache.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/cache/TokenCache.java new file mode 100644 index 0000000..470b2df --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/cache/TokenCache.java @@ -0,0 +1,74 @@ +package io.semantic.openscore.core.cache; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.cache.RemovalCause; +import com.google.common.cache.RemovalListener; +import com.google.common.cache.RemovalNotification; + +import javax.annotation.PostConstruct; +import javax.enterprise.context.ApplicationScoped; +import java.io.IOException; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +@ApplicationScoped +public class TokenCache { + + private Logger logger = LoggerFactory.getLogger(TokenCache.class); + private LoadingCache cache; + + public TokenCache() { + CacheLoader loader; + loader = new CacheLoader() { + @Override + public String load(final String key) { + return key.toUpperCase(); + } + }; + + LoadingCache cache; + cache = CacheBuilder.newBuilder() + .maximumSize(3) + .build(loader); + + } + + public boolean isValid(String email, String token) { + Optional t; + try { + t = Optional.ofNullable(this.cache.get(email)); + return t.map(x -> x.equals(token)).orElse(false); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return false; + } + + public void remove(String email) { + this.cache.invalidate(email); + logger.info("Entry <{}> removed, new object count: {}", email, this.cache.size()); + } + + public void add(String email, String token) { + this.cache.put(email, token); + logger.info("Entry <{}> added, new object count: {}", email, this.cache.size()); + } + + public Optional getToken(String email) { + String token = null; + try { + token = this.cache.get(email); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + logger.info("For key <{}>, value found: <{}>", email, token); + return Optional.ofNullable(token); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/FSMailProvider.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/FSMailProvider.java new file mode 100644 index 0000000..a3c6182 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/FSMailProvider.java @@ -0,0 +1,34 @@ +package io.semantic.openscore.core.email; + +import com.google.common.io.Files; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Alternative; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +@Alternative +@ApplicationScoped +public class FSMailProvider implements MailProvider { + + private Logger logger = LoggerFactory.getLogger(FSMailProvider.class); + + @Override + public void send(String to, String subject, String mail) { + try { + File folder = new File("/tmp/mail"); + if (!folder.exists()) { + folder.mkdirs(); + } + File file = new File(folder, to + "_" + subject + ".html"); + file.createNewFile(); + Files.asCharSink(file, StandardCharsets.UTF_8).write(mail); + logger.info("Email sent"); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailFactory.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailFactory.java new file mode 100644 index 0000000..4255698 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailFactory.java @@ -0,0 +1,17 @@ +package io.semantic.openscore.core.email; + +import java.util.HashMap; +import java.util.Map; + +import javax.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class MailFactory { + + public MailTemplate getRecoverPasswordEmail(String to, String token) { + Map map = new HashMap<>(); + map.put("email", to); + map.put("token", token); + return new MailTemplate(to, "Recover Password", "recover", map); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailProvider.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailProvider.java new file mode 100644 index 0000000..45cff98 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailProvider.java @@ -0,0 +1,6 @@ +package io.semantic.openscore.core.email; + +public interface MailProvider { + + void send(String to, String subject, String email); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailServer.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailServer.java new file mode 100644 index 0000000..ff41515 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailServer.java @@ -0,0 +1,30 @@ +package io.semantic.openscore.core.email; + +import io.semantic.openscore.core.template.TemplateEngine; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +@ApplicationScoped +public class MailServer { + + private MailProvider provider; + private TemplateEngine templateEngine; + + + public MailServer() { + } + + @Inject + public MailServer(MailProvider provider, + TemplateEngine templateEngine) { + + this.provider = provider; + this.templateEngine = templateEngine; + } + + public void send(MailTemplate template) { + String email = this.templateEngine.evaluate(template.getTemplateName(), template.getParams()); + this.provider.send(template.getTo(), template.getSubject(), email); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailTemplate.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailTemplate.java new file mode 100644 index 0000000..8430fbf --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/MailTemplate.java @@ -0,0 +1,38 @@ +package io.semantic.openscore.core.email; + +import java.util.Map; + +public class MailTemplate { + + private final String to; + private final String subject; + private final String templateName; + private final Map params; + + public MailTemplate(String to, + String subject, + String templateName, + Map params) { + + this.to = to; + this.subject = subject; + this.templateName = templateName; + this.params = params; + } + + public String getTo() { + return to; + } + + public String getSubject() { + return subject; + } + + public String getTemplateName() { + return templateName; + } + + public Map getParams() { + return params; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/SMTPProvider.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/SMTPProvider.java new file mode 100644 index 0000000..8cf837f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/SMTPProvider.java @@ -0,0 +1,34 @@ +package io.semantic.openscore.core.email; + +import javax.annotation.Resource; +import javax.enterprise.context.ApplicationScoped; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Session; +import javax.mail.Transport; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; +import java.util.Date; + +@ApplicationScoped +public class SMTPProvider implements MailProvider { + + @Resource(lookup = "EMailME") + private Session mailSession; + + @Override + public void send(String to, String subject, String email) { + MimeMessage message = new MimeMessage(mailSession); + try { + message.setFrom(new InternetAddress(mailSession.getProperty("mail.from"))); + InternetAddress[] address = {new InternetAddress(to)}; + message.setRecipients(Message.RecipientType.TO, address); + message.setSubject(subject); + message.setSentDate(new Date()); + message.setText(email); + Transport.send(message); + } catch (MessagingException ex) { + ex.printStackTrace(); + } + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/StdoutMailSender.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/StdoutMailSender.java new file mode 100644 index 0000000..8899573 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/email/StdoutMailSender.java @@ -0,0 +1,22 @@ +package io.semantic.openscore.core.email; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Alternative; + +@Alternative +@ApplicationScoped +public class StdoutMailSender implements MailProvider { + + private Logger logger = LoggerFactory.getLogger(StdoutMailSender.class); + + public StdoutMailSender() { + } + + @Override + public void send(String to, String subject, String email) { + logger.info(email); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/ApplicationException.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/ApplicationException.java new file mode 100644 index 0000000..9cb2b95 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/ApplicationException.java @@ -0,0 +1,14 @@ +package io.semantic.openscore.core.exceptions; + +public abstract class ApplicationException extends RuntimeException { + + public ApplicationException(String message) { + super(message); + } + + public ApplicationException(String message, + Throwable cause) { + super(message, + cause); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/EmailException.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/EmailException.java new file mode 100644 index 0000000..a002387 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/EmailException.java @@ -0,0 +1,7 @@ +package io.semantic.openscore.core.exceptions; + +public class EmailException extends ApplicationException { + public EmailException(String message) { + super(message); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/EntityNotFoundException.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/EntityNotFoundException.java new file mode 100644 index 0000000..b4cd72f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/EntityNotFoundException.java @@ -0,0 +1,8 @@ +package io.semantic.openscore.core.exceptions; + +public class EntityNotFoundException extends ApplicationException { + + public EntityNotFoundException(String message) { + super(message); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/NoSePuedeLeerInformacionException.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/NoSePuedeLeerInformacionException.java new file mode 100644 index 0000000..c3b9402 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/NoSePuedeLeerInformacionException.java @@ -0,0 +1,8 @@ +package io.semantic.openscore.core.exceptions; + +public class NoSePuedeLeerInformacionException extends ApplicationException { + + public NoSePuedeLeerInformacionException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/PartidoBloqueadoException.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/PartidoBloqueadoException.java new file mode 100644 index 0000000..659e1aa --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/PartidoBloqueadoException.java @@ -0,0 +1,9 @@ +package io.semantic.openscore.core.exceptions; + +import java.text.MessageFormat; + +public class PartidoBloqueadoException extends ApplicationException { + public PartidoBloqueadoException(String local, String visitante) { + super(MessageFormat.format("El partido {0} - {1} se encuentra bloqueado", local, visitante)); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/ValidationException.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/ValidationException.java new file mode 100644 index 0000000..b03c606 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/exceptions/ValidationException.java @@ -0,0 +1,44 @@ +package io.semantic.openscore.core.exceptions; + +import javax.validation.ConstraintViolation; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import static java.util.stream.Collectors.joining; +import static java.util.stream.Collectors.toList; + +public class ValidationException extends ApplicationException { + + private final List data; + + public ValidationException(String message, List data) { + super(message); + this.data = data; + } + + public ValidationException(String message, Throwable e) { + super(message); + this.data = Collections.emptyList(); + } + + public static String generateMessage(Set> errors) { + return ValidationException.generateErrorsList(errors).stream().collect(joining("\n")); + } + + private static String processErrorMessage(ConstraintViolation objectConstraintViolation) { + return objectConstraintViolation.getPropertyPath().toString() + ": " + + objectConstraintViolation.getMessage(); + } + + public static List generateErrorsList(Set> errors) { + return errors.stream() + .map(objectConstraintViolation -> processErrorMessage(objectConstraintViolation)) + .collect(toList()); + } + + public List getData() { + return data; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/logging/BaseLogger.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/logging/BaseLogger.java new file mode 100644 index 0000000..f53ef2f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/logging/BaseLogger.java @@ -0,0 +1,24 @@ +package io.semantic.openscore.core.logging; + + +import org.slf4j.Logger; + +public abstract class BaseLogger { + + private Logger logger; + + public BaseLogger(Logger logger) { + this.logger = logger; + } + + public boolean isDebugEnabled() { + return this.getLogger().isDebugEnabled(); + } + + + protected Logger getLogger() { + return this.logger; + } + + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/logging/ServiceLogger.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/logging/ServiceLogger.java new file mode 100644 index 0000000..3c89362 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/logging/ServiceLogger.java @@ -0,0 +1,14 @@ +package io.semantic.openscore.core.logging; + +import java.text.MessageFormat; + +import javax.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class ServiceLogger { + + public String emailInvalido(String email) { + return MessageFormat.format("El email <{0}> es inválido", email); + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/EquipoMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/EquipoMapper.java new file mode 100644 index 0000000..72ae1d9 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/EquipoMapper.java @@ -0,0 +1,21 @@ +package io.semantic.openscore.core.mapping; + +import io.semantic.openscore.core.api.equipos.CrearEquipoDTO; +import io.semantic.openscore.core.api.equipos.EquipoDTO; +import io.semantic.openscore.core.model.Equipo; +import org.mapstruct.Mapper; + +import java.util.List; + +@Mapper(componentModel = "cdi") +public interface EquipoMapper { + + Equipo asEquipo(EquipoDTO equipoDTO); + + Equipo asEquipo(CrearEquipoDTO crearEquipoDTO); + + EquipoDTO asApi(Equipo equipo); + + List asApi(List equipos); + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/FaseMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/FaseMapper.java new file mode 100644 index 0000000..822b7a3 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/FaseMapper.java @@ -0,0 +1,16 @@ +package io.semantic.openscore.core.mapping; + +import io.semantic.openscore.core.api.grupos.FaseDTO; +import io.semantic.openscore.core.model.Fase; +import org.mapstruct.Mapper; + +import java.util.List; + +@Mapper(componentModel = "cdi") +public interface FaseMapper { + + + FaseDTO asApi(Fase fase); + + List asApi(List fase); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/GrupoMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/GrupoMapper.java new file mode 100644 index 0000000..4bde386 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/GrupoMapper.java @@ -0,0 +1,15 @@ +package io.semantic.openscore.core.mapping; + +import io.semantic.openscore.core.api.grupos.GrupoDTO; +import io.semantic.openscore.core.model.Grupo; +import org.mapstruct.Mapper; + +import java.util.List; + +@Mapper(componentModel = "cdi") +public interface GrupoMapper { + + GrupoDTO asApi(Grupo partido); + + List asApi(List partido); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PaisMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PaisMapper.java new file mode 100644 index 0000000..6cc6887 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PaisMapper.java @@ -0,0 +1,18 @@ +package io.semantic.openscore.core.mapping; + +import io.semantic.openscore.core.api.paises.PaisDTO; +import io.semantic.openscore.core.model.Pais; +import org.mapstruct.Mapper; + +import java.util.List; + +@Mapper(componentModel = "cdi") +public interface PaisMapper { + + Pais asPais(PaisDTO paisDTO); + + PaisDTO asApi(Pais pais); + + List asApi(List pais); + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java new file mode 100644 index 0000000..7f73bac --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java @@ -0,0 +1,20 @@ +package io.semantic.openscore.core.mapping; + +import io.semantic.openscore.core.api.partidos.CrearOUpdatePartidoDTO; +import io.semantic.openscore.core.api.partidos.PartidoDTO; +import io.semantic.openscore.core.api.partidos.ResultadoDTO; +import io.semantic.openscore.core.model.Partido; +import io.semantic.openscore.core.model.Resultado; +import org.mapstruct.Mapper; + +import java.util.List; + +@Mapper(componentModel = "cdi") +public interface PartidoMapper { + + PartidoDTO asApi(Partido partido); + + List asApi(List partido); + + Resultado asResultado(ResultadoDTO resultado); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java new file mode 100644 index 0000000..a33e405 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java @@ -0,0 +1,36 @@ +package io.semantic.openscore.core.mapping; + +import io.semantic.openscore.core.api.pronosticos.CrearPronosticoDTO; +import io.semantic.openscore.core.api.pronosticos.PartidoPronosticoDTO; +import io.semantic.openscore.core.api.pronosticos.PronosticoDTO; +import io.semantic.openscore.core.model.Partido; +import io.semantic.openscore.core.model.Pronostico; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.Mappings; + +import java.util.List; + +@Mapper(componentModel = "cdi") +public interface PronosticoMapper { + + + PronosticoDTO asApi(Pronostico pronostico); + + List asApi(List pronosticos); + + @Mappings({ + @Mapping(source = "partido", target = "partido", ignore = true) + }) + Pronostico asPronostico(CrearPronosticoDTO crearPronostico); + + PartidoPronosticoDTO asApiPronostico(Partido partido); + + List asApiPronostico(List partido); + + @Mappings({ + @Mapping(source = "partido", target = "partido", ignore = true) + }) + void updatePronostico(CrearPronosticoDTO crearPronostico, @MappingTarget Pronostico pronostico); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/UsuarioMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/UsuarioMapper.java new file mode 100644 index 0000000..be1378c --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/UsuarioMapper.java @@ -0,0 +1,37 @@ +package io.semantic.openscore.core.mapping; + +import io.semantic.openscore.core.api.admin.UsuarioCompletoDTO; +import io.semantic.openscore.core.api.usuarios.CrearUsuarioDTO; +import io.semantic.openscore.core.api.usuarios.UpdateUsuarioDTO; +import io.semantic.openscore.core.api.usuarios.UsuarioDTO; +import io.semantic.openscore.core.model.Usuario; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.Mappings; + +import java.util.List; + +@Mapper(componentModel = "cdi") +public interface UsuarioMapper { + + Usuario asUsuario(UsuarioDTO api); + + @Mappings({ + @Mapping(source = "pais", target = "pais", ignore = true) + }) + Usuario asUsuario(CrearUsuarioDTO crearUsuario); + + @Mappings({ + @Mapping(source = "pais", target = "pais", ignore = true), + }) + void updateUsuario(UpdateUsuarioDTO usuarioDTO, @MappingTarget Usuario car); + + UsuarioDTO asApi(Usuario usuario); + + List asApi(List usuario); + + List asCompletoApi(List usuario); + + UsuarioCompletoDTO asCompletoApi(Usuario usuario); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Equipo.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Equipo.java new file mode 100644 index 0000000..9d52a8d --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Equipo.java @@ -0,0 +1,47 @@ +package io.semantic.openscore.core.model; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; + +@Entity +public class Equipo extends Storable { + + private String nombre; + private String codigo; + private String logo; + + + public Equipo() { + } + + public Equipo(String codigo, String nombre, String logo) { + this.nombre = nombre; + this.codigo = codigo; + this.logo = logo; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public String getLogo() { + return logo; + } + + public void setLogo(String logo) { + this.logo = logo; + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Fase.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Fase.java new file mode 100644 index 0000000..59eb9ae --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Fase.java @@ -0,0 +1,42 @@ +package io.semantic.openscore.core.model; + +import javax.persistence.Entity; + +@Entity +public class Fase extends Storable { + + public static final String GRUPO = "GRUPO"; + public static final String OCTAVOS = "OCTAVOS"; + public static final String CUARTOS = "CUARTOS"; + public static final String SEMI = "SEMI"; + public static final String FINAL = "FINAL"; + public static final String TERCER = "TERCER"; + + private String codigo; + private String nombre; + private Integer puntos; + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public Integer getPuntos() { + return puntos; + } + + public void setPuntos(Integer puntos) { + this.puntos = puntos; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Ganador.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Ganador.java new file mode 100644 index 0000000..212b3df --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Ganador.java @@ -0,0 +1,8 @@ +package io.semantic.openscore.core.model; + +public enum Ganador { + + LOCAL, + VISITANTE, + EMPATE +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Grupo.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Grupo.java new file mode 100644 index 0000000..2597545 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Grupo.java @@ -0,0 +1,36 @@ +package io.semantic.openscore.core.model; + +import javax.persistence.Entity; + +@Entity +public class Grupo extends Storable { + + public final static String GRUPO_A = "GRUPO_A"; + public final static String GRUPO_B = "GRUPO_B"; + public final static String GRUPO_C = "GRUPO_C"; + public final static String GRUPO_D = "GRUPO_D"; + public final static String GRUPO_E = "GRUPO_E"; + public final static String GRUPO_F = "GRUPO_F"; + public final static String GRUPO_G = "GRUPO_G"; + public final static String GRUPO_H = "GRUPO_H"; + public final static String NONE = "NONE"; + + private String codigo; + private String nombre; + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getCodigo() { + return codigo; + } + + public String getNombre() { + return nombre; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Pais.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Pais.java new file mode 100644 index 0000000..d6b5e62 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Pais.java @@ -0,0 +1,48 @@ +package io.semantic.openscore.core.model; + +import javax.persistence.Entity; +import javax.validation.constraints.NotNull; + +@Entity +public class Pais extends Storable { + + @NotNull + private String nombre; + + @NotNull + private String codigo; + + public Pais() { + } + + public Pais(String codigo, String nombre) { + this.setCodigo(codigo); + this.setNombre(nombre); + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof Pais) { + return this.getCodigo().equals(((Pais) obj).getCodigo()); + } else { + return super.equals(obj); + } + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java new file mode 100644 index 0000000..a41ff1d --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java @@ -0,0 +1,132 @@ +package io.semantic.openscore.core.model; + +import javax.persistence.Embedded; +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import java.util.Date; + +@Entity +public class Partido extends Storable { + + @ManyToOne + private Equipo local; + + @ManyToOne + private Equipo visitante; + private Date dia; + private String lugar; + private int fecha; + + @ManyToOne + private Grupo grupo; + + @ManyToOne + private Fase fase; + + @Embedded + private Resultado resultado; + + public Equipo getLocal() { + return local; + } + + public void setLocal(Equipo local) { + this.local = local; + } + + public Equipo getVisitante() { + return visitante; + } + + public void setVisitante(Equipo visitante) { + this.visitante = visitante; + } + + public Date getDia() { + return dia; + } + + public void setDia(Date dia) { + this.dia = dia; + } + + public String getLugar() { + return lugar; + } + + public void setLugar(String lugar) { + this.lugar = lugar; + } + + public Grupo getGrupo() { + return grupo; + } + + public void setGrupo(Grupo grupo) { + this.grupo = grupo; + } + + public Fase getFase() { + return fase; + } + + public void setFase(Fase fase) { + this.fase = fase; + } + + public Resultado getResultado() { + return resultado; + } + + public void setResultado(Resultado resultado) { + this.resultado = resultado; + } + + public int getPuntos(Pronostico pronostico) { + + if (this.getResultado() == null) { + return 0; + } + + int puntosAsignables = calcularPuntos(); + Ganador ganador = this.getResultado().getGanador(); + if (isSumaPuntos(pronostico, ganador)) { + return puntosAsignables; + } else { + return 0; + } + } + + private boolean isSumaPuntos(Pronostico pronostico, Ganador ganador) { + return pronostico.isLocal() && Ganador.LOCAL.equals(ganador) || + pronostico.isVisitante() && Ganador.VISITANTE.equals(ganador) || + pronostico.isEmpate() && Ganador.EMPATE.equals(ganador); + } + + + private int calcularPuntos() { + return this.getFase().getPuntos(); + } + + public boolean isBloqueado() { + return this.getDia().getTime() <= new Date().getTime() + 900000; + } + + public PartidoStatus getStatus() { + if (this.getResultado() != null) { + return PartidoStatus.FINISHED; + } else if (this.isBloqueado()) { + return PartidoStatus.BLOCKED; + } else { + return PartidoStatus.PENDING; + } + } + + public int getFecha() { + return fecha; + } + + public void setFecha(int fecha) { + this.fecha = fecha; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PartidoStatus.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PartidoStatus.java new file mode 100644 index 0000000..6528dec --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PartidoStatus.java @@ -0,0 +1,5 @@ +package io.semantic.openscore.core.model; + +public enum PartidoStatus { + BLOCKED, PENDING, FINISHED +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Post.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Post.java new file mode 100644 index 0000000..f3c8ee1 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Post.java @@ -0,0 +1,51 @@ +package io.semantic.openscore.core.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; + +@Entity +public class Post extends Storable { + + private String titulo; + + @Column(columnDefinition = "TEXT") + private String contenido; + private String autor; + + @Enumerated(EnumType.STRING) + private PostStatus status; + + public String getTitulo() { + return titulo; + } + + public void setTitulo(String titulo) { + this.titulo = titulo; + } + + public String getContenido() { + return contenido; + } + + public void setContenido(String contenido) { + this.contenido = contenido; + } + + public PostStatus getStatus() { + return status; + } + + public void setStatus(PostStatus status) { + this.status = status; + } + + public String getAutor() { + return autor; + } + + public void setAutor(String autor) { + this.autor = autor; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PostStatus.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PostStatus.java new file mode 100644 index 0000000..8b6514d --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PostStatus.java @@ -0,0 +1,5 @@ +package io.semantic.openscore.core.model; + +public enum PostStatus { + PUBLICADO, BORRADOR +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PreguntaSecreta.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PreguntaSecreta.java new file mode 100644 index 0000000..ad0aeaf --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/PreguntaSecreta.java @@ -0,0 +1,28 @@ +package io.semantic.openscore.core.model; + +import javax.persistence.Entity; + +@Entity +public class PreguntaSecreta extends Storable { + + private String codigo; + private String pregunta; + + + public String getPregunta() { + return pregunta; + } + + public void setPregunta(String pregunta) { + this.pregunta = pregunta; + } + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Pronostico.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Pronostico.java new file mode 100644 index 0000000..5826796 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Pronostico.java @@ -0,0 +1,91 @@ +package io.semantic.openscore.core.model; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; + + +@Entity +public class Pronostico extends Storable { + + private boolean local; + private boolean visitante; + private boolean empate; + + @ManyToOne + private Partido partido; + + @ManyToOne + private Usuario usuario; + + public boolean isLocal() { + return local; + } + + public void setLocal(boolean local) { + this.local = local; + } + + public boolean isVisitante() { + return visitante; + } + + public void setVisitante(boolean visitante) { + this.visitante = visitante; + } + + public boolean isEmpate() { + return empate; + } + + public void setEmpate(boolean empate) { + this.empate = empate; + } + + public Partido getPartido() { + return partido; + } + + public void setPartido(Partido partido) { + this.partido = partido; + } + + public Usuario getUsuario() { + return usuario; + } + + public void setUsuario(Usuario usuario) { + this.usuario = usuario; + } + + public void local() { + this.setLocal(true); + this.setVisitante(false); + this.setEmpate(false); + } + + public void empate() { + this.setLocal(false); + this.setVisitante(false); + this.setEmpate(true); + } + + public void visitante() { + this.setLocal(false); + this.setVisitante(true); + this.setEmpate(false); + } + + public int getPuntos() { + return this.getPartido().getPuntos(this); + } + + @Override + public String toString() { + return new GsonBuilder().setPrettyPrinting().create().toJson(this); + } + + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/RespuestaPreguntaSecreta.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/RespuestaPreguntaSecreta.java new file mode 100644 index 0000000..454b5c2 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/RespuestaPreguntaSecreta.java @@ -0,0 +1,29 @@ +package io.semantic.openscore.core.model; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; + +@Entity +public class RespuestaPreguntaSecreta extends Storable { + + @ManyToOne + private PreguntaSecreta preguntaSecreta; + + private String respuesta; + + public PreguntaSecreta getPreguntaSecreta() { + return preguntaSecreta; + } + + public void setPreguntaSecreta(PreguntaSecreta preguntaSecreta) { + this.preguntaSecreta = preguntaSecreta; + } + + public String getRespuesta() { + return respuesta; + } + + public void setRespuesta(String respuesta) { + this.respuesta = respuesta; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java new file mode 100644 index 0000000..969091c --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java @@ -0,0 +1,53 @@ +package io.semantic.openscore.core.model; + +import javax.persistence.Column; +import javax.persistence.Embeddable; +import javax.persistence.Entity; +import javax.persistence.OneToOne; + +@Embeddable +public class Resultado { + + @Column(nullable = true) + private int local; + + @Column(nullable = true) + private int visitante; + + @OneToOne + private Partido partido; + + public int getLocal() { + return local; + } + + public void setLocal(int local) { + this.local = local; + } + + public int getVisitante() { + return visitante; + } + + public void setVisitante(int visitante) { + this.visitante = visitante; + } + + public Ganador getGanador() { + if (local > visitante) { + return Ganador.LOCAL; + } else if (local < visitante) { + return Ganador.VISITANTE; + } else { + return Ganador.EMPATE; + } + } + + public Partido getPartido() { + return partido; + } + + public void setPartido(Partido partido) { + this.partido = partido; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Rol.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Rol.java new file mode 100644 index 0000000..08fe3b1 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Rol.java @@ -0,0 +1,7 @@ +package io.semantic.openscore.core.model; + +public enum Rol { + + ADMIN, USUARIO + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Storable.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Storable.java new file mode 100644 index 0000000..ba1e892 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Storable.java @@ -0,0 +1,67 @@ +package io.semantic.openscore.core.model; + +import javax.persistence.*; +import java.util.Date; + +@MappedSuperclass +public class Storable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + private boolean deleted; + private Date creationDate; + private Date deletionDate; + private Date modificationDate; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public boolean isDeleted() { + return deleted; + } + + public void setDeleted(boolean deleted) { + this.deleted = deleted; + } + + public Date getCreationDate() { + return creationDate; + } + + public void setCreationDate(Date creationDate) { + this.creationDate = creationDate; + } + + public Date getDeletionDate() { + return deletionDate; + } + + public void setDeletionDate(Date deletionDate) { + this.deletionDate = deletionDate; + } + + public Date getModificationDate() { + return modificationDate; + } + + public void setModificationDate(Date modificationDate) { + this.modificationDate = modificationDate; + } + + @PrePersist + public void prePersist() { + if (this.id == 0) { + this.creationDate = new Date(); + } + if (this.deleted) { + this.deletionDate = new Date(); + } + this.modificationDate = new Date(); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Usuario.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Usuario.java new file mode 100644 index 0000000..4f970ad --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Usuario.java @@ -0,0 +1,112 @@ +package io.semantic.openscore.core.model; + +import org.hibernate.validator.constraints.Email; +import org.hibernate.validator.constraints.Length; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@Entity +public class Usuario extends Storable { + + + @NotNull + @Length(min = 2) + private String nombre; + + @NotNull + @Length(min = 2) + private String apellido; + + @NotNull + @ManyToOne + private Pais pais; + + @NotNull + @Email + @Column(unique = true) + private String email; + + @NotNull + private String password; + + @OneToMany() + private Set pronosticos; + + public Usuario() { + this.pronosticos = new HashSet<>(); + } + + @ElementCollection + @CollectionTable(name = "roles", joinColumns = @JoinColumn(name = "usuario_id")) + @Enumerated(EnumType.STRING) + private Set roles; + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getApellido() { + return apellido; + } + + public void setApellido(String apellido) { + this.apellido = apellido; + } + + public Pais getPais() { + return pais; + } + + public void setPais(Pais pais) { + this.pais = pais; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Set getRoles() { + return roles; + } + + public void setRoles(Set roles) { + this.roles = roles; + } + + public Set getPronosticos() { + return pronosticos; + } + + public void setPronosticos(Set pronosticos) { + this.pronosticos = pronosticos; + } + + public void addPronostico(Pronostico pronostico) { + this.pronosticos.add(pronostico); + } + + public int getPuntos() { + return this.getPronosticos().stream().mapToInt(Pronostico::getPuntos).sum(); + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/EquiposRepository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/EquiposRepository.java new file mode 100644 index 0000000..ebdaf90 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/EquiposRepository.java @@ -0,0 +1,41 @@ +package io.semantic.openscore.core.repository; + +import java.util.List; +import java.util.Optional; + +import javax.enterprise.context.ApplicationScoped; +import javax.persistence.TypedQuery; + +import io.semantic.openscore.core.model.Equipo; + +@ApplicationScoped +public class EquiposRepository extends Repository { + + public static final String FIND_BY_CODIGO = "select p from Equipo p where p.codigo = :codigo"; + + public EquiposRepository() { + super(Equipo.class); + } + + public boolean exist(String codigo) { + TypedQuery query = this.createQuery(FIND_BY_CODIGO); + query.setParameter("codigo", codigo); + return this.findByQuery(query).size() > 0; + } + + public Optional findByCodigo(String codigo) { + TypedQuery query = this.createQuery(FIND_BY_CODIGO); + query.setParameter("codigo", codigo); + List found = this.findByQuery(query); + if (found.isEmpty()) { + return Optional.empty(); + } else { + return Optional.of(found.get(0)); + } + } + + @Override + public boolean exist(Equipo entity) { + return false; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/FaseRepository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/FaseRepository.java new file mode 100644 index 0000000..c7eae71 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/FaseRepository.java @@ -0,0 +1,41 @@ +package io.semantic.openscore.core.repository; + +import java.util.List; +import java.util.Optional; + +import javax.enterprise.context.ApplicationScoped; +import javax.persistence.TypedQuery; + +import io.semantic.openscore.core.model.Fase; + +@ApplicationScoped +public class FaseRepository extends Repository { + + private static final String FIND_ENTITY_BY_CODIGO_QUERY = "select p from Fase p where p.codigo = :codigo"; + + public FaseRepository() { + super(Fase.class); + } + + public boolean exist(String codigo) { + TypedQuery query = this.createQuery(FIND_ENTITY_BY_CODIGO_QUERY); + query.setParameter("codigo", codigo); + return this.findByQuery(query).size() > 0; + } + + public Optional findByCodigo(String codigo) { + TypedQuery query = this.createQuery(FIND_ENTITY_BY_CODIGO_QUERY); + query.setParameter("codigo", codigo); + List results = query.getResultList(); + if (results.isEmpty()) { + return Optional.empty(); + } else { + return Optional.of(results.get(0)); + } + } + + @Override + public boolean exist(Fase entity) { + return false; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/GrupoRepository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/GrupoRepository.java new file mode 100644 index 0000000..c67bd08 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/GrupoRepository.java @@ -0,0 +1,41 @@ +package io.semantic.openscore.core.repository; + +import java.util.List; +import java.util.Optional; + +import javax.enterprise.context.ApplicationScoped; +import javax.persistence.TypedQuery; + +import io.semantic.openscore.core.model.Grupo; + +@ApplicationScoped +public class GrupoRepository extends Repository { + + private static final String FIND_ENTITY_BY_CODIGO_QUERY = "select p from Grupo p where p.codigo = :codigo"; + + public GrupoRepository() { + super(Grupo.class); + } + + public boolean exist(String codigo) { + TypedQuery query = this.createQuery(FIND_ENTITY_BY_CODIGO_QUERY); + query.setParameter("codigo", codigo); + return this.findByQuery(query).size() > 0; + } + + public Optional findByCodigo(String codigo) { + TypedQuery query = this.createQuery(FIND_ENTITY_BY_CODIGO_QUERY); + query.setParameter("codigo", codigo); + List found = this.findByQuery(query); + if (found.isEmpty()) { + return Optional.empty(); + } else { + return Optional.of(found.get(0)); + } + } + + @Override + public boolean exist(Grupo entity) { + return false; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Page.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Page.java new file mode 100644 index 0000000..1400de4 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Page.java @@ -0,0 +1,22 @@ +package io.semantic.openscore.core.repository; + +public class Page { + + private int page; + private int pageSize; + + public Page(int page, + int pageSize) { + + this.page = page; + this.pageSize = pageSize; + } + + public int getPage() { + return page; + } + + public int getPageSize() { + return pageSize; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PaisRepository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PaisRepository.java new file mode 100644 index 0000000..6dda37b --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PaisRepository.java @@ -0,0 +1,39 @@ +package io.semantic.openscore.core.repository; + +import javax.enterprise.context.ApplicationScoped; +import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; + +import io.semantic.openscore.core.model.Pais; + +@ApplicationScoped +public class PaisRepository extends Repository { + + private static final String FIND_PAIS_BY_CODIGO_QUERY = "select p from Pais p where p.codigo = :codigo"; + + public PaisRepository() { + super(Pais.class); + } + + public PaisRepository(EntityManager entityManager) { + super(Pais.class, entityManager); + } + + public boolean exist(Pais pais) { + TypedQuery query = this.createQuery("select p from Pais p where p.codigo = :codigo"); + query.setParameter("codigo", pais.getCodigo()); + return this.findByQuery(query).size() > 0; + } + + public boolean exist(String codigo) { + TypedQuery query = this.createQuery("select p from Pais p where p.codigo = :codigo"); + query.setParameter("codigo", codigo); + return this.findByQuery(query).size() > 0; + } + + public Pais findByCodigo(String codigo) { + TypedQuery query = this.createQuery(FIND_PAIS_BY_CODIGO_QUERY); + query.setParameter("codigo", codigo); + return query.getSingleResult(); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PartidoRepository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PartidoRepository.java new file mode 100644 index 0000000..85f796e --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PartidoRepository.java @@ -0,0 +1,107 @@ +package io.semantic.openscore.core.repository; + +import java.util.Calendar; +import java.util.List; +import java.util.TimeZone; + +import javax.enterprise.context.ApplicationScoped; +import javax.persistence.TemporalType; +import javax.persistence.TypedQuery; + +import io.semantic.openscore.core.model.Fase; +import io.semantic.openscore.core.model.Grupo; +import io.semantic.openscore.core.model.Partido; + +@ApplicationScoped +public class PartidoRepository extends Repository { + + private static final String EXIST = "select e from Partido e where " + + "e.local.codigo = :local AND " + + "e.visitante.codigo = :visitante AND " + + "e.fase.id = :fase AND " + + "e.grupo.id = :grupo"; + + private static final String FIND_ALL_BY_GROUP = "from Partido where " + + "grupo.codigo = :grupo " + + "order by dia asc"; + + private static final String FIND_ALL_BY_FASE = "from Partido where " + + "fase.codigo = :fase " + + "order by dia asc"; + + private static final String FIND_ALL_BY_FECHA = "from Partido where " + + "fecha = :fecha " + + "order by dia asc"; + + private static final String FIND_ALL_BY_DIA = "from Partido where " + + "cast(dia as date) BETWEEN :dia1 AND :dia2 " + + "order by dia asc"; + + private static final String FIND_ALL_FECHAS = "select distinct p.fecha from Partido p group by p.fecha order by p.fecha asc"; + + + public PartidoRepository() { + super(Partido.class); + } + + public boolean exist(String codigoLocal, String codigoVisitante, Grupo grupo, Fase fase) { + TypedQuery query = this.createQuery(EXIST) + .setParameter("local", codigoLocal) + .setParameter("visitante", codigoVisitante) + .setParameter("fase", fase.getId()) + .setParameter("grupo", grupo.getId()); + + return this.findByQuery(query).size() > 0; + } + + public List findAllByGrupo(String grupo) { + TypedQuery query = this.createQuery(FIND_ALL_BY_GROUP) + .setParameter("grupo", grupo); + return this.findByQuery(query); + } + + public List findAllByDia(long dia) { + + Calendar dia1 = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + dia1.setTimeInMillis(dia); + dia1.set(Calendar.HOUR, 6); + dia1.set(Calendar.MINUTE, 0); + + Calendar dia2 = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + dia2.setTimeInMillis(dia); + dia2.set(Calendar.HOUR, 6); + dia2.set(Calendar.MINUTE, 0); + dia2.add(Calendar.DATE, 1); + + + + TypedQuery query = this.createQuery(FIND_ALL_BY_DIA) + .setParameter("dia1", dia1, TemporalType.DATE) + .setParameter("dia2", dia2, TemporalType.DATE); + return this.findByQuery(query); + } + + public List findAllByFase(String fase) { + TypedQuery query = this.createQuery(FIND_ALL_BY_FASE) + .setParameter("fase", fase); + return this.findByQuery(query); + } + + public List findAllByFecha(int fecha) { + TypedQuery query = this.createQuery(FIND_ALL_BY_FECHA) + .setParameter("fecha", fecha); + return this.findByQuery(query); + } + + public List findAllFechas() { + return this.entityManager.createQuery(FIND_ALL_FECHAS).getResultList(); + } + + @Override + public boolean exist(Partido entity) { + return this.exist(entity.getLocal().getCodigo(), + entity.getVisitante().getCodigo(), + entity.getGrupo(), + entity.getFase()); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PostRepository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PostRepository.java new file mode 100644 index 0000000..694cf7f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PostRepository.java @@ -0,0 +1,30 @@ +package io.semantic.openscore.core.repository; + +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.persistence.TypedQuery; + +import io.semantic.openscore.core.model.Post; +import io.semantic.openscore.core.model.PostStatus; + +@ApplicationScoped +public class PostRepository extends Repository { + + private static final String FIND_ALL_BY_STATUS = "from Post where status = :status order by modificationDate"; + + public PostRepository() { + super(Post.class); + } + + public List findAllByStatus(PostStatus postStatus) { + TypedQuery query = this.createQuery(FIND_ALL_BY_STATUS); + query.setParameter("status",postStatus); + return this.findByQuery(query); + } + + @Override + public boolean exist(Post entity) { + return false; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PreguntaSecretaRepository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PreguntaSecretaRepository.java new file mode 100644 index 0000000..e637dea --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PreguntaSecretaRepository.java @@ -0,0 +1,25 @@ +package io.semantic.openscore.core.repository; + +import javax.enterprise.context.ApplicationScoped; +import javax.persistence.EntityManager; + +import io.semantic.openscore.core.model.PreguntaSecreta; + +@ApplicationScoped +public class PreguntaSecretaRepository extends Repository { + + + public PreguntaSecretaRepository() { + super(PreguntaSecreta.class); + } + + public PreguntaSecretaRepository(EntityManager entityManager) { + super(PreguntaSecreta.class, entityManager); + } + + + @Override + public boolean exist(PreguntaSecreta entity) { + return false; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PronosticoRepository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PronosticoRepository.java new file mode 100644 index 0000000..db8f219 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/PronosticoRepository.java @@ -0,0 +1,66 @@ +package io.semantic.openscore.core.repository; + +import java.util.List; +import java.util.Optional; + +import javax.enterprise.context.ApplicationScoped; + +import io.semantic.openscore.core.model.Pronostico; + +@ApplicationScoped +public class PronosticoRepository extends Repository { + + private static final String FIND_BY_ID_AND_USER = "select e from Pronostico e where " + + "e.id = :id and " + + "e.usuario.id = :idUsuario and " + + "e.deleted = false"; + + private static final String FIND_BY_PARTIDO_AND_USER = "select e from Pronostico e where " + + "e.partido.id = :idPartido and " + + "e.usuario.id = :idUsuario and " + + "e.deleted = false"; + + private static final String FIND_BY_USER = "select e from Pronostico e where " + + "e.usuario.id = :idUsuario"; + + public PronosticoRepository() { + super(Pronostico.class); + } + + public List findByUsuario(long idUsuario) { + return this.createQuery(FIND_BY_USER) + .setParameter("idUsuario", idUsuario) + .getResultList(); + } + + public Optional findById(long id, long idUsuario) { + List results = this.createQuery(FIND_BY_ID_AND_USER) + .setParameter("id", id) + .setParameter("idUsuario", idUsuario) + .getResultList(); + + if (results.isEmpty()) { + return Optional.empty(); + } else { + return Optional.of(results.get(0)); + } + } + + public Optional findByPartidoAndUsuario(long idPartido, long idUsuario) { + List results = this.createQuery(FIND_BY_PARTIDO_AND_USER) + .setParameter("idPartido", idPartido) + .setParameter("idUsuario", idUsuario) + .getResultList(); + + if (results.isEmpty()) { + return Optional.empty(); + } else { + return Optional.of(results.get(0)); + } + } + + @Override + public boolean exist(Pronostico entity) { + return false; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java new file mode 100644 index 0000000..018cbee --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java @@ -0,0 +1,178 @@ +package io.semantic.openscore.core.repository; + +import static java.util.stream.Collectors.joining; + +import java.text.MessageFormat; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; +import javax.transaction.Transactional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.semantic.openscore.core.model.Storable; + +public abstract class Repository { + + protected final Class persistentClass; + + private Logger logger = LoggerFactory.getLogger(Repository.class); + + @Inject + protected EntityManager entityManager; + + public Repository(Class clazz) { + this.persistentClass = clazz; + } + + public Repository(Class clazz, + EntityManager entityManager) { + this(clazz); + this.entityManager = entityManager; + } + + @Transactional + public long save(T storable) { + if (storable.getId() != 0) { + this.entityManager.merge(storable); + } else { + this.entityManager.persist(storable); + } + return storable.getId(); + } + + public TypedQuery createQuery(String query) { + return this.entityManager.createQuery(query, + this.persistentClass); + } + + public Optional findById(long id) { + + List found = this.createQuery(MessageFormat.format("from {0} s where s.id=:id and s.deleted=false", + this.persistentClass.getSimpleName())).setParameter("id", + id) + .getResultList(); + + if (!found.isEmpty()) { + return Optional.of(found.get(0)); + } else { + return Optional.empty(); + } + } + + public Optional findByIdWithDeleted(long id) { + + List found = this.createQuery(MessageFormat.format("from {0} s where s.id=:id", + this.persistentClass.getSimpleName())).setParameter("id", + id) + .getResultList(); + + if (!found.isEmpty()) { + return Optional.of(found.get(0)); + } else { + return Optional.empty(); + } + } + + public List findByQuery(TypedQuery query, + Page page) { + + return query.setFirstResult(page.getPage() * page.getPageSize()) + .setMaxResults(page.getPageSize()) + .getResultList(); + } + + public List findByQuery(TypedQuery query) { + + return query.getResultList(); + } + + @Transactional + public void hardDeleteById(long id) { + Optional storable = this.findById(id); + storable.ifPresent(entity -> entityManager.remove(entity)); + } + + @Transactional + public void hardDeleteByQuery(TypedQuery query) { + List found = this.findByQuery(query, + new Page(0, + 0)); + found.forEach(entity -> entityManager.remove(entity)); + } + + public void deleteByQuery(TypedQuery query) { + List found = this.findByQuery(query, + new Page(0, + 0)); + found.forEach(elem -> { + elem.setDeleted(true); + save(elem); + }); + } + + @Transactional + public void deleteById(long id) { + Optional found = this.findById(id); + found.ifPresent(elem -> { + elem.setDeleted(true); + this.save(elem); + }); + } + + public List findAll(Page page) { + TypedQuery query = this.createQuery(MessageFormat.format("from {0}", + this.persistentClass.getSimpleName())); + return this.findByQuery(query, + page); + } + + public List findAll() { + TypedQuery query = this.createQuery(MessageFormat.format("from {0}", + this.persistentClass.getSimpleName())); + return this.findByQuery(query); + } + + public List findAll(Map parameters, Map sort) { + String queryString = this.buildQuery(parameters, sort); + TypedQuery query = this.createQuery(queryString); + + parameters.entrySet().forEach(entry -> { + query.setParameter(entry.getKey().replace(".", "_"), entry.getValue()); + }); + + return this.findByQuery(query); + } + + private String buildQuery(Map parameters, Map sort) { + + String queryString = "from {0} "; + + if (!parameters.isEmpty()) { + queryString += "where "; + queryString += parameters.entrySet() + .stream() + .map(entry -> entry.getKey() + " = :" + entry.getKey().replace(".", "_")) + .collect(joining(" AND ")); + } + + String formatted = MessageFormat.format(queryString, + this.persistentClass.getSimpleName()); + + if (!sort.isEmpty()) { + formatted += " order by " + + sort.entrySet() + .stream() + .map(entry -> entry.getKey() + " " + entry.getValue().toString()) + .collect(joining(" , ")); + } + return formatted; + } + + public abstract boolean exist(T entity); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Sort.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Sort.java new file mode 100644 index 0000000..3fd57ae --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Sort.java @@ -0,0 +1,10 @@ +package io.semantic.openscore.core.repository; + +public enum Sort { + ASC, DESC; + + @Override + public String toString() { + return super.toString().toLowerCase(); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/UsuarioRepository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/UsuarioRepository.java new file mode 100644 index 0000000..56ac09e --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/UsuarioRepository.java @@ -0,0 +1,53 @@ +package io.semantic.openscore.core.repository; + +import java.util.List; +import java.util.Optional; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.persistence.EntityManager; + +import io.semantic.openscore.core.model.Usuario; + +@ApplicationScoped +public class UsuarioRepository extends Repository { + + public static final String FIND_BY_EMAIL = "from Usuario s where s.email=:email"; + public static final String FIND_BY_COUNTRY = "from Usuario s where s.pais.codigo=:pais"; + + @Inject + public UsuarioRepository() { + super(Usuario.class); + } + + public UsuarioRepository(EntityManager entityManager) { + super(Usuario.class); + this.entityManager = entityManager; + + } + + public Optional findByEmail(String email) { + List found = this.createQuery(FIND_BY_EMAIL).setParameter("email", email).getResultList(); + + if (!found.isEmpty()) { + return Optional.of(found.get(0)); + } else { + return Optional.empty(); + } + } + + public boolean exist(String email) { + return this.findByEmail(email).isPresent(); + } + + public List findByCountry(String pais) { + List found = this.createQuery(FIND_BY_COUNTRY).setParameter("pais", pais.toUpperCase()) + .getResultList(); + return found; + } + + @Override + public boolean exist(Usuario entity) { + return false; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java new file mode 100644 index 0000000..9e67fca --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java @@ -0,0 +1,68 @@ +package io.semantic.openscore.core.repository.startup; + +public class PartidoData { + + private String local; + private String visitante; + private String dia; + private String fecha; + private String lugar; + private String grupo; + private String fase; + + public String getLocal() { + return local; + } + + public void setLocal(String local) { + this.local = local; + } + + public String getVisitante() { + return visitante; + } + + public void setVisitante(String visitante) { + this.visitante = visitante; + } + + public String getDia() { + return dia; + } + + public void setDia(String dia) { + this.dia = dia; + } + + public String getLugar() { + return lugar; + } + + public void setLugar(String lugar) { + this.lugar = lugar; + } + + public String getGrupo() { + return grupo; + } + + public void setGrupo(String grupo) { + this.grupo = grupo; + } + + public String getFase() { + return fase; + } + + public void setFase(String fase) { + this.fase = fase; + } + + public String getFecha() { + return fecha; + } + + public void setFecha(String fecha) { + this.fecha = fecha; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/StartupManager.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/StartupManager.java new file mode 100644 index 0000000..0ec620e --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/StartupManager.java @@ -0,0 +1,48 @@ +package io.semantic.openscore.core.repository.startup; + +import java.text.MessageFormat; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.event.Observes; +import javax.enterprise.inject.Instance; +import javax.inject.Inject; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.quarkus.runtime.StartupEvent; + +@ApplicationScoped +public class StartupManager { + + private List steps; + private Logger logger = LoggerFactory.getLogger(StartupManager.class); + + public StartupManager() { + + } + + @Inject + public StartupManager(Instance startupSteps) { + steps = StreamSupport.stream(startupSteps.spliterator(), false).collect(Collectors.toList()); + } + + public void initialize(@Observes StartupEvent ev) { + this.logger.info(MessageFormat.format("StartupSteps found: {0}", this.steps.size())); + Collections.sort(this.steps, Comparator.comparingInt(StartupStep::priority)); + this.logger.info(MessageFormat.format("StartupSteps sorted: \n|_ {0}", + this.steps.stream() + .map(startupStep -> startupStep.getClass().getSimpleName() + " -- p: " + startupStep.priority() + + " -- " + startupStep.enabled()) + .collect(Collectors.joining("\n|_ ")))); + this.steps.stream() + .filter(startupStep -> startupStep.enabled()) + .forEach(StartupStep::run); + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/StartupStep.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/StartupStep.java new file mode 100644 index 0000000..ae54ec5 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/StartupStep.java @@ -0,0 +1,12 @@ +package io.semantic.openscore.core.repository.startup; + +public interface StartupStep { + + void run(); + + int priority(); + + default boolean enabled() { + return true; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java new file mode 100644 index 0000000..fa54471 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java @@ -0,0 +1,10 @@ +package io.semantic.openscore.core.repository.startup.builder; + +import java.util.Date; + +public interface DiaBuilder { + + public static final String DATE_PATTERN = "dd-MM-yyyy'T'HH:mmZ"; + + Date getMatchDate(String fecha); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java new file mode 100644 index 0000000..4ab89ca --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java @@ -0,0 +1,28 @@ +package io.semantic.openscore.core.repository.startup.builder; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import javax.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class DiaBuilderImpl implements DiaBuilder { + + private SimpleDateFormat simpleDateFormat; + + public DiaBuilderImpl() { + simpleDateFormat = new SimpleDateFormat(DATE_PATTERN); + } + + public Date getMatchDate(String fecha) { + + try { + return simpleDateFormat.parse(fecha); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java new file mode 100644 index 0000000..8e982fe --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java @@ -0,0 +1,25 @@ +package io.semantic.openscore.core.repository.startup.builder; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.inject.Alternative; +import java.util.Calendar; +import java.util.Date; +import java.util.Random; + +@Alternative +public class TestDiaBuilder implements DiaBuilder { + + private Logger logger = LoggerFactory.getLogger(TestDiaBuilder.class); + private static final long ONE_MINUTE_IN_MILLIS = 60000; + private Random random = new Random(); + + public Date getMatchDate(String fecha) { + Calendar date = Calendar.getInstance(); + long t = date.getTimeInMillis(); + Date afterAddingTenMins = new Date(t + (random.nextInt(8 * 60) * ONE_MINUTE_IN_MILLIS)); + logger.info(afterAddingTenMins.toString()); + return afterAddingTenMins; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java new file mode 100644 index 0000000..2cea881 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java @@ -0,0 +1,67 @@ +package io.semantic.openscore.core.repository.startup.steps; + +import java.text.MessageFormat; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import io.semantic.openscore.core.model.Equipo; +import io.semantic.openscore.core.repository.EquiposRepository; +import io.semantic.openscore.core.repository.startup.StartupStep; + +@ApplicationScoped +public class CrearEquipos implements StartupStep { + + private EquiposRepository equiposRepository; + + // private String baseUrl = + // "https://fsprdcdnpublic.azureedge.net/global-pictures/flags-fwc2018-3/"; + // private String baseUrl = "https://www.countryflags.io/{0}/flat/64.png"; + private String baseUrl = "https://restcountries.eu/data/{0}.svg"; + + public CrearEquipos() { + } + + @Inject + public CrearEquipos(EquiposRepository equiposRepository) { + this.equiposRepository = equiposRepository; + } + + @Override + public void run() { + + // GRUPO A + this.crearEquipoSiNoExiste("BRA", "Brasil"); + this.crearEquipoSiNoExiste("BOL", "Bolivia"); + this.crearEquipoSiNoExiste("VEN", "Venezuela"); + this.crearEquipoSiNoExiste("PER", "Peru"); + + // GRUPO B + this.crearEquipoSiNoExiste("ARG", "Argentina"); + this.crearEquipoSiNoExiste("COL", "Colombia"); + this.crearEquipoSiNoExiste("PRY", "Paraguay"); + this.crearEquipoSiNoExiste("QAT", "Qatar"); + + // GRUPO C + this.crearEquipoSiNoExiste("URY", "Uruguay"); + this.crearEquipoSiNoExiste("ECU", "Ecuador"); + this.crearEquipoSiNoExiste("JPN", "Japan"); + this.crearEquipoSiNoExiste("CHL", "Chile"); + } + + private String getLogo(String codigo) { + return MessageFormat.format(baseUrl, codigo.toLowerCase()); + } + + private void crearEquipoSiNoExiste(String codigo, String nombre) { + if (!this.equiposRepository.exist(codigo)) { + Equipo equipo = new Equipo(codigo, nombre, this.getLogo(codigo).toLowerCase()); + this.equiposRepository.save(equipo); + } + } + + @Override + public int priority() { + return 1000; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java new file mode 100644 index 0000000..782e9b3 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java @@ -0,0 +1,77 @@ +package io.semantic.openscore.core.repository.startup.steps; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import io.semantic.openscore.core.model.Fase; +import io.semantic.openscore.core.model.Grupo; +import io.semantic.openscore.core.repository.FaseRepository; +import io.semantic.openscore.core.repository.GrupoRepository; +import io.semantic.openscore.core.repository.startup.StartupStep; + +@ApplicationScoped +public class CrearGruposYFases implements StartupStep { + + private GrupoRepository grupoRepository; + private FaseRepository faseRepository; + + public CrearGruposYFases() { + + } + + @Inject + public CrearGruposYFases(GrupoRepository grupoRepository, + FaseRepository faseRepository) { + + this.grupoRepository = grupoRepository; + this.faseRepository = faseRepository; + } + + @Override + public void run() { + this.crearEtapaSiNoExiste(Fase.GRUPO, this.crearFase(Fase.GRUPO, "Group", 1)); + // this.crearEtapaSiNoExiste(Fase.OCTAVOS, this.crearFase(Fase.OCTAVOS, "Eighth + // Finals", 2)); + this.crearEtapaSiNoExiste(Fase.CUARTOS, this.crearFase(Fase.CUARTOS, "Quarter Finals", 2)); + this.crearEtapaSiNoExiste(Fase.SEMI, this.crearFase(Fase.SEMI, "Semifinal", 3)); + this.crearEtapaSiNoExiste(Fase.TERCER, this.crearFase(Fase.TERCER, "Third Place", 4)); + this.crearEtapaSiNoExiste(Fase.FINAL, this.crearFase(Fase.FINAL, "Final", 4)); + + this.crearGrupoSiNoExiste(Grupo.GRUPO_A, this.crearGrupo(Grupo.GRUPO_A, "Group A")); + this.crearGrupoSiNoExiste(Grupo.GRUPO_B, this.crearGrupo(Grupo.GRUPO_B, "Group B")); + this.crearGrupoSiNoExiste(Grupo.NONE, this.crearGrupo(Grupo.NONE, "None")); + + } + + @Override + public int priority() { + return 0; + } + + private void crearGrupoSiNoExiste(String codigo, Grupo grupo) { + if (!this.grupoRepository.exist(codigo)) { + this.grupoRepository.save(grupo); + } + } + + private void crearEtapaSiNoExiste(String codigo, Fase estapa) { + if (!this.faseRepository.exist(codigo)) { + this.faseRepository.save(estapa); + } + } + + private Grupo crearGrupo(String codigo, String nombre) { + Grupo grupo = new Grupo(); + grupo.setCodigo(codigo); + grupo.setNombre(nombre); + return grupo; + } + + private Fase crearFase(String codigo, String nombre, int puntos) { + Fase fase = new Fase(); + fase.setCodigo(codigo.toUpperCase()); + fase.setNombre(nombre); + fase.setPuntos(puntos); + return fase; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPaises.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPaises.java new file mode 100644 index 0000000..e511e1f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPaises.java @@ -0,0 +1,61 @@ +package io.semantic.openscore.core.repository.startup.steps; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.semantic.openscore.core.model.Pais; +import io.semantic.openscore.core.repository.PaisRepository; +import io.semantic.openscore.core.repository.startup.StartupStep; + +@ApplicationScoped +public class CrearPaises implements StartupStep { + + Logger logger = LoggerFactory.getLogger(CrearPaises.class); + private PaisRepository paisRepository; + + public CrearPaises() { + } + + @Inject + public CrearPaises(PaisRepository paisRepository) { + this.paisRepository = paisRepository; + } + + @Override + public void run() { + + logger.info("Inicializando paises"); + + this.guardarSiNoExiste(crearPais("ARG", "Argentina")); + this.guardarSiNoExiste(crearPais("CHI", "Chile")); + this.guardarSiNoExiste(crearPais("PER", "Peru")); + this.guardarSiNoExiste(crearPais("COL", "Colombia")); + this.guardarSiNoExiste(crearPais("MEX", "Mexico")); + this.guardarSiNoExiste(crearPais("BRA", "Brazil")); + + logger.info("Inicial de paises completa"); + } + + @Override + public int priority() { + return 0; + } + + public void guardarSiNoExiste(Pais pais) { + if (!this.paisRepository.exist(pais)) { + logger.info("Se crea pais no existente: " + pais.getCodigo()); + this.paisRepository.save(pais); + } + } + + public Pais crearPais(String codigo, String nombre) { + Pais pais = new Pais(); + pais.setCodigo(codigo); + pais.setNombre(nombre); + return pais; + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java new file mode 100644 index 0000000..14f9733 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java @@ -0,0 +1,97 @@ +package io.semantic.openscore.core.repository.startup.steps; + +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.core.type.TypeReference; + +import io.semantic.openscore.core.model.Equipo; +import io.semantic.openscore.core.model.Fase; +import io.semantic.openscore.core.model.Grupo; +import io.semantic.openscore.core.model.Partido; +import io.semantic.openscore.core.repository.EquiposRepository; +import io.semantic.openscore.core.repository.FaseRepository; +import io.semantic.openscore.core.repository.GrupoRepository; +import io.semantic.openscore.core.repository.PartidoRepository; +import io.semantic.openscore.core.repository.startup.PartidoData; +import io.semantic.openscore.core.repository.startup.builder.DiaBuilder; + +@ApplicationScoped +public class CrearPartidos extends FileBasedStartupStep { + + private Logger logger = LoggerFactory.getLogger(CrearPartidos.class); + + private EquiposRepository equiposRepository; + private GrupoRepository grupoRepository; + private FaseRepository faseRepository; + private DiaBuilder diaBuilder; + + public CrearPartidos() { + super(Partido.class, null, new TypeReference>() { + }); + } + + @Inject + public CrearPartidos(PartidoRepository partidoRepository, + EquiposRepository equiposRepository, + GrupoRepository grupoRepository, + FaseRepository faseRepository, + DiaBuilder diaBuilder) { + + super(Partido.class, partidoRepository, new TypeReference>() { + }); + this.equiposRepository = equiposRepository; + this.grupoRepository = grupoRepository; + this.faseRepository = faseRepository; + this.diaBuilder = diaBuilder; + } + + @Override + public String getFileName() { + return "data/partidos.yml"; + } + + @Override + protected Partido map(PartidoData partidoData) { + + Equipo local = getEquipo(partidoData.getLocal()); + Equipo visitante = getEquipo(partidoData.getVisitante()); + Partido partido = new Partido(); + partido.setLocal(local); + partido.setVisitante(visitante); + partido.setDia(diaBuilder.getMatchDate(partidoData.getDia())); + partido.setLugar(partidoData.getLugar()); + partido.setGrupo(getGrupo(partidoData.getGrupo())); + partido.setFecha(partido.getFecha()); + partido.setFase(getFase(partidoData.getFase())); + return partido; + + } + + private Equipo getEquipo(String codigoLocal) { + return this.equiposRepository.findByCodigo(codigoLocal) + .orElseThrow(() -> new IllegalArgumentException("El equipo " + codigoLocal + "no existe")); + } + + private Grupo getGrupo(String codigo) { + logger.info(codigo); + return this.grupoRepository.findByCodigo(codigo) + .orElseThrow(() -> new IllegalArgumentException("El grupo " + codigo + "no existe")); + } + + private Fase getFase(String codigo) { + return this.faseRepository.findByCodigo(codigo) + .orElseThrow(() -> new IllegalArgumentException("La fase " + codigo + "no existe")); + + } + + @Override + public int priority() { + return 2000; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPreguntaSecreta.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPreguntaSecreta.java new file mode 100644 index 0000000..29ed096 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPreguntaSecreta.java @@ -0,0 +1,51 @@ +package io.semantic.openscore.core.repository.startup.steps; + +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import com.fasterxml.jackson.core.type.TypeReference; + +import io.semantic.openscore.core.model.PreguntaSecreta; +import io.semantic.openscore.core.repository.PreguntaSecretaRepository; + +@ApplicationScoped +public class CrearPreguntaSecreta extends FileBasedStartupStep { + + private static final String FILENAME = "data/preguntas.yml"; + + public CrearPreguntaSecreta() { + super(PreguntaSecreta.class, null, new TypeReference>() { + }); + } + + @Inject + public CrearPreguntaSecreta(PreguntaSecretaRepository preguntaSecretaService) { + super(PreguntaSecreta.class, preguntaSecretaService, new TypeReference>() { + }); + } + + @Override + public int priority() { + return 1000; + } + + @Override + public String getFileName() { + return FILENAME; + } + + @Override + protected PreguntaSecreta map(PreguntaSecretaData dataObject) { + PreguntaSecreta preguntaSecreta = new PreguntaSecreta(); + preguntaSecreta.setCodigo(dataObject.getCodigo()); + preguntaSecreta.setPregunta(dataObject.getPregunta()); + return preguntaSecreta; + } + + @Override + public boolean enabled() { + return false; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearUsuarioAdmin.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearUsuarioAdmin.java new file mode 100644 index 0000000..3c31229 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearUsuarioAdmin.java @@ -0,0 +1,87 @@ +package io.semantic.openscore.core.repository.startup.steps; + +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.model.Usuario; +import io.semantic.openscore.core.repository.PaisRepository; +import io.semantic.openscore.core.repository.UsuarioRepository; +import io.semantic.openscore.core.repository.startup.StartupStep; +import io.semantic.openscore.core.security.TokenGenerator; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import java.util.Arrays; +import java.util.HashSet; + +@ApplicationScoped +public class CrearUsuarioAdmin implements StartupStep { + + private UsuarioRepository usuarioRepository; + private PaisRepository paisRepository; + private TokenGenerator tokenGenerator; + + public CrearUsuarioAdmin() { + + } + + @Inject + public CrearUsuarioAdmin(UsuarioRepository usuarioRepository, + PaisRepository paisRepository, + TokenGenerator tokenGenerator) { + this.usuarioRepository = usuarioRepository; + this.paisRepository = paisRepository; + this.tokenGenerator = tokenGenerator; + } + + @Override + public void run() { + // this.crearUsuarioSiNoExiste("admin@admin.com", this.crearUsuarioAdmin()); + this.crearUsuarioSiNoExiste("aparedes@redhat.com", this.crearUsuarioAparedes()); + this.crearUsuarioSiNoExiste("lberetta@redhat.com", this.crearUsuarioLberetta()); + + } + + @Override + public int priority() { + return 100; + } + + private void crearUsuarioSiNoExiste(String email, Usuario usuario) { + if (!this.usuarioRepository.findByEmail(email).isPresent()) { + this.usuarioRepository.save(usuario); + } + } + + private Usuario crearUsuarioAdmin() { + Usuario usuario = new Usuario(); + usuario.setRoles(new HashSet<>(Arrays.asList(Rol.ADMIN, Rol.USUARIO))); + usuario.setEmail("admin@admin.com"); + usuario.setApellido("Admin"); + usuario.setNombre("Admin"); + usuario.setPassword(tokenGenerator.generarPassword("admin")); + usuario.setPais(this.paisRepository.findByCodigo("ARG")); + return usuario; + } + + private Usuario crearUsuarioAparedes() { + Usuario usuario = new Usuario(); + usuario.setRoles(new HashSet<>(Arrays.asList(Rol.ADMIN, Rol.USUARIO))); + usuario.setEmail("aparedes@redhat.com"); + usuario.setApellido("Paredes"); + usuario.setNombre("Adriel"); + usuario.setPassword(tokenGenerator.generarPassword("admin")); + usuario.setPais(this.paisRepository.findByCodigo("ARG")); + return usuario; + } + + private Usuario crearUsuarioLberetta() { + Usuario usuario = new Usuario(); + usuario.setRoles(new HashSet<>(Arrays.asList(Rol.ADMIN, Rol.USUARIO))); + usuario.setEmail("lberetta@redhat.com"); + usuario.setApellido("Beretta"); + usuario.setNombre("Leandro"); + usuario.setPassword(tokenGenerator.generarPassword("admin")); + usuario.setPais(this.paisRepository.findByCodigo("ARG")); + return usuario; + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java new file mode 100644 index 0000000..8aec847 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java @@ -0,0 +1,67 @@ +package io.semantic.openscore.core.repository.startup.steps; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; + +import io.semantic.openscore.core.model.Storable; +import io.semantic.openscore.core.repository.Repository; +import io.semantic.openscore.core.repository.startup.StartupStep; + +public abstract class FileBasedStartupStep implements StartupStep { + + private final ObjectMapper objectMapper; + private Logger logger = LoggerFactory.getLogger(FileBasedStartupStep.class); + + private Class type; + private TypeReference> typeReference; + private Repository existService; + + public FileBasedStartupStep(Class type, Repository existsService, TypeReference> typeReference) { + this.type = type; + this.typeReference = typeReference; + this.objectMapper = new ObjectMapper(new YAMLFactory()); + this.existService = existsService; + } + + public abstract String getFileName(); + + @Override + public void run() { + List entities = this.loadYaml(this.getFileName()); + + entities.forEach(entity -> { + logger.info("{}", entity.getClass().getSimpleName()); + this.saveIfNotExist(entity); + }); + + } + + private List loadYaml(String fileName) { + try { + InputStream is = CrearPartidos.class.getClassLoader().getResourceAsStream(fileName); + return this.objectMapper.readValue(is, typeReference); + } catch (Exception e) { + logger.error("Error", e); + return new ArrayList<>(); + } + } + + private void saveIfNotExist(D dataObject) { + T entity = map(dataObject); + if (!this.existService.exist(entity)) { + logger.info("Creando {} = {}", this.type.getSimpleName(), entity); + this.existService.save(entity); + } + } + + protected abstract T map(D dataObject); + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/PreguntaSecretaData.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/PreguntaSecretaData.java new file mode 100644 index 0000000..aabac6a --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/PreguntaSecretaData.java @@ -0,0 +1,27 @@ +package io.semantic.openscore.core.repository.startup.steps; + +public class PreguntaSecretaData { + private String codigo; + private String pregunta; + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public String getPregunta() { + return pregunta; + } + + public void setPregunta(String pregunta) { + this.pregunta = pregunta; + } + + @Override + public String toString() { + return getCodigo() + " - " + getPregunta(); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/Secure.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/Secure.java new file mode 100644 index 0000000..0c27c5e --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/Secure.java @@ -0,0 +1,17 @@ +package io.semantic.openscore.core.security; + +import io.semantic.openscore.core.model.Rol; + +import javax.ws.rs.NameBinding; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(value = RetentionPolicy.RUNTIME) +@NameBinding +public @interface Secure { + + Rol[] value() default {Rol.USUARIO}; +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/SecureFilter.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/SecureFilter.java new file mode 100644 index 0000000..4f297f6 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/SecureFilter.java @@ -0,0 +1,75 @@ +package io.semantic.openscore.core.security; + +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.model.Usuario; +import io.semantic.openscore.core.repository.UsuarioRepository; +import io.semantic.openscore.core.services.UserInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.inject.Inject; +import javax.ws.rs.NotAuthorizedException; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerRequestFilter; +import javax.ws.rs.container.ResourceInfo; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.ext.Provider; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +@Provider +@Secure +public class SecureFilter implements ContainerRequestFilter { + + @Context + ResourceInfo resourceInfo; + + private Logger logger = LoggerFactory.getLogger(SecureFilter.class); + private UserInfo userInfo; + private UsuarioRepository usuarioRepository; + + public SecureFilter() { + + } + + @Inject + public SecureFilter(UserInfo userInfo, + UsuarioRepository usuarioRepository) { + this.userInfo = userInfo; + this.usuarioRepository = usuarioRepository; + } + + @Override + public void filter(ContainerRequestContext containerRequestContext) { + + Secure secure = resourceInfo.getResourceMethod().getAnnotation(Secure.class); + List roles = Arrays.asList(secure.value()); + + logger.info("Roles autorizados: {}", roles); + + + TokenGenerator tokenGenerator = new TokenGenerator(); + String token = tokenGenerator.getTokenFromAuthHeader(containerRequestContext.getHeaderString(HttpHeaders.AUTHORIZATION)); + boolean isValid = tokenGenerator.verify(token); + + if (isValid) { + logger.info("Token valido"); + Optional usuarioOptional = usuarioRepository.findByEmail(tokenGenerator.getMail(token)); + Usuario usuario = usuarioOptional.orElseThrow(() -> new IllegalArgumentException("usuario inexistente")); + userInfo.setUsuario(usuario); + if (!usuario.getRoles().stream().anyMatch(rol -> roles.contains(rol))) { + logger.info("El usuario no contiene los roles necesarios"); + throw new NotAuthorizedException("El usuario no contiene los roles necesarios"); + } else { + logger.info("El usuario contiene los roles, continua la operacion"); + } + } else { + logger.info("El token es invalido"); + throw new NotAuthorizedException("El token no es valido"); + } + + } +} + diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/TokenGenerator.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/TokenGenerator.java new file mode 100644 index 0000000..18c109b --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/security/TokenGenerator.java @@ -0,0 +1,138 @@ +package io.semantic.openscore.core.security; + +import java.util.Date; +import java.util.Set; + +import javax.enterprise.context.ApplicationScoped; + +import org.apache.commons.lang3.RandomStringUtils; + +import com.google.common.base.Charsets; +import com.google.common.hash.Hashing; +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSHeader; +import com.nimbusds.jose.JWSVerifier; +import com.nimbusds.jose.crypto.MACSigner; +import com.nimbusds.jose.crypto.MACVerifier; +import com.nimbusds.jwt.JWTClaimsSet; +import com.nimbusds.jwt.SignedJWT; + +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.model.Usuario; + +@ApplicationScoped +public class TokenGenerator { + + private static final String OPENSCORE_JWT_SECRET = "OPENSCORE_JWT_SECRET"; + private final String SECRET; + public static final String SUBJECT = "openscore"; + public static final String ISSUER = "openscore"; + public static final String USERNAME = "username"; + public static final String EMAIL = "email"; + public static final String NOMBRE = "nombre"; + public static final String APELLIDO = "apellido"; + public static final String ROLES = "roles"; + public static final JWSAlgorithm ALGORITMO = JWSAlgorithm.HS256; + public static final Date EXPIRACION_TOKEN = new Date(new Date().getTime() + 43800 * 60 * 1000); + + public TokenGenerator() { + String t = System.getenv(OPENSCORE_JWT_SECRET); + if (t != null && !t.isEmpty()) { + this.SECRET = t; + } else { + this.SECRET = "7ZXjPaKE3eJLY6ENu3zcZHIPE3dyOFru"; + } + } + + public String generarToken(Usuario usuario) { + + JWTClaimsSet claimsSet = new JWTClaimsSet.Builder() + .subject(SUBJECT) + .issuer(ISSUER) + .expirationTime(EXPIRACION_TOKEN) + .claim(EMAIL, + usuario.getEmail()) + .claim(NOMBRE, + usuario.getNombre()) + .claim(APELLIDO, + usuario.getApellido()) + .claim(ROLES, + usuario.getRoles()) + .build(); + + SignedJWT signedJWT = new SignedJWT(new JWSHeader(ALGORITMO), + claimsSet); + sign(signedJWT); + return signedJWT.serialize(); + } + + public String generarPassword(String password) { + return Hashing.sha256().hashString(password, + Charsets.UTF_8).toString(); + } + + public String getTokenFromAuthHeader(String authHeader) { + try { + String[] authorizationParts = authHeader.split(" "); + + return authorizationParts[1]; + } catch (Exception e) { + throw new IllegalArgumentException("token vacio o invalido"); + } + } + + public boolean verify(String token) { + try { + SignedJWT signedJWT = SignedJWT.parse(token); + JWSVerifier verifier = new MACVerifier(SECRET); + return signedJWT.verify(verifier) && + signedJWT.getJWTClaimsSet().getExpirationTime().before(new Date()); + } catch (Exception e) { + return false; + } + } + + public String getMail(String token) { + try { + SignedJWT signedJWT = SignedJWT.parse(token); + return (String) signedJWT.getJWTClaimsSet().getClaim(EMAIL); + } catch (Exception e) { + throw new RuntimeException("Error al firmar el token", + e); + } + } + + public Set getRoles(String token) { + try { + SignedJWT signedJWT = SignedJWT.parse(token); + return (Set) signedJWT.getJWTClaimsSet().getClaim(ROLES); + } catch (Exception e) { + throw new RuntimeException("Error al firmar el token", + e); + } + } + + private void sign(SignedJWT signedJWT) { + try { + + MACSigner signer = new MACSigner(SECRET); + signedJWT.sign(signer); + } catch (Exception e) { + throw new RuntimeException("Error al firmar el token", + e); + } + } + + public static String passwordRegex() { + return null; + } + + public String generateRandomToken() { + int length = 10; + boolean useLetters = true; + boolean useNumbers = false; + return RandomStringUtils.random(length, + useLetters, + useNumbers); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/RestUtil.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/RestUtil.java new file mode 100644 index 0000000..6f99780 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/RestUtil.java @@ -0,0 +1,18 @@ +package io.semantic.openscore.core.services; + +import io.semantic.openscore.core.api.ApiResponse; + +public class RestUtil { + + public static ApiResponse ok(T data) { + return new ApiResponse<>(data); + } + + public static ApiResponse error(String error, + String description, + Object data) { + return new ApiResponse<>(error, + description, + data); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/UserInfo.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/UserInfo.java new file mode 100644 index 0000000..b08c65f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/UserInfo.java @@ -0,0 +1,28 @@ +package io.semantic.openscore.core.services; + +import io.semantic.openscore.core.model.Usuario; + +import javax.enterprise.context.RequestScoped; +import java.util.Optional; + +@RequestScoped +public class UserInfo { + + private Optional usuario; + + public UserInfo() { + usuario = Optional.empty(); + } + + public Optional getUsuario() { + return usuario; + } + + public void setUsuario(Usuario usuario) { + this.usuario = Optional.of(usuario); + } + + public long getUserId() { + return this.usuario.orElseThrow(() -> new IllegalArgumentException("Se necesita un usuario en la sesion para poder obtener el id")).getId(); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/AdminService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/AdminService.java new file mode 100644 index 0000000..493be30 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/AdminService.java @@ -0,0 +1,16 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.admin.UsuarioCompletoDTO; + +import javax.ws.rs.Consumes; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Path("admin") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface AdminService extends SearchService { + + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/DefinicionCompeticionesService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/DefinicionCompeticionesService.java new file mode 100644 index 0000000..f8b6ed9 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/DefinicionCompeticionesService.java @@ -0,0 +1,45 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.competiciones.CrearDefinicionCompeticionDTO; +import io.semantic.openscore.core.api.competiciones.DefinicionCompeticionDTO; +import io.semantic.openscore.core.api.partidos.CrearOUpdatePartidoDTO; +import io.semantic.openscore.core.api.partidos.PartidoDTO; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Path("competiciones") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface DefinicionCompeticionesService extends StandardService { + + + @GET + @Path("/{id}/partidos") + ApiResponse> getPartidos(@PathParam("id") long id); + + @GET + @Path("/{id}/partidos/{idPartido") + ApiResponse getPartido(@PathParam("id") long id, + @PathParam("idPartido") long idPartido); + + @POST + @Path("/{id}/partidos") + ApiResponse addPartido(@PathParam("id") long id, + CrearOUpdatePartidoDTO crearPartido); + + @POST + @Path("/{id}/partidos/{idPartido}") + ApiResponse updatePartido(@PathParam("id") long id, + @PathParam("idPartido") long idPartido, + CrearOUpdatePartidoDTO crearOUpdatePartidoDTO); + + @DELETE + @Path("/{id}/partidos/{idPartido}") + ApiResponse deletePartido(@PathParam("id") long id, + @PathParam("idPartido") long idPartido); + + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java new file mode 100644 index 0000000..0970fb1 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java @@ -0,0 +1,19 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.equipos.CrearEquipoDTO; +import io.semantic.openscore.core.api.equipos.EquipoDTO; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface EquiposService extends StandardService { + + @Path("/") + @GET + ApiResponse> getAll(@QueryParam("page") int page, + @QueryParam("pageSize") int pageSize); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/FasesService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/FasesService.java new file mode 100644 index 0000000..14cc273 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/FasesService.java @@ -0,0 +1,15 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.model.Fase; + +import javax.ws.rs.Consumes; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Path("fases") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface FasesService extends GetService { + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/GetService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/GetService.java new file mode 100644 index 0000000..630a5da --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/GetService.java @@ -0,0 +1,16 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; + +public interface GetService extends SearchService { + + + @Path("/{id}") + @GET + ApiResponse get(@PathParam("id") long id); + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/GruposService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/GruposService.java new file mode 100644 index 0000000..8260b24 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/GruposService.java @@ -0,0 +1,14 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.model.Grupo; + +import javax.ws.rs.Consumes; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Path("grupos") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface GruposService extends GetService { +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/InformationService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/InformationService.java new file mode 100644 index 0000000..aa2d6e7 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/InformationService.java @@ -0,0 +1,27 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.information.Information; +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.security.Secure; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Path("info") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface InformationService { + + @GET + @Path("/") + ApiResponse getInformation(); + + @GET + @Path("/ping/secure") + @Secure({Rol.ADMIN, Rol.USUARIO}) + ApiResponse securePing(); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PaisesService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PaisesService.java new file mode 100644 index 0000000..96a4f4a --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PaisesService.java @@ -0,0 +1,16 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.paises.PaisDTO; + +import javax.ws.rs.Consumes; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Path("paises") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface PaisesService extends SearchService { + + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java new file mode 100644 index 0000000..456ef2c --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java @@ -0,0 +1,50 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.partidos.CrearOUpdatePartidoDTO; +import io.semantic.openscore.core.api.partidos.PartidoDTO; +import io.semantic.openscore.core.api.partidos.ResultadoDTO; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +@Path("partidos") +public interface PartidosService { + + @GET + @Path("/") + ApiResponse> getAll(@QueryParam("page") int page, + @QueryParam("pageSize") int pageSize, + @QueryParam("grupo") String grupo, + @QueryParam("fase") String fase, + @QueryParam("fecha") long fecha, + @QueryParam("equipo") String equipo); + + @GET + @Path("/{id}") + ApiResponse get(@PathParam("id") long id); + + @GET + @Path("/fechas") + ApiResponse> getFechas(); + + @DELETE + @Path("/{id}") + ApiResponse delete(@PathParam("id") long id); + + @POST + @Path("/") + ApiResponse add(CrearOUpdatePartidoDTO entity); + + @POST + @Path("/{id}") + ApiResponse update(@PathParam("id") long id, CrearOUpdatePartidoDTO entity); + + @POST + @Path("{id}/resultado") + ApiResponse setResultado(@PathParam("id") long id, ResultadoDTO resultado); +} + diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PostService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PostService.java new file mode 100644 index 0000000..53275d8 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PostService.java @@ -0,0 +1,30 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.post.CrearPost; +import io.semantic.openscore.core.model.Post; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Path("/posts") +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.APPLICATION_JSON) +public interface PostService extends StandardService { + + @Path("/") + @GET + ApiResponse> getAll(@QueryParam("page") int page, + @QueryParam("pageSize") int pageSize, + @QueryParam("status") String status); + + @Path("{id}/publicar") + @POST + ApiResponse publicar(@PathParam("id") long id); + + @Path("{id}/retirar") + @POST + ApiResponse retirar(@PathParam("id") long id); + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java new file mode 100644 index 0000000..ee07189 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java @@ -0,0 +1,66 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.pronosticos.CrearPronosticoDTO; +import io.semantic.openscore.core.api.pronosticos.PartidoPronosticoDTO; +import io.semantic.openscore.core.api.pronosticos.PronosticoDTO; +import io.semantic.openscore.core.security.Secure; + +import javax.enterprise.context.ApplicationScoped; +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.List; + + +@Path("pronosticos") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface PronosticosService { + + @Path("/") + @GET + @Secure + ApiResponse> getAll(@QueryParam("page") int page, + @QueryParam("pageSize") int pageSize, + @QueryParam("grupo") String grupo, + @QueryParam("fase") String fase, + @QueryParam("dia") long dia, + @QueryParam("fecha") int fecha); + + @Path("/{id}") + @GET + @Secure + ApiResponse get(@PathParam("id") long id); + + @Path("/{id}") + @DELETE + @Secure + ApiResponse delete(@PathParam("id") long id); + + @Path("/") + @POST + @Secure + ApiResponse add(CrearPronosticoDTO entity); + + @Path("/{id}") + @POST + @Secure + ApiResponse update(@PathParam("id") long id, + CrearPronosticoDTO entity); + + @Path("/{id}/local") + @POST + @Secure + ApiResponse local(@PathParam("id") long idPartido); + + @Path("/{id}/empate") + @POST + @Secure + ApiResponse empate(@PathParam("id") long idPartido); + + @Path("/{id}/visitante") + @POST + @Secure + ApiResponse visitante(@PathParam("id") long idPartido); + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/RankingService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/RankingService.java new file mode 100644 index 0000000..cbc02c2 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/RankingService.java @@ -0,0 +1,24 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.ranking.Ranking; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Path("ranking") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface RankingService { + + @GET + @Path("/{id}") + ApiResponse getRanking(@PathParam("id") long id); + + @GET + @Path("/") + ApiResponse> getAllRanking(@QueryParam("pais") String pais, @QueryParam("size") @DefaultValue("0") int size); + + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/SearchService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/SearchService.java new file mode 100644 index 0000000..d4e28c5 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/SearchService.java @@ -0,0 +1,19 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.APPLICATION_JSON) +public interface SearchService { + + @GET + @Path("/") + ApiResponse> getAll(@QueryParam("page") @DefaultValue("0") int page, + @QueryParam("pageSize") @DefaultValue("10") int pageSize, + @QueryParam("q") @DefaultValue("") String filter); + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/StandardService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/StandardService.java new file mode 100644 index 0000000..dbc9dc1 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/StandardService.java @@ -0,0 +1,26 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; + +import javax.ws.rs.*; + +public interface StandardService { + + + @Path("/{id}") + @GET + ApiResponse get(@PathParam("id") long id); + + @Path("/{id}") + @DELETE + ApiResponse delete(@PathParam("id") long id); + + @Path("/") + @POST + ApiResponse add(Y entity); + + @Path("/{id}") + @POST + ApiResponse update(@PathParam("id") long id, + Z entity); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/UsuariosService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/UsuariosService.java new file mode 100644 index 0000000..7585a4f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/UsuariosService.java @@ -0,0 +1,62 @@ +package io.semantic.openscore.core.services.api; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.TokenDTO; +import io.semantic.openscore.core.api.usuarios.*; +import io.semantic.openscore.core.security.Secure; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Path("usuarios") +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.APPLICATION_JSON) +public interface UsuariosService extends SearchService { + + @POST + @Path("/registrar") + ApiResponse registrarUsuario(CrearUsuarioDTO crearUsuario); + + @POST + @Path("/update/{id}") + @Secure + ApiResponse updateUsuario(@PathParam("id") long id, UpdateUsuarioDTO crearUsuario); + + + @POST + @Path("/password") + @Secure + ApiResponse updatePassword(UpdatePassword updatePassword); + + @POST + @Path("/recover") + ApiResponse recoverPassword(RecoverPassword updatePassword); + + @GET + @Path("/token/{email}") + ApiResponse sendToken(@PathParam("email") String email); + + + ApiResponse deleteUsuario(long id); + + @GET + @Path("/{id}") + @Secure + ApiResponse getUsuario(@PathParam("id") Long id); + + @GET + @Path("/myself") + @Secure + ApiResponse getMiUsuario(); + + @GET + @Path("/") + @Secure + ApiResponse> getAll(@QueryParam("page") int page, @QueryParam("pageSize") int pageSize, @QueryParam("filter") String filter); + + @POST + @Path("/login") + ApiResponse login(LoginUsuarioDTO loginUsuario); + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/ApplicationExceptionMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/ApplicationExceptionMapper.java new file mode 100644 index 0000000..9bab42e --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/ApplicationExceptionMapper.java @@ -0,0 +1,38 @@ +package io.semantic.openscore.core.services.filters; + +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +import io.semantic.openscore.core.exceptions.ApplicationException; +import io.semantic.openscore.core.exceptions.ValidationException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static io.semantic.openscore.core.services.RestUtil.error; + +@Provider +public class ApplicationExceptionMapper implements ExceptionMapper { + + private Logger logger = LoggerFactory.getLogger(ApplicationExceptionMapper.class); + + @Override + public Response toResponse(ApplicationException exception) { + logger.error(exception.getMessage(), exception); + + Object data = null; + + if (exception instanceof ValidationException) { + data = ((ValidationException) exception).getData(); + } + + return Response + .status(500) + .type(MediaType.APPLICATION_JSON_TYPE) + .entity(error("ERROR", + exception.getMessage(), + data)) + .build(); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/CorsFilter.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/CorsFilter.java new file mode 100644 index 0000000..708f7c2 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/CorsFilter.java @@ -0,0 +1,35 @@ +package io.semantic.openscore.core.services.filters; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerResponseContext; +import javax.ws.rs.container.ContainerResponseFilter; +import javax.ws.rs.container.PreMatching; +import javax.ws.rs.ext.Provider; +import java.io.IOException; + +@PreMatching +@Provider +public class CorsFilter implements ContainerResponseFilter { + + private Logger logger = LoggerFactory.getLogger(CorsFilter.class); + + private static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"; + private static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods"; + private static final String ACCESS_CONTROL_MAX_AGE = "Access-Control-Max-Age"; + private static final String ACCESS_CONTROL_ALLOW_CREDENTIALS = "Access-Control-Allow-Credentials"; + private static final String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers"; + + @Override + public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { + + responseContext.getHeaders().add(ACCESS_CONTROL_ALLOW_ORIGIN, "*"); + responseContext.getHeaders().add(ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, DELETE, OPTIONS, HEAD".toUpperCase()); + responseContext.getHeaders().add(ACCESS_CONTROL_MAX_AGE, "-1"); + responseContext.getHeaders().add(ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); + responseContext.getHeaders().add(ACCESS_CONTROL_ALLOW_HEADERS, "Authorization, Origin, Content-Type, Accept".toLowerCase()); + } + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/LoggerFilter.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/LoggerFilter.java new file mode 100644 index 0000000..aeed309 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/LoggerFilter.java @@ -0,0 +1,28 @@ +package io.semantic.openscore.core.services.filters; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerRequestFilter; +import javax.ws.rs.container.PreMatching; +import javax.ws.rs.ext.Provider; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +@PreMatching +@Provider +public class LoggerFilter implements ContainerRequestFilter { + + private Logger logger = LoggerFactory.getLogger(LoggerFilter.class); + + + @Override + public void filter(ContainerRequestContext requestContext) throws IOException { + byte[] byteArray = IOUtils.toByteArray(requestContext.getEntityStream()); + InputStream entity = new ByteArrayInputStream(byteArray); + requestContext.setEntityStream(new ByteArrayInputStream(byteArray)); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/RuntimeExceptionMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/RuntimeExceptionMapper.java new file mode 100644 index 0000000..2be6234 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/filters/RuntimeExceptionMapper.java @@ -0,0 +1,25 @@ +package io.semantic.openscore.core.services.filters; + +import io.semantic.openscore.core.api.ApiResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +@Provider +public class RuntimeExceptionMapper implements ExceptionMapper { + + private Logger logger = LoggerFactory.getLogger(ApplicationExceptionMapper.class); + + @Override + public Response toResponse(IllegalArgumentException e) { + logger.error(e.getLocalizedMessage(), e); + return Response + .serverError() + .type(MediaType.APPLICATION_JSON_TYPE) + .entity(new ApiResponse<>("500", e.getMessage(), null)).build(); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/AdminServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/AdminServiceImpl.java new file mode 100644 index 0000000..f01956e --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/AdminServiceImpl.java @@ -0,0 +1,41 @@ +package io.semantic.openscore.core.services.impl; + +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.admin.UsuarioCompletoDTO; +import io.semantic.openscore.core.mapping.UsuarioMapper; +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.model.Usuario; +import io.semantic.openscore.core.repository.Page; +import io.semantic.openscore.core.repository.UsuarioRepository; +import io.semantic.openscore.core.security.Secure; +import io.semantic.openscore.core.services.api.AdminService; + +@ApplicationScoped +public class AdminServiceImpl implements AdminService { + + private UsuarioMapper mapper; + private UsuarioRepository usuarioRepository; + + public AdminServiceImpl() { + } + + @Inject + public AdminServiceImpl(UsuarioRepository usuarioRepository, + UsuarioMapper mapper) { + this.usuarioRepository = usuarioRepository; + this.mapper = mapper; + } + + @Override + @Secure(Rol.ADMIN) + public ApiResponse> getAll(int page, int pageSize, String filter) { + List usuarios = this.usuarioRepository.findAll(new Page(page, pageSize)); + List usuariosApi = this.mapper.asCompletoApi(usuarios); + return new ApiResponse<>(usuariosApi); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java new file mode 100644 index 0000000..8d2bff0 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java @@ -0,0 +1,106 @@ +package io.semantic.openscore.core.services.impl; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.equipos.CrearEquipoDTO; +import io.semantic.openscore.core.api.equipos.EquipoDTO; +import io.semantic.openscore.core.mapping.EquipoMapper; +import io.semantic.openscore.core.model.Equipo; +import io.semantic.openscore.core.model.Pais; +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.repository.EquiposRepository; +import io.semantic.openscore.core.repository.Page; +import io.semantic.openscore.core.repository.PaisRepository; +import io.semantic.openscore.core.security.Secure; +import io.semantic.openscore.core.services.api.EquiposService; +import io.semantic.openscore.core.validation.ApplicationValidator; + +import javax.inject.Inject; +import javax.ws.rs.Path; +import javax.ws.rs.core.UriInfo; +import java.text.MessageFormat; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import static io.semantic.openscore.core.services.RestUtil.ok; + +@Path("equipos") +public class EquiposServiceImpl implements EquiposService { + + + private PaisRepository paisRepository; + private EquiposRepository equiposRepository; + private ApplicationValidator validator; + private EquipoMapper mapper; + + public EquiposServiceImpl() { + } + + @Inject + public EquiposServiceImpl(EquiposRepository equiposRepository, + PaisRepository paisRepository, + ApplicationValidator validator, + EquipoMapper mapper) { + this.equiposRepository = equiposRepository; + this.paisRepository = paisRepository; + this.validator = validator; + this.mapper = mapper; + } + + @Override + public ApiResponse> getAll(int page, int pageSize) { + List equipos = this.equiposRepository + .findAll(new Page(page, pageSize)) + .stream() + .map(equipo -> map(equipo)) + .collect(Collectors.toList()); + return ok(equipos); + } + + @Override + public ApiResponse get(long id) { + Equipo equipo = this.equiposRepository + .findById(id).orElseThrow(() -> + new RuntimeException(MessageFormat.format("El equipo con el ID: {0} no fue encontrado", id))); + return ok(map(equipo)); + } + + @Override + @Secure(Rol.ADMIN) + public ApiResponse delete(long id) { + this.equiposRepository.deleteById(id); + return ok(id); + } + + @Override + @Secure(Rol.ADMIN) + public ApiResponse add(CrearEquipoDTO entity) { + validator.validate(entity); + Pais pais = this.paisRepository.findByCodigo(entity.getCodigoPais()); + Equipo equipo = this.mapper.asEquipo(entity); + this.equiposRepository.save(equipo); + return ok(map(equipo)); + } + + @Override + @Secure(Rol.ADMIN) + public ApiResponse update(long id, CrearEquipoDTO entity) { + validator.validate(entity); + Optional equipoOptional = this.equiposRepository.findById(id); + if (equipoOptional.isPresent()) { + Equipo equipo = equipoOptional.get(); + equipo.setCodigo(entity.getCodigo()); + equipo.setLogo(entity.getLogo()); + equipo.setNombre(entity.getNombre()); + this.equiposRepository.save(equipo); + return ok(map(equipo)); + } else { + throw new RuntimeException(MessageFormat.format("No se pudo actualizar el equipo con ID {0}", id)); + } + + } + + private EquipoDTO map(Equipo equipo) { + return this.mapper.asApi(equipo); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/FasesServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/FasesServiceImpl.java new file mode 100644 index 0000000..eebacfe --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/FasesServiceImpl.java @@ -0,0 +1,43 @@ +package io.semantic.openscore.core.services.impl; + +import static io.semantic.openscore.core.services.RestUtil.ok; + +import java.text.MessageFormat; +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.model.Fase; +import io.semantic.openscore.core.repository.FaseRepository; +import io.semantic.openscore.core.repository.Page; +import io.semantic.openscore.core.services.api.FasesService; + +@ApplicationScoped +public class FasesServiceImpl implements FasesService { + + private FaseRepository faseRepository; + + public FasesServiceImpl() { + } + + @Inject + public FasesServiceImpl(FaseRepository faseRepository) { + this.faseRepository = faseRepository; + } + + @Override + public ApiResponse> getAll(int page, int pageSize, String filter) { + return ok(this.faseRepository.findAll(new Page(page, pageSize))); + } + + @Override + public ApiResponse get(long id) { + return ok(this.faseRepository + .findById(id) + .orElseThrow(() -> new IllegalArgumentException( + MessageFormat + .format("La Fase con el ID {0} no fue encontrada", id)))); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/GruposServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/GruposServiceImpl.java new file mode 100644 index 0000000..69a2e5f --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/GruposServiceImpl.java @@ -0,0 +1,44 @@ +package io.semantic.openscore.core.services.impl; + +import static io.semantic.openscore.core.services.RestUtil.ok; + +import java.text.MessageFormat; +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.model.Grupo; +import io.semantic.openscore.core.repository.GrupoRepository; +import io.semantic.openscore.core.repository.Page; +import io.semantic.openscore.core.services.api.GruposService; + +@ApplicationScoped +public class GruposServiceImpl implements GruposService { + + + private GrupoRepository grupoRepository; + + public GruposServiceImpl() { + } + + @Inject + public GruposServiceImpl(GrupoRepository grupoRepository) { + this.grupoRepository = grupoRepository; + } + + @Override + public ApiResponse> getAll(int page, int pageSize, String filter) { + return ok(this.grupoRepository.findAll(new Page(page, pageSize))); + } + + @Override + public ApiResponse get(long id) { + return ok(this.grupoRepository + .findById(id) + .orElseThrow(() -> new IllegalArgumentException( + MessageFormat + .format("El Grupo con el ID {0} no fue encontrado", id)))); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/InformationServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/InformationServiceImpl.java new file mode 100644 index 0000000..90720a8 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/InformationServiceImpl.java @@ -0,0 +1,53 @@ +package io.semantic.openscore.core.services.impl; + +import static io.semantic.openscore.core.services.RestUtil.ok; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; +import java.util.Properties; +import java.util.stream.Collectors; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.persistence.EntityManager; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.information.Information; +import io.semantic.openscore.core.exceptions.NoSePuedeLeerInformacionException; +import io.semantic.openscore.core.services.api.InformationService; + +@ApplicationScoped +public class InformationServiceImpl implements InformationService { + + @Inject + private EntityManager entityManager; + + @Override + public ApiResponse getInformation() { + try { + Map emfProperties = entityManager.getEntityManagerFactory().getProperties(); + + Map hibernateMap = emfProperties.entrySet().stream() + .filter(x -> x.getKey().startsWith("hibernate")) + .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue())); + + Properties prop = new Properties(); + String filename = "info.properties"; + InputStream input = getClass().getClassLoader().getResourceAsStream(filename); + prop.load(input); + Information information = new Information(); + information.setVersion(prop.getProperty("info.version")); + information.setEnvironment(prop.getProperty("info.environment")); + information.setProperties(hibernateMap); + return ok(information); + } catch (IOException e) { + throw new NoSePuedeLeerInformacionException("No se puede leer info.properties", e); + } + } + + @Override + public ApiResponse securePing() { + return ok("ok"); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PaisesServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PaisesServiceImpl.java new file mode 100644 index 0000000..ad37e26 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PaisesServiceImpl.java @@ -0,0 +1,40 @@ +package io.semantic.openscore.core.services.impl; + +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.paises.PaisDTO; +import io.semantic.openscore.core.mapping.PaisMapper; +import io.semantic.openscore.core.model.Pais; +import io.semantic.openscore.core.repository.Page; +import io.semantic.openscore.core.repository.PaisRepository; +import io.semantic.openscore.core.services.api.PaisesService; + +@ApplicationScoped +public class PaisesServiceImpl implements PaisesService { + + + private PaisMapper mapper; + private PaisRepository repository; + + public PaisesServiceImpl() { + + } + + @Inject + public PaisesServiceImpl(PaisRepository repository, PaisMapper mapper) { + + this.repository = repository; + this.mapper = mapper; + } + + + @Override + public ApiResponse> getAll(int page, int pageSize, String filter) { + List paises = this.repository.findAll(new Page(page, pageSize)); + return new ApiResponse<>(this.mapper.asApi(paises)); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java new file mode 100644 index 0000000..012c673 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java @@ -0,0 +1,150 @@ +package io.semantic.openscore.core.services.impl; + +import static io.semantic.openscore.core.services.RestUtil.ok; + +import java.text.MessageFormat; +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.partidos.CrearOUpdatePartidoDTO; +import io.semantic.openscore.core.api.partidos.PartidoDTO; +import io.semantic.openscore.core.api.partidos.ResultadoDTO; +import io.semantic.openscore.core.mapping.PartidoMapper; +import io.semantic.openscore.core.model.Equipo; +import io.semantic.openscore.core.model.Fase; +import io.semantic.openscore.core.model.Grupo; +import io.semantic.openscore.core.model.Partido; +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.repository.EquiposRepository; +import io.semantic.openscore.core.repository.FaseRepository; +import io.semantic.openscore.core.repository.GrupoRepository; +import io.semantic.openscore.core.repository.PartidoRepository; +import io.semantic.openscore.core.security.Secure; +import io.semantic.openscore.core.services.api.PartidosService; + +@ApplicationScoped +public class PartidosServiceImpl implements PartidosService { + + + private PartidoRepository partidoRepository; + private EquiposRepository equiposRepository; + private GrupoRepository grupoRepository; + private FaseRepository faseRepository; + private PartidoMapper partidoMapper; + + public PartidosServiceImpl() { + } + + @Inject + public PartidosServiceImpl(final PartidoRepository partidoRepository, + final EquiposRepository equiposRepository, + final GrupoRepository grupoRepository, + final FaseRepository faseRepository, + final PartidoMapper partidoMapper) { + this.partidoRepository = partidoRepository; + this.equiposRepository = equiposRepository; + this.grupoRepository = grupoRepository; + this.faseRepository = faseRepository; + this.partidoMapper = partidoMapper; + } + + @Override + public ApiResponse> getAll(int page, + int pageSize, + String grupo, + String fase, + long dia, + String equipo) { + + this.partidoRepository.findAll(); + List partidos = this.partidoRepository.findAll(); + return ok(this.partidoMapper.asApi(partidos)); + } + + + @Override + public ApiResponse get(long id) { + Partido partido = getPartido(id); + return ok(this.partidoMapper.asApi(partido)); + } + + @Override + public ApiResponse> getFechas() { + return ok(this.partidoRepository.findAllFechas()); + } + + @Override + @Secure(Rol.ADMIN) + public ApiResponse delete(long id) { + return null; + } + + @Override + @Secure(Rol.ADMIN) + public ApiResponse add(CrearOUpdatePartidoDTO entity) { + Partido partido = crearPartido(0, entity); + this.partidoRepository.save(partido); + return ok(this.partidoMapper.asApi(partido)); + } + + private Partido crearPartido(long id, CrearOUpdatePartidoDTO entity) { + Partido partido = new Partido(); + if (id > 0) { + partido = this.getPartido(id); + } + Equipo local = this.getEquipo(entity.getLocal()); + Equipo visitante = this.getEquipo(entity.getVisitante()); + partido.setLocal(local); + partido.setVisitante(visitante); + partido.setFecha(entity.getFecha()); + partido.setGrupo(this.getGrupo(entity.getGrupo())); + partido.setFase(this.getFase(entity.getFase())); + partido.setLugar(entity.getLugar()); + partido.setDia(entity.getDia()); + return partido; + } + + private Equipo getEquipo(String codigo) { + return this.equiposRepository.findByCodigo(codigo).orElseThrow(() -> + new IllegalArgumentException(MessageFormat.format("Equipo con codigo [{0}] no encontrado", codigo))); + } + + private Grupo getGrupo(String codigo) { + return this.grupoRepository.findByCodigo(codigo).orElseThrow(() -> + new IllegalArgumentException(MessageFormat.format("Grupo con codigo [{0}] no encontrado", codigo))); + } + + private Fase getFase(String codigo) { + return this.faseRepository.findByCodigo(codigo).orElseThrow(() -> + new IllegalArgumentException(MessageFormat.format("Fase con codigo [{0}] no encontrado", codigo))); + } + + @Override + @Secure(Rol.ADMIN) + public ApiResponse update(long id, CrearOUpdatePartidoDTO entity) { + Partido partido = crearPartido(id, entity); + this.partidoRepository.save(partido); + return ok(this.partidoMapper.asApi(partido)); + } + + @Override + @Secure(Rol.ADMIN) + public ApiResponse setResultado(long partidoId, ResultadoDTO resultado) { + Partido partido = this.getPartido(partidoId); + partido.setResultado(this.partidoMapper.asResultado(resultado)); + this.partidoRepository.save(partido); + return ok(this.partidoMapper.asApi(partido)); + + } + + private Partido getPartido(long partidoId) { + return this.partidoRepository + .findById(partidoId) + .orElseThrow(() -> + new IllegalArgumentException(MessageFormat + .format("El partido <{0}> no fue encontrado", partidoId))); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PostServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PostServiceImpl.java new file mode 100644 index 0000000..3b56be4 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PostServiceImpl.java @@ -0,0 +1,101 @@ +package io.semantic.openscore.core.services.impl; + +import static io.semantic.openscore.core.services.RestUtil.ok; + +import java.text.MessageFormat; +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.post.CrearPost; +import io.semantic.openscore.core.model.Post; +import io.semantic.openscore.core.model.PostStatus; +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.repository.Page; +import io.semantic.openscore.core.repository.PostRepository; +import io.semantic.openscore.core.security.Secure; +import io.semantic.openscore.core.services.api.PostService; + +@ApplicationScoped +public class PostServiceImpl implements PostService { + + private PostRepository postRepository; + + public PostServiceImpl() { + } + + @Inject + public PostServiceImpl(PostRepository postRepository) { + this.postRepository = postRepository; + } + + public ApiResponse> getAll(int page, int pageSize, String postStatus) { + + if (postStatus != null && !postStatus.isEmpty()) { + PostStatus status = PostStatus.valueOf(postStatus); + return ok(this.postRepository.findAllByStatus(status)); + } else { + return ok(this.postRepository.findAll(new Page(page, pageSize))); + } + } + + @Override + @Secure(Rol.ADMIN) + public ApiResponse publicar(long id) { + return ok(cambiarStatus(id, PostStatus.PUBLICADO)); + } + + @Override + @Secure(Rol.ADMIN) + public ApiResponse retirar(long id) { + return ok(cambiarStatus(id, PostStatus.BORRADOR)); + } + + private Post cambiarStatus(long id, PostStatus status) { + Post post = this.getPost(id); + post.setStatus(status); + this.postRepository.save(post); + return post; + } + + @Override + public ApiResponse get(long id) { + return ok(getPost(id)); + } + + private Post getPost(long id) { + return this.postRepository + .findById(id) + .orElseThrow(() -> new IllegalArgumentException(MessageFormat.format("El post con el ID <{0}> no existe", id))); + } + + @Override + public ApiResponse delete(long id) { + this.postRepository.deleteById(id); + return ok(id); + } + + @Override + public ApiResponse add(CrearPost entity) { + Post post = new Post(); + savePost(entity, post); + return ok(post); + } + + private void savePost(CrearPost entity, Post post) { + post.setTitulo(entity.getTitulo()); + post.setContenido(entity.getContenido()); + post.setAutor(entity.getAutor()); + post.setStatus(PostStatus.BORRADOR); + this.postRepository.save(post); + } + + @Override + public ApiResponse update(long id, CrearPost entity) { + Post post = this.getPost(id); + savePost(entity, post); + return ok(post); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java new file mode 100644 index 0000000..94ccfb3 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java @@ -0,0 +1,228 @@ +package io.semantic.openscore.core.services.impl; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.pronosticos.CrearPronosticoDTO; +import io.semantic.openscore.core.api.pronosticos.PartidoPronosticoDTO; +import io.semantic.openscore.core.api.pronosticos.PronosticoDTO; +import io.semantic.openscore.core.exceptions.PartidoBloqueadoException; +import io.semantic.openscore.core.mapping.PartidoMapper; +import io.semantic.openscore.core.mapping.PronosticoMapper; +import io.semantic.openscore.core.model.Partido; +import io.semantic.openscore.core.model.Pronostico; +import io.semantic.openscore.core.model.Usuario; +import io.semantic.openscore.core.repository.PartidoRepository; +import io.semantic.openscore.core.repository.PronosticoRepository; +import io.semantic.openscore.core.repository.UsuarioRepository; +import io.semantic.openscore.core.services.UserInfo; +import io.semantic.openscore.core.services.api.PronosticosService; +import io.semantic.openscore.core.validation.ApplicationValidator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; +import java.text.MessageFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + +import static io.semantic.openscore.core.services.RestUtil.ok; + +@ApplicationScoped +public class PronosticosServiceImpl implements PronosticosService { + + private Logger logger = LoggerFactory.getLogger(PronosticosServiceImpl.class); + + private UserInfo userInfo; + private PronosticoRepository pronosticoRepository; + private PartidoRepository partidoRepository; + private UsuarioRepository usuarioRepository; + private ApplicationValidator validator; + private PartidoMapper partidoMapper; + private PronosticoMapper pronosticoMapper; + + public PronosticosServiceImpl() { + } + + @Inject + public PronosticosServiceImpl(UserInfo userInfo, + PronosticoRepository pronosticoRepository, + PartidoRepository partidoRepository, + UsuarioRepository usuarioRepository, + ApplicationValidator validator, + PartidoMapper partidoMapper, + PronosticoMapper pronosticoMapper) { + this.userInfo = userInfo; + this.pronosticoRepository = pronosticoRepository; + this.partidoRepository = partidoRepository; + this.usuarioRepository = usuarioRepository; + this.validator = validator; + this.partidoMapper = partidoMapper; + this.pronosticoMapper = pronosticoMapper; + } + + @Override + public ApiResponse> getAll(int page, + int pageSize, + String grupo, + String fase, + long dia, + int fecha) { + + List partidos = getPartidos(grupo, dia, fase, fecha); + List pronosticos = this.pronosticoRepository.findByUsuario(userInfo.getUserId()); + + logger.info("Pronosticos encontrados para el usuario {}: {}", this.userInfo.getUsuario().get().getEmail(), pronosticos.size()); + + + List partidoDTOs = this.pronosticoMapper.asApiPronostico(partidos); + + partidoDTOs.forEach(partidoPronosticoDTO -> { + pronosticos.forEach(pronostico -> { + if (partidoPronosticoDTO.getId() == pronostico.getPartido().getId()) { + partidoPronosticoDTO.setPronostico(this.pronosticoMapper.asApi(pronostico)); + } + }); + }); + + + return ok(partidoDTOs); + } + + private List getPartidos(String grupo, long dia, String fase, int fecha) { + if (grupo != null && !grupo.isEmpty()) { + return this.partidoRepository.findAllByGrupo(grupo); + } else if (fase != null && !fase.isEmpty()) { + return this.partidoRepository.findAllByFase(fase); + } else if (fecha > 0) { + return this.partidoRepository.findAllByFecha(fecha); + } else if ( dia > 0) { + return this.partidoRepository.findAllByDia(dia); + } else { + return this.partidoRepository.findAll(); + } + } + + @Override + public ApiResponse get(long id) { + long idUsuario = this.userInfo.getUserId(); + Pronostico pronostico = getPronostico(id, + idUsuario); + return ok(this.pronosticoMapper.asApi(pronostico)); + } + + @Override + public ApiResponse delete(long id) { + this.pronosticoRepository.deleteById(id); + return ok(id); + } + + @Override + public ApiResponse add(CrearPronosticoDTO entity) { + throw new UnsupportedOperationException("La operacion ADD para PronosticoService no esta soportada"); + } + + @Override + public ApiResponse update(long id, + CrearPronosticoDTO entity) { + long idUsuario = this.userInfo.getUserId(); + validator.validate(entity); + + Pronostico pronostico = this.getPronostico(id, + idUsuario); + this.pronosticoMapper.updatePronostico(entity, + pronostico); + this.pronosticoRepository.save(pronostico); + return ok(this.pronosticoMapper.asApi(pronostico)); + } + + private Usuario getUsuario(long idUsuario) { + return this.usuarioRepository.findById(idUsuario).orElseThrow(() -> new IllegalArgumentException(MessageFormat + .format("El Usuario con ID {0} no fue encontrado", + idUsuario))); + } + + private Pronostico getPronostico(long id, + long idUsuario) { + return this.pronosticoRepository + .findById(id, + idUsuario) + .orElseThrow(() -> new IllegalArgumentException(MessageFormat + .format("El Pronostico con ID {0} no se encuentra para el usuario {1}", + id, + idUsuario))); + } + + private Partido getPartido(long id) { + return this.partidoRepository.findById(id) + .orElseThrow(() -> new IllegalArgumentException(MessageFormat + .format("El Partido con ID {0} no fue encontrado", + id))); + } + + @Override + @Transactional + public ApiResponse local(long idPartido) { + verificarSiElPartidoEstaBloqueado(idPartido); + long idUsuario = this.userInfo.getUserId(); + Pronostico pronostico = this.getPronosticoOrCreatePronostico(idPartido, + idUsuario); + pronostico.local(); + pronostico.setUsuario(this.userInfo.getUsuario().get()); + this.pronosticoRepository.save(pronostico); + return ok(this.pronosticoMapper.asApi(pronostico)); + + } + + private void verificarSiElPartidoEstaBloqueado(long idPartido) { + Partido partido = this.getPartido(idPartido); + if (partido.isBloqueado()) { + throw new PartidoBloqueadoException(partido.getLocal().getCodigo(), partido.getVisitante().getCodigo()); + } + } + + @Override + @Transactional + public ApiResponse empate(long idPartido) { + verificarSiElPartidoEstaBloqueado(idPartido); + long idUsuario = this.userInfo.getUserId(); + Pronostico pronostico = this.getPronosticoOrCreatePronostico(idPartido, + idUsuario); + pronostico.empate(); + pronostico.setUsuario(this.userInfo.getUsuario().get()); + this.pronosticoRepository.save(pronostico); + return ok(this.pronosticoMapper.asApi(pronostico)); + } + + @Override + @Transactional + public ApiResponse visitante(long idPartido) { + verificarSiElPartidoEstaBloqueado(idPartido); + long idUsuario = this.userInfo.getUserId(); + Pronostico pronostico = this.getPronosticoOrCreatePronostico(idPartido, + idUsuario); + pronostico.visitante(); + pronostico.setUsuario(this.userInfo.getUsuario().get()); + this.pronosticoRepository.save(pronostico); + return ok(this.pronosticoMapper.asApi(pronostico)); + } + + private Pronostico getPronosticoOrCreatePronostico(long idPartido, + long idUsuario) { + return this.pronosticoRepository.findByPartidoAndUsuario(idPartido, + idUsuario).orElseGet(() -> { + Pronostico pronostico = new Pronostico(); + Partido partido = getPartido(idPartido); + pronostico.setPartido(partido); + Usuario usuario = getUsuario(idUsuario); + usuario.addPronostico(pronostico); + + this.pronosticoRepository.save(pronostico); + this.usuarioRepository.save(usuario); + return pronostico; + }); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/RankingServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/RankingServiceImpl.java new file mode 100644 index 0000000..a07c832 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/RankingServiceImpl.java @@ -0,0 +1,97 @@ +package io.semantic.openscore.core.services.impl; + +import static io.semantic.openscore.core.services.RestUtil.ok; +import static java.util.stream.Collectors.toList; + +import java.text.MessageFormat; +import java.util.Comparator; +import java.util.List; +import java.util.stream.IntStream; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.ranking.Ranking; +import io.semantic.openscore.core.model.Usuario; +import io.semantic.openscore.core.repository.PaisRepository; +import io.semantic.openscore.core.repository.UsuarioRepository; +import io.semantic.openscore.core.services.api.RankingService; + +@ApplicationScoped +public class RankingServiceImpl implements RankingService { + + private UsuarioRepository usuarioRepository; + private PaisRepository paisRepository; + + public RankingServiceImpl() { + } + + @Inject + public RankingServiceImpl(UsuarioRepository usuarioRepository, + PaisRepository paisRepository) { + this.usuarioRepository = usuarioRepository; + this.paisRepository = paisRepository; + } + + @Override + public ApiResponse getRanking(long id) { + List usuarios = this.usuarioRepository.findAll(); + List rankings = this.calcularRankings(usuarios); + Ranking ranking = rankings + .stream() + .filter(r -> r.getUsuario() == id) + .findAny() + .orElseThrow(() -> new IllegalArgumentException(MessageFormat + .format("El Usuario id {0} no se encuentra en el sistema", id))); + return ok(ranking); + } + + @Override + public ApiResponse> getAllRanking(String pais, int size) { + + + List usuarios; + + if (pais == null || pais.isEmpty()) { + usuarios = this.usuarioRepository.findAll(); + } else { + usuarios = this.usuarioRepository.findByCountry(pais); + } + + List rankings = calcularRankings(usuarios); + if (size > 0) { + int s = rankings.size(); + if (s > size) { + s = size; + } + return ok(rankings.subList(0, s)); + } else { + return ok(rankings); + } + } + + @Transactional + List calcularRankings(List usuarios) { + List rankings = usuarios.stream() + .map(usuario -> { + Ranking ranking = new Ranking(); + ranking.setNombre(usuario.getNombre() + " " + usuario.getApellido()); + ranking.setPais(usuario.getPais().getNombre()); + ranking.setUsuario(usuario.getId()); + ranking.setPuntos(usuario.getPuntos()); + return ranking; + }) + .sorted(Comparator.comparingInt(Ranking::getPuntos).reversed()) + .collect(toList()); + + return IntStream + .range(0, rankings.size()) + .mapToObj(i -> { + Ranking r = rankings.get(i); + r.setRanking(i + 1); + return r; + }).collect(toList()); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/UsuariosServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/UsuariosServiceImpl.java new file mode 100644 index 0000000..5933ff5 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/UsuariosServiceImpl.java @@ -0,0 +1,248 @@ +package io.semantic.openscore.core.services.impl; + +import static io.semantic.openscore.core.services.RestUtil.ok; +import static java.util.stream.Collectors.toList; + +import java.text.MessageFormat; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.StreamSupport; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Instance; +import javax.inject.Inject; +import javax.ws.rs.Path; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.semantic.openscore.core.api.ApiResponse; +import io.semantic.openscore.core.api.TokenDTO; +import io.semantic.openscore.core.api.usuarios.CrearUsuarioDTO; +import io.semantic.openscore.core.api.usuarios.LoginUsuarioDTO; +import io.semantic.openscore.core.api.usuarios.RecoverPassword; +import io.semantic.openscore.core.api.usuarios.UpdatePassword; +import io.semantic.openscore.core.api.usuarios.UpdateUsuarioDTO; +import io.semantic.openscore.core.api.usuarios.UsuarioDTO; +import io.semantic.openscore.core.cache.TokenCache; +import io.semantic.openscore.core.email.MailFactory; +import io.semantic.openscore.core.email.MailServer; +import io.semantic.openscore.core.logging.ServiceLogger; +import io.semantic.openscore.core.mapping.PaisMapper; +import io.semantic.openscore.core.mapping.UsuarioMapper; +import io.semantic.openscore.core.model.Pais; +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.model.Usuario; +import io.semantic.openscore.core.repository.Page; +import io.semantic.openscore.core.repository.PaisRepository; +import io.semantic.openscore.core.repository.UsuarioRepository; +import io.semantic.openscore.core.security.Secure; +import io.semantic.openscore.core.security.TokenGenerator; +import io.semantic.openscore.core.services.UserInfo; +import io.semantic.openscore.core.services.api.UsuariosService; +import io.semantic.openscore.core.validation.ApplicationValidator; +import io.semantic.openscore.core.validation.validators.EmailValidator; + +@Path("/usuarios") +@ApplicationScoped +public class UsuariosServiceImpl implements UsuariosService { + + private UserInfo userInfo; + private TokenCache tokenCache; + private MailServer mailSender; + private MailFactory mailFactory; + private List mailValidators; + private ServiceLogger serviceLogger; + private Logger logger = LoggerFactory.getLogger(UsuariosServiceImpl.class); + + private UsuarioRepository usuarioRepository; + private PaisRepository paisRepository; + private TokenGenerator tokenGenerator; + private ApplicationValidator validator; + private UsuarioMapper mapper; + private PaisMapper paisMapper; + + public UsuariosServiceImpl() { + } + + + @Inject + public UsuariosServiceImpl(UsuarioRepository usuarioRepository, + PaisRepository paisRepository, + TokenGenerator tokenGenerator, + ApplicationValidator appValidator, + UsuarioMapper mapper, + PaisMapper paisMapper, + UserInfo userInfo, + TokenCache tokenCache, + MailServer mailSender, + MailFactory mailFactory, + Instance mailValidators, + ServiceLogger serviceLogger) { + this.usuarioRepository = usuarioRepository; + this.paisRepository = paisRepository; + this.tokenGenerator = tokenGenerator; + this.validator = appValidator; + this.mapper = mapper; + this.paisMapper = paisMapper; + this.userInfo = userInfo; + this.tokenCache = tokenCache; + this.mailSender = mailSender; + this.mailFactory = mailFactory; + this.mailValidators = StreamSupport.stream(mailValidators.spliterator(), false).collect(toList()); + + this.serviceLogger = serviceLogger; + } + + + @Override + public ApiResponse registrarUsuario(CrearUsuarioDTO crearUsuario) { + return new ApiResponse<>(this.saveUser(crearUsuario)); + } + + @Override + public ApiResponse updateUsuario(long id, UpdateUsuarioDTO crearUsuario) { + if (this.userInfo.getUserId() == id) { + return new ApiResponse<>(new TokenDTO(this.tokenGenerator.generarToken(this.updateUser(id, crearUsuario)))); + } else { + throw new IllegalArgumentException("You are trying to modify an user that is not you"); + } + } + + private Usuario updateUser(long id, UpdateUsuarioDTO updateUsuario) { + this.validator.validate(updateUsuario); + Usuario usuario = this.findUsuario(id); + Pais pais = this.paisRepository.findByCodigo(updateUsuario.getPais()); + this.mapper.updateUsuario(updateUsuario, usuario); + usuario.setPais(pais); + this.usuarioRepository.save(usuario); + return usuario; + } + + + @Override + public ApiResponse recoverPassword(RecoverPassword updatePassword) { + this.validator.validate(updatePassword); + + this.tokenCache.getToken(updatePassword.getEmail()) + .map(x -> x.equals(updatePassword.getToken())) + .orElseThrow(() -> new IllegalArgumentException("No token was found to update password. Please try again")); + + Usuario user = this.usuarioRepository.findByEmail(updatePassword.getEmail()) + .orElseThrow(() -> new IllegalArgumentException(MessageFormat.format("User not found with email {0}. Please try again", + updatePassword.getEmail()))); + + user.setPassword(this.tokenGenerator.generarPassword(updatePassword.getPassword())); + this.usuarioRepository.save(user); + this.tokenCache.remove(user.getEmail()); + return ok(this.mapper.asApi(user)); + } + + @Override + public ApiResponse sendToken(String email) { + if (!this.usuarioRepository.exist(email)) { + throw new IllegalArgumentException(MessageFormat.format("User with email {0} does not exist in OpenScore", email)); + } + String token = this.tokenGenerator.generateRandomToken(); + this.tokenCache.add(email, token); + Map params = new HashMap<>(); + params.put("email", email); + params.put("token", token); + this.mailSender.send(this.mailFactory.getRecoverPasswordEmail(email, token)); + return ok(""); + } + + @Override + public ApiResponse updatePassword(UpdatePassword updatePassword) { + this.validator.validate(updatePassword); + long userId = this.userInfo.getUserId(); + + Usuario usuario = this.usuarioRepository.findById(userId).orElseThrow(() -> + new IllegalArgumentException("User is not logged in")); + + if (usuario.getPassword().equals(this.tokenGenerator.generarPassword(updatePassword.getOldPassword()))) { + usuario.setPassword(this.tokenGenerator.generarPassword(updatePassword.getPassword())); + this.usuarioRepository.save(usuario); + } else { + throw new IllegalArgumentException("Old password does not match"); + } + + return ok(this.mapper.asApi(usuario)); + } + + + private UsuarioDTO saveUser(CrearUsuarioDTO crearUsuario) { + this.validator.validate(crearUsuario); + Pais pais = this.paisRepository.findByCodigo(crearUsuario.getPais()); + Usuario usuario = this.mapper.asUsuario(crearUsuario); + usuario.setPassword(this.tokenGenerator.generarPassword(crearUsuario.getPassword())); + usuario.setRoles(new HashSet<>(Arrays.asList(Rol.USUARIO))); + usuario.setPais(pais); + this.usuarioRepository.save(usuario); + + UsuarioDTO usuarioDTO = this.mapper.asApi(usuario); + usuarioDTO.setPais(this.paisMapper.asApi(pais)); + + return usuarioDTO; + } + + @Override + @Secure + public ApiResponse deleteUsuario(long id) { + return null; + } + + @Override + public ApiResponse getUsuario(Long id) { + Usuario usuario = findUsuario(id); + UsuarioDTO usuarioDTO = this.mapper.asApi(usuario); + return new ApiResponse(usuarioDTO); + } + + private Usuario findUsuario(Long id) { + Optional usuarioOptional = this.usuarioRepository.findById(id); + return usuarioOptional.orElseThrow(() -> new IllegalArgumentException("User not found")); + } + + @Override + public ApiResponse getMiUsuario() { + return this.getUsuario(this.userInfo.getUserId()); + } + + public Usuario getUsuario(String email) { + Optional usuarioOptional = this.usuarioRepository.findByEmail(email); + return usuarioOptional.orElseThrow(() -> new IllegalArgumentException("User not found")); + } + + @Override + public ApiResponse login(LoginUsuarioDTO loginUsuario) { + Optional usuarioOptional = this.usuarioRepository.findByEmail(loginUsuario.getEmail().trim()); + Usuario usuario = usuarioOptional.orElseThrow(() -> new IllegalArgumentException("User or password not found")); + + TokenGenerator tokenGenerator = new TokenGenerator(); + + checkPassword(loginUsuario.getPassword(), usuario, tokenGenerator); + + UsuarioDTO usuarioDTO = this.mapper.asApi(usuario); + + TokenDTO tokenDTO = new TokenDTO(tokenGenerator.generarToken(usuario)); + + return new ApiResponse<>(tokenDTO); + } + + private void checkPassword(String password, Usuario usuario, TokenGenerator tokenGenerator) { + if (!usuario.getPassword().equals(tokenGenerator.generarPassword(password))) + throw new IllegalArgumentException("Invalid password"); + } + + @Override + public ApiResponse> getAll(int page, int pageSize, String filter) { + List usuarios = this.usuarioRepository.findAll(new Page(page, pageSize)); + List usuariosApi = this.mapper.asApi(usuarios); + return new ApiResponse<>(usuariosApi); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/template/TemplateEngine.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/template/TemplateEngine.java new file mode 100644 index 0000000..f44bb0b --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/template/TemplateEngine.java @@ -0,0 +1,35 @@ +package io.semantic.openscore.core.template; + +import com.mitchellbosecke.pebble.PebbleEngine; +import com.mitchellbosecke.pebble.template.PebbleTemplate; + +import javax.annotation.PostConstruct; +import javax.enterprise.context.ApplicationScoped; +import java.io.StringWriter; +import java.util.Map; + +@ApplicationScoped +public class TemplateEngine { + + private PebbleEngine engine; + + @PostConstruct + public void initialize() { + engine = new PebbleEngine.Builder().build(); + } + + public String evaluate(String templateName, Map params) { + try { + StringWriter stringWriter = new StringWriter(); + PebbleTemplate compiledTemplate = this.engine.getTemplate(buildTemplateName(templateName)); + compiledTemplate.evaluate(stringWriter, params); + return stringWriter.toString(); + } catch (Exception e) { + throw new TemplateEngineException("Can't process template", e); + } + } + + private String buildTemplateName(String templateName) { + return "templates/" + templateName + ".html"; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/template/TemplateEngineException.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/template/TemplateEngineException.java new file mode 100644 index 0000000..e41b77a --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/template/TemplateEngineException.java @@ -0,0 +1,9 @@ +package io.semantic.openscore.core.template; + +import io.semantic.openscore.core.exceptions.ApplicationException; + +public class TemplateEngineException extends ApplicationException { + public TemplateEngineException(String message, Throwable throwable) { + super(message, throwable); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/util/JsonConverter.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/util/JsonConverter.java new file mode 100644 index 0000000..d845462 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/util/JsonConverter.java @@ -0,0 +1,10 @@ +package io.semantic.openscore.core.util; + +public class JsonConverter { + +// private static final + + public static String toJson() { + return ""; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/ApplicationValidator.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/ApplicationValidator.java new file mode 100644 index 0000000..976df27 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/ApplicationValidator.java @@ -0,0 +1,41 @@ +package io.semantic.openscore.core.validation; + +import io.semantic.openscore.core.exceptions.ValidationException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.validation.ConstraintViolation; +import javax.validation.Validator; +import java.util.Set; + +@ApplicationScoped +public class ApplicationValidator { + + private Logger logger = LoggerFactory.getLogger(ApplicationValidator.class); + + private Validator validator; + + public ApplicationValidator() { + } + + @Inject + public ApplicationValidator(Validator validator) { + this.validator = validator; + } + + public void validate(Object object) { + try { + Set> errors = validator.validate(object); + if (!errors.isEmpty()) { + String message = ValidationException.generateMessage(errors); + logger.error(message); + throw new ValidationException(message, ValidationException.generateErrorsList(errors)); + } + } catch (javax.validation.ValidationException e) { + logger.error(e.getLocalizedMessage(), e); + throw new ValidationException(e.getMessage(), e); + } + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/annotations/Matches.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/annotations/Matches.java new file mode 100644 index 0000000..7d2b681 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/annotations/Matches.java @@ -0,0 +1,36 @@ +package io.semantic.openscore.core.validation.annotations; + +import io.semantic.openscore.core.validation.validators.MatchesValidator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Target({TYPE}) +@Retention(RUNTIME) +@Constraint(validatedBy = MatchesValidator.class) +@Documented +public @interface Matches { + + String message() default "{io.semantic.openscore.core.validation.Matches.message}"; + + Class[] groups() default {}; + + Class[] payload() default {}; + + String first(); + + String second(); + + @Target({TYPE}) + @Retention(RUNTIME) + @Documented + @interface List { + Matches[] value(); + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/annotations/Password.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/annotations/Password.java new file mode 100644 index 0000000..3c7010e --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/annotations/Password.java @@ -0,0 +1,26 @@ +package io.semantic.openscore.core.validation.annotations; + +import io.semantic.openscore.core.validation.validators.PasswordValidator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Target({FIELD}) +@Retention(RUNTIME) +@Constraint(validatedBy = PasswordValidator.class) +@Documented +public @interface Password { + + String message() default "{io.semantic.openscore.core.validation.Password.message}"; + + Class[] groups() default {}; + + Class[] payload() default {}; + +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/EmailValidator.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/EmailValidator.java new file mode 100644 index 0000000..1d27d0c --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/EmailValidator.java @@ -0,0 +1,6 @@ +package io.semantic.openscore.core.validation.validators; + +public interface EmailValidator { + + boolean validate(String mail); +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/MatchesValidator.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/MatchesValidator.java new file mode 100644 index 0000000..89f8d9d --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/MatchesValidator.java @@ -0,0 +1,47 @@ +package io.semantic.openscore.core.validation.validators; + +import io.semantic.openscore.core.validation.annotations.Matches; +import org.apache.commons.beanutils.BeanUtils; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.Objects; + +public class MatchesValidator implements ConstraintValidator { + private String first; + private String second; + + @Override + public void initialize(Matches matches) { + first = matches.first(); + second = matches.second(); + } + + @Override + public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) { + + boolean isValid = false; + + try { + String propert1 = BeanUtils.getProperty(object, first); + String propert2 = BeanUtils.getProperty(object, second); + + isValid = Objects.equals(propert1, propert2); + } catch (Exception e) { + isValid = false; + } finally { + + if (!isValid) { + constraintValidatorContext.disableDefaultConstraintViolation(); + constraintValidatorContext.buildConstraintViolationWithTemplate( + "{io.semantic.openscore.core.validation.Matches.message}" + ).addConstraintViolation(); + } + + + return isValid; + } + + + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/PasswordValidator.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/PasswordValidator.java new file mode 100644 index 0000000..38cb470 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/PasswordValidator.java @@ -0,0 +1,37 @@ +package io.semantic.openscore.core.validation.validators; + +import io.semantic.openscore.core.validation.annotations.Password; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PasswordValidator implements ConstraintValidator { + + + private static final String PASSWORD_PATTERN = "[\\w\\S]{6,30}"; + private Pattern pattern; + + @Override + public void initialize(Password password) { + pattern = Pattern.compile(PASSWORD_PATTERN); + } + + @Override + public boolean isValid(String passw, ConstraintValidatorContext constraintValidatorContext) { + + + Matcher matcher = pattern.matcher(passw); + boolean isValid = matcher.matches(); + + if (!isValid) { + constraintValidatorContext.disableDefaultConstraintViolation(); + constraintValidatorContext.buildConstraintViolationWithTemplate( + "{io.semantic.openscore.core.validation.Password.message}" + ).addConstraintViolation(); + } + + return isValid; + } +} diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/RedHatEmailValidator.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/RedHatEmailValidator.java new file mode 100644 index 0000000..a797a7d --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/validation/validators/RedHatEmailValidator.java @@ -0,0 +1,9 @@ +package io.semantic.openscore.core.validation.validators; + +public class RedHatEmailValidator implements EmailValidator { + + @Override + public boolean validate(String mail) { + return mail.endsWith("@redhat.com"); + } +} diff --git a/packages/openscore-core-quarkus/src/main/resources/ValidationMessages.properties b/packages/openscore-core-quarkus/src/main/resources/ValidationMessages.properties new file mode 100644 index 0000000..2679f5e --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/resources/ValidationMessages.properties @@ -0,0 +1,2 @@ +io.semantic.openscore.core.validation.Matches.message=Field {first} and {second} doesn't match +io.semantic.openscore.core.validation.Password.message=Password is not valid. It should have at least 6 characters and no space. \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/main/resources/application.properties b/packages/openscore-core-quarkus/src/main/resources/application.properties new file mode 100644 index 0000000..0bf3c62 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/resources/application.properties @@ -0,0 +1,7 @@ +quarkus.datasource.db-kind=postgresql +quarkus.datasource.username=postgres +quarkus.datasource.password=0p3nsc0r3 +quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/postgres +quarkus.datasource.jdbc.max-size=16 +quarkus.hibernate-orm.log.sql=true +quarkus.hibernate-orm.database.generation=drop-and-create diff --git a/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml b/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml new file mode 100644 index 0000000..19ef219 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml @@ -0,0 +1,141 @@ +--- +- local: BRA + visitante: VEN + grupo: GRUPO_A + lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA + dia: 13-06-2021T18:00-0300 + fecha: "1" + fase: GRUPO +- local: COL + visitante: ECU + grupo: GRUPO_A + lugar: CUIABÁ, ARENA PANTANAL + dia: 13-06-2021T21:00-0300 + fecha: "1" + fase: GRUPO +- local: ARG + visitante: CHL + grupo: GRUPO_B + lugar: RIO DE JANEIRO, ESTADIO OLIMPICO + dia: 14-06-2021T18:00-0300 + fecha: "1" + fase: GRUPO +- local: PRY + visitante: BOL + grupo: GRUPO_B + lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO + dia: 14-06-2021T21:00-0300 + fecha: "1" + fase: GRUPO +- local: COL + visitante: VEN + grupo: GRUPO_A + lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO + dia: 17-06-2021T18:00-0300 + fecha: "2" + fase: GRUPO +- local: BRA + visitante: PER + grupo: GRUPO_A + lugar: RIO DE JANEIRO, ESTADIO OLIMPICO + dia: 17-06-2021T21:00-0300 + fecha: "2" + fase: GRUPO +- local: CHL + visitante: BOL + grupo: GRUPO_B + lugar: CUIABÁ, ARENA PANTANAL + dia: 18-06-2021T18:00-0300 + fecha: "2" + fase: GRUPO +- local: ARG + visitante: URY + grupo: GRUPO_B + lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA + dia: 18-06-2021T21:00-0300 + fecha: "2" + fase: GRUPO +- local: VEN + visitante: ECU + grupo: GRUPO_A + lugar: RIO DE JANEIRO, ESTADIO OLIMPICO + dia: 20-06-2021T18:00-0300 + fecha: "3" + fase: GRUPO +- local: COL + visitante: PER + grupo: GRUPO_A + lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO + dia: 20-06-2021T21:00-0300 + fecha: "3" + fase: GRUPO +- local: URY + visitante: CHL + grupo: GRUPO_B + lugar: CUIABÁ, ARENA PANTANAL + dia: 21-06-2021T18:00-0300 + fecha: "3" + fase: GRUPO +- local: ARG + visitante: PRY + grupo: GRUPO_B + lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA + dia: 21-06-2021T21:00-0300 + fecha: "3" + fase: GRUPO +- local: ECU + visitante: PER + grupo: GRUPO_A + lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO + dia: 23-06-2021T18:00-0300 + fecha: "4" + fase: GRUPO +- local: BRA + visitante: COL + grupo: GRUPO_A + lugar: RIO DE JANEIRO, ESTADIO OLIMPICO + dia: 23-06-2021T21:00-0300 + fecha: "4" + fase: GRUPO +- local: BOL + visitante: URY + grupo: GRUPO_B + lugar: CUIABÁ, ARENA PANTANAL + dia: 24-06-2021T18:00-0300 + fecha: "4" + fase: GRUPO +- local: CHL + visitante: PRY + grupo: GRUPO_B + lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA + dia: 24-06-2021T21:00-0300 + fecha: "4" + fase: GRUPO +- local: BRA + visitante: ECU + grupo: GRUPO_A + lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO + dia: 27-06-2021T18:00-0300 + fecha: "5" + fase: GRUPO +- local: VEN + visitante: PER + grupo: GRUPO_A + lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA + dia: 27-06-2021T18:00-0300 + fecha: "5" + fase: GRUPO +- local: URY + visitante: PRY + grupo: GRUPO_B + lugar: RIO DE JANEIRO, ESTADIO OLIMPICO + dia: 28-06-2021T21:00-0300 + fecha: "5" + fase: GRUPO +- local: BOL + visitante: ARG + grupo: GRUPO_B + lugar: CUIABÁ, ARENA PANTANAL + dia: 28-06-2021T21:00-0300 + fecha: "5" + fase: GRUPO diff --git a/packages/openscore-core-quarkus/src/main/resources/data/preguntas.yml b/packages/openscore-core-quarkus/src/main/resources/data/preguntas.yml new file mode 100644 index 0000000..639fa5c --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/resources/data/preguntas.yml @@ -0,0 +1,7 @@ +--- +- codigo: PERRO + pregunta: What's the name of your first dog? +- codigo: MADRE + pregunta: What's your mother second name? +- codigo: EQUIPO + pregunta: What's you favorite sport team? diff --git a/packages/openscore-core-quarkus/src/main/resources/info.properties b/packages/openscore-core-quarkus/src/main/resources/info.properties new file mode 100644 index 0000000..111a51c --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/resources/info.properties @@ -0,0 +1,2 @@ +info.version=${project.version} +info.environment=${project.environment} diff --git a/packages/openscore-core-quarkus/src/main/resources/logback.xml b/packages/openscore-core-quarkus/src/main/resources/logback.xml new file mode 100644 index 0000000..9cf17f4 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/resources/logback.xml @@ -0,0 +1,21 @@ + + + + + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/main/resources/templates/recover.html b/packages/openscore-core-quarkus/src/main/resources/templates/recover.html new file mode 100644 index 0000000..29d8e82 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/resources/templates/recover.html @@ -0,0 +1,210 @@ + + + + + + + + +
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Empezá a palpitar el Mundial Rusia 2018 +
+ + + + + + + +
+ + + + + + + + + + + + + +
Predecí los resultados de los partidos con Red Hat OpenScore, la plataforma diseñada por red hatters para red hatters, que te permitirá vivir el minuto a minuto de la copa del mundo.
Acertá los resultados de los partidos y avanzá hacia la final para coronarte como el ganador del prode.
¡Podés ganar premios!
+
+
+ + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + https://openscore-ui-openscore.b9ad.pro-us-east-1.openshiftapps.com/#/pages/password?recover={{token}}&email={{email}} + + + + + +
Para participar tenés que ingresar a:
y crear tu usuario y contraseña.
Una vez en la plataforma podrás:
+
+ +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
01.
02.
03.
04.
05.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Consultar el fixture
del mundial
Conocer las reglas
Hacer las predicciones
para el próximo partido
Ver el ranking y en qué posición estás.
Leer las noticias
destacadas
+
+
+ +
El juego ya empezó.
Sé parte.
+ + + + + + + + + + + + + +
Red HatFacebook Linkedin Twitter Youtube
+ +
+
+
+
+ + \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/model/UsuarioTest.java b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/model/UsuarioTest.java new file mode 100644 index 0000000..1f41bec --- /dev/null +++ b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/model/UsuarioTest.java @@ -0,0 +1,69 @@ +package io.semantic.openscore.core.model; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.Arrays; +import java.util.HashSet; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class UsuarioTest { + + @Spy + private Usuario usuarioSinPronosticos; + + + @Spy + private Usuario usuario; + + @Mock + private Fase faseDeGrupos; + + + @Before + public void setUp() { + + when(faseDeGrupos.getPuntos()).thenReturn(1); + + Pronostico p1 = spy(new Pronostico()); + when(p1.isLocal()).thenReturn(true); + + Resultado resultado = new Resultado(); + + Partido partido = new Partido(); + partido.setFase(faseDeGrupos); + + resultado.setPartido(partido); + partido.setResultado(resultado); + + resultado.setLocal(1); + resultado.setVisitante(0); + + when(p1.getPartido()).thenReturn(partido); + + when(usuario.getPronosticos()).thenReturn(new HashSet<>(Arrays.asList(p1))); + + } + + + @Test + public void testCalcularPuntosSinPronostico() { + int puntos = usuarioSinPronosticos.getPuntos(); + assertEquals(0, puntos); + } + + @Test + public void testCalcularPuntosUnPartidoGanado() { + int puntos = usuario.getPuntos(); + assertEquals(1, puntos); + } + +} \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/PaisRepositoryTest.java b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/PaisRepositoryTest.java new file mode 100644 index 0000000..156ab83 --- /dev/null +++ b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/PaisRepositoryTest.java @@ -0,0 +1,33 @@ +package io.semantic.openscore.core.repository; + +import io.semantic.openscore.core.model.Pais; +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + + +class PaisRepositoryTest extends RepositoryBaseTest { + + private PaisRepository paisRepository; + + @Override + protected void beforeEach() { + paisRepository = new PaisRepository(entityManager); + } + + @Test + void testExistPais() { + + + assertFalse(this.paisRepository.exist("ARG")); + + Pais pais = new Pais(); + pais.setNombre("Argentina"); + pais.setCodigo("ARG"); + + transaction(() -> this.paisRepository.save(pais)); + assertTrue(this.paisRepository.exist("ARG")); + + } +} \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/RepositoryBaseTest.java b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/RepositoryBaseTest.java new file mode 100644 index 0000000..d4cf203 --- /dev/null +++ b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/RepositoryBaseTest.java @@ -0,0 +1,39 @@ +package io.semantic.openscore.core.repository; + + +import org.junit.Before; + +import javax.persistence.EntityManager; +import javax.persistence.EntityTransaction; +import javax.persistence.Persistence; +import java.util.function.Supplier; + +public abstract class RepositoryBaseTest { + + protected EntityManager entityManager; + + @Before + public void setUp() { + entityManager = Persistence + .createEntityManagerFactory("test") + .createEntityManager(); + beforeEach(); + } + + abstract protected void beforeEach(); + + protected void transaction(Runnable runnable) { + EntityTransaction tx = this.entityManager.getTransaction(); + tx.begin(); + runnable.run(); + tx.commit(); + } + + protected T transaction(Supplier runnable) { + EntityTransaction tx = this.entityManager.getTransaction(); + tx.begin(); + T result = runnable.get(); + tx.commit(); + return result; + } +} diff --git a/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/RepositoryTest.java b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/RepositoryTest.java new file mode 100644 index 0000000..c2cb9b5 --- /dev/null +++ b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/RepositoryTest.java @@ -0,0 +1,120 @@ +package io.semantic.openscore.core.repository; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.persistence.TypedQuery; +import java.util.List; +import java.util.Optional; + +import static org.junit.Assert.*; + + +class RepositoryTest extends RepositoryBaseTest { + + private Repository repository; + private Logger logger = LoggerFactory.getLogger(RepositoryTest.class); + + @Override + protected void beforeEach() { + this.repository = new TestRepository(entityManager); + } + + @Test + void testSaveElement() { + TestObject original = new TestObject(); + original.setName("OpenScore"); + + long id = transaction(() -> this.repository.save(original)); + + Optional testObject = this.repository.findById(id); + assertEquals(original.getName(), + testObject.get().getName()); + assertFalse(testObject.get().isDeleted()); + assertNotNull(testObject.get().getCreationDate()); + } + + + @Test + void testFindByQuery() { + TestObject original = new TestObject("OpenScore"); + transaction(() -> this.repository.save(original)); + TypedQuery query = this.repository.createQuery("from TestObject t where t.name = :name").setParameter("name", + "OpenScore"); + List elements = this.repository.findByQuery(query, + new Page(0, + 1)); + assertEquals(original.getName(), + elements.get(0).getName()); + } + + @Test + void testHardDeleteByQuery() { + TestObject original = new TestObject("OpenScore"); + transaction(() -> this.repository.save(original)); + TypedQuery query = this.repository.createQuery("from TestObject where name = :name").setParameter("name", + "OpenScore"); + assertEquals(1, + this.repository.findByQuery(query, + new Page(0, + 1)).size()); + transaction(() -> this.repository.hardDeleteByQuery(query)); + assertEquals(0, + this.repository.findByQuery(query, + new Page(0, + 1)).size()); + } + + @Test + void testHardDeleteById() { + TestObject original = new TestObject("OpenScore"); + long id = transaction(() -> this.repository.save(original)); + TypedQuery query = this.repository.createQuery("from TestObject where name = :name").setParameter("name", + "OpenScore"); + + assertEquals(1, + this.repository.findByQuery(query, + new Page(0, + 1)).size()); + + transaction(() -> this.repository.hardDeleteById(id)); + + assertEquals(0, + this.repository.findByQuery(query, + new Page(0, + 1)).size()); + } + + @Test + void testDeleteByQuery() { + TestObject original = new TestObject("OpenScore"); + long id = transaction(() -> this.repository.save(original)); + TypedQuery query = this.repository.createQuery("from TestObject where name = :name").setParameter("name", + "OpenScore"); + assertEquals(1, + this.repository.findByQuery(query, + new Page(0, + 1)).size()); + this.repository.deleteByQuery(query); + assertEquals(1, + this.repository.findByQuery(query, + new Page(0, + 1)).size()); + assertTrue(query.getSingleResult().isDeleted()); + } + + @Test + void testDeleteById() { + TestObject original = new TestObject("OpenScore"); + long id = transaction(() -> this.repository.save(original)); + TypedQuery query = this.repository.createQuery("from TestObject where name = :name").setParameter("name", + "OpenScore"); + assertEquals(1, + query.getResultList().size()); + this.repository.deleteById(id); + assertEquals(1, + query.getResultList().size()); + assertTrue(query.getSingleResult().isDeleted()); + } +} \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/TestObject.java b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/TestObject.java new file mode 100644 index 0000000..2e7a305 --- /dev/null +++ b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/TestObject.java @@ -0,0 +1,26 @@ +package io.semantic.openscore.core.repository; + +import javax.persistence.Entity; + +import io.semantic.openscore.core.model.Storable; + +@Entity +public class TestObject extends Storable { + + private String name; + + public TestObject() { + } + + public TestObject(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/TestRepository.java b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/TestRepository.java new file mode 100644 index 0000000..8924647 --- /dev/null +++ b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/TestRepository.java @@ -0,0 +1,19 @@ +package io.semantic.openscore.core.repository; + +import javax.enterprise.context.ApplicationScoped; +import javax.persistence.EntityManager; + +@ApplicationScoped +public class TestRepository extends Repository { + + public TestRepository(EntityManager entityManager) { + super(TestObject.class, + entityManager); + } + + @Override + public boolean exist(TestObject entity) { + return false; + } + +} diff --git a/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/UsuarioRepositoryTest.java b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/UsuarioRepositoryTest.java new file mode 100644 index 0000000..fc5389b --- /dev/null +++ b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/repository/UsuarioRepositoryTest.java @@ -0,0 +1,49 @@ +package io.semantic.openscore.core.repository; + +import io.semantic.openscore.core.model.Pais; +import io.semantic.openscore.core.model.Usuario; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Optional; + +import static org.junit.Assert.assertEquals; + +public class UsuarioRepositoryTest extends RepositoryBaseTest { + + private UsuarioRepository repository; + private Logger logger = LoggerFactory.getLogger(RepositoryTest.class); + + @Test + public void testFindByEmail() { + String email = "john.frusciante@gmail.com"; + + Usuario newUser = new Usuario(); + + newUser.setNombre("John"); + newUser.setApellido("Frusciante"); + newUser.setEmail(email); + newUser.setPassword("anthony_kiedis"); + + Pais pais = new Pais(); + pais.setNombre("Argentina"); + pais.setCodigo("ARG"); + + PaisRepository paisRepository = new PaisRepository(this.entityManager); + transaction(() -> paisRepository.save(pais)); + + newUser.setPais(pais); + + transaction(() -> this.repository.save(newUser)); + + Optional user = this.repository.findByEmail(email); + + assertEquals(email, user.get().getEmail()); + } + + @Override + protected void beforeEach() { + this.repository = new UsuarioRepository(this.entityManager); + } +} \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/security/GenerateToken.java b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/security/GenerateToken.java new file mode 100644 index 0000000..89f8122 --- /dev/null +++ b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/security/GenerateToken.java @@ -0,0 +1,27 @@ +package io.semantic.openscore.core.security; + +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.model.Usuario; + +import java.util.Arrays; +import java.util.HashSet; + +public class GenerateToken { + + public static void main(String[] args) { + TokenGenerator tokenGenerator = new TokenGenerator(); + Usuario usuario = crearUsuario(tokenGenerator); + String token = tokenGenerator.generarToken(usuario); + System.out.println(token); + } + + public static Usuario crearUsuario(TokenGenerator tokenGenerator) { + Usuario usuario = new Usuario(); + usuario.setRoles(new HashSet<>(Arrays.asList(Rol.ADMIN, Rol.USUARIO))); + usuario.setEmail("admin@admin.com"); + usuario.setApellido("Admin"); + usuario.setNombre("Admin"); + usuario.setPassword(tokenGenerator.generarPassword("admin")); + return usuario; + } +} diff --git a/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/security/TokenGeneratorTest.java b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/security/TokenGeneratorTest.java new file mode 100644 index 0000000..ebf6092 --- /dev/null +++ b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/security/TokenGeneratorTest.java @@ -0,0 +1,57 @@ +package io.semantic.openscore.core.security; + +import java.text.ParseException; + +import com.google.common.collect.Sets; +import com.nimbusds.jwt.SignedJWT; +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.model.Usuario; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class TokenGeneratorTest { + + private TokenGenerator tokenGenerator; + + @Before + public void setUp() { + this.tokenGenerator = new TokenGenerator(); + } + + @Test + public void testCrearToken() throws ParseException { + String nombre = "Lionel"; + String apellido = "Messi"; + String email = "lionel.messi@gmail.com"; + String username = "lmessi"; + + Usuario usuario = new Usuario(); + usuario.setNombre(nombre); + usuario.setApellido(apellido); + usuario.setEmail(email); + usuario.setRoles(Sets.newHashSet(Rol.ADMIN, + Rol.USUARIO)); + String token = this.tokenGenerator.generarToken(usuario); + + SignedJWT signedJWT = SignedJWT.parse(token); + + assertEquals(nombre, + signedJWT.getJWTClaimsSet().getStringClaim(TokenGenerator.NOMBRE)); + assertEquals(apellido, + signedJWT.getJWTClaimsSet().getStringClaim(TokenGenerator.APELLIDO)); + assertEquals(email, + signedJWT.getJWTClaimsSet().getStringClaim(TokenGenerator.EMAIL)); + assertNotNull(signedJWT.getJWTClaimsSet().getExpirationTime().getTime()); + assertTrue(signedJWT.getJWTClaimsSet().getStringListClaim(TokenGenerator.ROLES).contains(Rol.ADMIN.toString())); + } + + @Test + public void testCrearPassword() { + + String password = this.tokenGenerator.generarPassword("123"); + assertEquals(64, + password.length()); + } +} \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/services/impl/UsuariosServiceImplTest.java b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/services/impl/UsuariosServiceImplTest.java new file mode 100644 index 0000000..7455547 --- /dev/null +++ b/packages/openscore-core-quarkus/src/test/java/io/semantic/openscore/core/services/impl/UsuariosServiceImplTest.java @@ -0,0 +1,149 @@ +package io.semantic.openscore.core.services.impl; + +import io.semantic.openscore.core.api.usuarios.CrearUsuarioDTO; +import io.semantic.openscore.core.cache.TokenCache; +import io.semantic.openscore.core.email.MailFactory; +import io.semantic.openscore.core.email.MailProvider; +import io.semantic.openscore.core.email.MailServer; +import io.semantic.openscore.core.exceptions.ValidationException; +import io.semantic.openscore.core.logging.ServiceLogger; +import io.semantic.openscore.core.mapping.PaisMapper; +import io.semantic.openscore.core.mapping.UsuarioMapper; +import io.semantic.openscore.core.model.Pais; +import io.semantic.openscore.core.model.Rol; +import io.semantic.openscore.core.model.Usuario; +import io.semantic.openscore.core.repository.PaisRepository; +import io.semantic.openscore.core.repository.UsuarioRepository; +import io.semantic.openscore.core.security.TokenGenerator; +import io.semantic.openscore.core.services.UserInfo; +import io.semantic.openscore.core.services.api.UsuariosService; +import io.semantic.openscore.core.validation.ApplicationValidator; +import io.semantic.openscore.core.validation.validators.EmailValidator; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mapstruct.factory.Mappers; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import javax.enterprise.inject.Instance; +import javax.validation.Validation; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + + +@RunWith(MockitoJUnitRunner.class) +public class UsuariosServiceImplTest { + + + private static final String APELLIDO = "Hendrix"; + private static final String NOMBRE = "Jimi"; + private static final String EMAIL = "jimi@hendrix.com"; + private static final String PAIS = "ARG"; + private static final String PASSWORD = "1234!56"; + + @Mock + private UsuarioRepository usuarioRepository; + + @Mock + private PaisRepository paisRepository; + + private UsuariosService usuariosService; + + @Captor + private ArgumentCaptor usuarioCaptor; + + private Pais pais; + + private TokenGenerator tokenGenerator; + + @Mock + Instance emailValidators; + + @Before + public void setUp() { + + tokenGenerator = new TokenGenerator(); + pais = new Pais("ARG", "Argentina"); + usuariosService = new UsuariosServiceImpl(usuarioRepository, + paisRepository, + tokenGenerator, + new ApplicationValidator(Validation.buildDefaultValidatorFactory().getValidator()), + Mappers.getMapper(UsuarioMapper.class), + Mappers.getMapper(PaisMapper.class), + mock(UserInfo.class), + mock(TokenCache.class), + mock(MailServer.class), + mock(MailFactory.class), + emailValidators, + mock(ServiceLogger.class)); + when(paisRepository.findByCodigo(eq(pais.getCodigo()))).thenReturn(pais); + } + + @Test + public void testSeGuardaUnUsuarioCorrecto() { + CrearUsuarioDTO crearUsuarioDTO = new CrearUsuarioDTO(); + crearUsuarioDTO.setApellido(APELLIDO); + crearUsuarioDTO.setNombre(NOMBRE); + crearUsuarioDTO.setEmail(EMAIL); + crearUsuarioDTO.setConfirmacionEmail(EMAIL); + crearUsuarioDTO.setPassword(PASSWORD); + crearUsuarioDTO.setConfirmacionPassword(PASSWORD); + crearUsuarioDTO.setPais(PAIS); + this.usuariosService.registrarUsuario(crearUsuarioDTO); + verify(usuarioRepository, times(1)).save(usuarioCaptor.capture()); + + assertEquals(NOMBRE, usuarioCaptor.getValue().getNombre()); + assertEquals(APELLIDO, usuarioCaptor.getValue().getApellido()); + assertEquals(EMAIL, usuarioCaptor.getValue().getEmail()); + assertEquals(this.tokenGenerator.generarPassword(PASSWORD), usuarioCaptor.getValue().getPassword()); + assertTrue(usuarioCaptor.getValue().getRoles().contains(Rol.USUARIO)); + assertEquals(new Pais(PAIS, "Argentina"), usuarioCaptor.getValue().getPais()); + + } + + @Test(expected = ValidationException.class) + public void testProblemaAlConfirmarEmail() { + CrearUsuarioDTO crearUsuarioDTO = new CrearUsuarioDTO(); + crearUsuarioDTO.setApellido(APELLIDO); + crearUsuarioDTO.setNombre(NOMBRE); + crearUsuarioDTO.setEmail(EMAIL); + crearUsuarioDTO.setConfirmacionEmail(EMAIL + "IMPOSIBLE_CONFIRMAR"); + crearUsuarioDTO.setPassword(PASSWORD); + crearUsuarioDTO.setConfirmacionPassword(PASSWORD); + crearUsuarioDTO.setPais(PAIS); + this.usuariosService.registrarUsuario(crearUsuarioDTO); + } + + @Test(expected = ValidationException.class) + public void testProblemaAlConfirmarPassword() { + CrearUsuarioDTO crearUsuarioDTO = new CrearUsuarioDTO(); + crearUsuarioDTO.setApellido(APELLIDO); + crearUsuarioDTO.setNombre(NOMBRE); + crearUsuarioDTO.setEmail(EMAIL); + crearUsuarioDTO.setConfirmacionEmail(EMAIL); + crearUsuarioDTO.setPassword(PASSWORD); + crearUsuarioDTO.setConfirmacionPassword(PASSWORD + "IMPOSIBLE_CONFIRMAR"); + crearUsuarioDTO.setPais(PAIS); + this.usuariosService.registrarUsuario(crearUsuarioDTO); + } + + @Test(expected = ValidationException.class) + public void testProblemaAlValidarUsuarioNoNulo() { + CrearUsuarioDTO crearUsuarioDTO = new CrearUsuarioDTO(); + crearUsuarioDTO.setApellido(APELLIDO); + crearUsuarioDTO.setNombre(""); + crearUsuarioDTO.setEmail(EMAIL); + crearUsuarioDTO.setConfirmacionEmail(EMAIL); + crearUsuarioDTO.setPassword(PASSWORD); + crearUsuarioDTO.setConfirmacionPassword(PASSWORD + "IMPOSIBLE_CONFIRMAR"); + crearUsuarioDTO.setPais(PAIS); + this.usuariosService.registrarUsuario(crearUsuarioDTO); + } + +} \ No newline at end of file From f6e09b85d84cb60e5efa05069ce3c8334ecb9ae0 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Fri, 30 Sep 2022 14:27:25 -0300 Subject: [PATCH 02/28] Os 71 (#76) * [OS-71] - Se agrega la primera parte de los cambios en la UI * Se agrega otra tanda de pantallas * Se agrega una version de forecast que me gusta --- package.json | 2 +- packages/openscore-nextjs/.eslintrc.json | 3 + packages/openscore-nextjs/.gitignore | 36 + packages/openscore-nextjs/README.md | 34 + .../components/EmptyScreen.tsx | 24 + .../components/LoadingScreen.tsx | 23 + .../openscore-nextjs/components/MatchCard.tsx | 43 + .../openscore-nextjs/components/Navbar.tsx | 95 + .../components/layout/MainLayout.tsx | 13 + .../openscore-nextjs/components/soccer.svg | 1 + .../openscore-nextjs/images/logo-white.png | Bin 0 -> 9787 bytes packages/openscore-nextjs/images/messi.webp | Bin 0 -> 44954 bytes packages/openscore-nextjs/next.config.js | 10 + packages/openscore-nextjs/package.json | 28 + packages/openscore-nextjs/pages/404.tsx | 11 + packages/openscore-nextjs/pages/_app.tsx | 23 + .../openscore-nextjs/pages/admin/matches.tsx | 15 + packages/openscore-nextjs/pages/api/hello.ts | 13 + packages/openscore-nextjs/pages/dashboard.tsx | 96 + .../openscore-nextjs/pages/forecast/index.tsx | 65 + packages/openscore-nextjs/pages/index.tsx | 16 + .../openscore-nextjs/pages/leaderboard.tsx | 79 + packages/openscore-nextjs/pages/login.tsx | 90 + packages/openscore-nextjs/pages/register.tsx | 11 + packages/openscore-nextjs/pages/rules.tsx | 75 + packages/openscore-nextjs/public/favicon.ico | Bin 0 -> 25931 bytes .../openscore-nextjs/public/logo-black.png | Bin 0 -> 9648 bytes packages/openscore-nextjs/public/vercel.svg | 4 + packages/openscore-nextjs/routes.ts | 19 + .../styles/components/_empty_screen.scss | 7 + .../styles/components/_forecast.scss | 13 + .../styles/components/_leaderboard.scss | 62 + .../styles/components/_loading_screen.scss | 8 + .../styles/components/_login.scss | 48 + .../styles/components/_match.scss | 34 + packages/openscore-nextjs/styles/main.scss | 50 + packages/openscore-nextjs/tsconfig.json | 20 + packages/openscore-ui/package-lock.json | 13444 ---------------- .../{package.json => packagen.json} | 0 .../pronostico/pronostico.component.html | 66 +- .../pronosticos/pronosticos.component.html | 80 +- packages/openscore-ui/yarn.lock | 9124 ----------- yarn.lock | 1962 +++ 43 files changed, 3145 insertions(+), 22602 deletions(-) create mode 100644 packages/openscore-nextjs/.eslintrc.json create mode 100644 packages/openscore-nextjs/.gitignore create mode 100644 packages/openscore-nextjs/README.md create mode 100644 packages/openscore-nextjs/components/EmptyScreen.tsx create mode 100644 packages/openscore-nextjs/components/LoadingScreen.tsx create mode 100644 packages/openscore-nextjs/components/MatchCard.tsx create mode 100644 packages/openscore-nextjs/components/Navbar.tsx create mode 100644 packages/openscore-nextjs/components/layout/MainLayout.tsx create mode 100644 packages/openscore-nextjs/components/soccer.svg create mode 100644 packages/openscore-nextjs/images/logo-white.png create mode 100644 packages/openscore-nextjs/images/messi.webp create mode 100644 packages/openscore-nextjs/next.config.js create mode 100644 packages/openscore-nextjs/package.json create mode 100644 packages/openscore-nextjs/pages/404.tsx create mode 100644 packages/openscore-nextjs/pages/_app.tsx create mode 100644 packages/openscore-nextjs/pages/admin/matches.tsx create mode 100644 packages/openscore-nextjs/pages/api/hello.ts create mode 100644 packages/openscore-nextjs/pages/dashboard.tsx create mode 100644 packages/openscore-nextjs/pages/forecast/index.tsx create mode 100644 packages/openscore-nextjs/pages/index.tsx create mode 100644 packages/openscore-nextjs/pages/leaderboard.tsx create mode 100644 packages/openscore-nextjs/pages/login.tsx create mode 100644 packages/openscore-nextjs/pages/register.tsx create mode 100644 packages/openscore-nextjs/pages/rules.tsx create mode 100644 packages/openscore-nextjs/public/favicon.ico create mode 100644 packages/openscore-nextjs/public/logo-black.png create mode 100644 packages/openscore-nextjs/public/vercel.svg create mode 100644 packages/openscore-nextjs/routes.ts create mode 100644 packages/openscore-nextjs/styles/components/_empty_screen.scss create mode 100644 packages/openscore-nextjs/styles/components/_forecast.scss create mode 100644 packages/openscore-nextjs/styles/components/_leaderboard.scss create mode 100644 packages/openscore-nextjs/styles/components/_loading_screen.scss create mode 100644 packages/openscore-nextjs/styles/components/_login.scss create mode 100644 packages/openscore-nextjs/styles/components/_match.scss create mode 100644 packages/openscore-nextjs/styles/main.scss create mode 100644 packages/openscore-nextjs/tsconfig.json delete mode 100644 packages/openscore-ui/package-lock.json rename packages/openscore-ui/{package.json => packagen.json} (100%) delete mode 100644 packages/openscore-ui/yarn.lock create mode 100644 yarn.lock diff --git a/package.json b/package.json index 7570034..d8fc5c7 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@openscore", + "name": "openscore", "version": "1.0.0", "main": "index.js", "repository": "", diff --git a/packages/openscore-nextjs/.eslintrc.json b/packages/openscore-nextjs/.eslintrc.json new file mode 100644 index 0000000..bffb357 --- /dev/null +++ b/packages/openscore-nextjs/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/packages/openscore-nextjs/.gitignore b/packages/openscore-nextjs/.gitignore new file mode 100644 index 0000000..c87c9b3 --- /dev/null +++ b/packages/openscore-nextjs/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/packages/openscore-nextjs/README.md b/packages/openscore-nextjs/README.md new file mode 100644 index 0000000..c87e042 --- /dev/null +++ b/packages/openscore-nextjs/README.md @@ -0,0 +1,34 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. + +[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. + +The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/packages/openscore-nextjs/components/EmptyScreen.tsx b/packages/openscore-nextjs/components/EmptyScreen.tsx new file mode 100644 index 0000000..9e448de --- /dev/null +++ b/packages/openscore-nextjs/components/EmptyScreen.tsx @@ -0,0 +1,24 @@ +import Image from "next/image"; +import soccer from "./soccer.svg"; + +export interface EmptyScreenProps { + title?: string; + description?: string; +} + +const getDefaultTitle = (title?: string) => + title ? title : "Wow, so much emptiness..."; +const getDefaultDescription = (description?: string) => + description + ? description + : "Don't worry we will check if VAR is working correctly"; + +const EmptyScreen = ({ title, description }: EmptyScreenProps) => ( +
+

{getDefaultTitle(title)}

+

{getDefaultDescription(description)}

+ +
+); + +export default EmptyScreen; diff --git a/packages/openscore-nextjs/components/LoadingScreen.tsx b/packages/openscore-nextjs/components/LoadingScreen.tsx new file mode 100644 index 0000000..e204a15 --- /dev/null +++ b/packages/openscore-nextjs/components/LoadingScreen.tsx @@ -0,0 +1,23 @@ +import { PropsWithChildren, ReactNode } from "react"; + +export interface LoadingScreenProps extends PropsWithChildren { + busy: boolean; +} + +const LoadingScreen = ({ busy, children }: LoadingScreenProps): JSX.Element => { + if (busy) { + return ( +
+
+
+ Loading... +
+
+
+ ); + } else { + return <>{children}; + } +}; + +export default LoadingScreen; diff --git a/packages/openscore-nextjs/components/MatchCard.tsx b/packages/openscore-nextjs/components/MatchCard.tsx new file mode 100644 index 0000000..bc7f9f4 --- /dev/null +++ b/packages/openscore-nextjs/components/MatchCard.tsx @@ -0,0 +1,43 @@ +const TeamFlag = ({ src }: { src: string }) => ( +
+ +
+); + +const MatchCard = () => ( +
+
+
+
FIFA World Cup - Qatar 2022
+
Round Robin 1 of 3
+
+ +
3 : 1
+ +
Argentina
+
36'
+
Brasil
+
+ +
+
+
+); + +export default MatchCard; diff --git a/packages/openscore-nextjs/components/Navbar.tsx b/packages/openscore-nextjs/components/Navbar.tsx new file mode 100644 index 0000000..2503359 --- /dev/null +++ b/packages/openscore-nextjs/components/Navbar.tsx @@ -0,0 +1,95 @@ +import Image from "next/image"; +import Link from "next/link"; +import { useRouter } from "next/router"; +import routes, { Route } from "../routes"; +import logo from "../images/logo-white.png"; + +const NavItem = ({ route }: { route: Route }) => { + const router = useRouter(); + return ( +
  • + + + {route.name} + + +
  • + ); +}; + +const NavDropdown = ({ route }: { route: Route }) => ( +
  • + +
      + {route.items?.map((item) => ( + + ))} +
    +
  • +); + +const NavDropdownItem = ({ route }: { route: Route }) => ( +
  • + + + {route.name} + + +
  • +); + +const getNavItem = (route: Route) => { + if (route.items) { + return ; + } else { + return ; + } +}; + +const Navbar = () => ( + +); + +export default Navbar; diff --git a/packages/openscore-nextjs/components/layout/MainLayout.tsx b/packages/openscore-nextjs/components/layout/MainLayout.tsx new file mode 100644 index 0000000..d904e09 --- /dev/null +++ b/packages/openscore-nextjs/components/layout/MainLayout.tsx @@ -0,0 +1,13 @@ +import { PropsWithChildren, ReactElement } from "react"; +import Navbar from "../Navbar"; + +const MainLayout = ({ children }: PropsWithChildren) => ( +
    + +
    {children}
    +
    +); + +export const layout = (page: ReactElement) => {page}; + +export default MainLayout; diff --git a/packages/openscore-nextjs/components/soccer.svg b/packages/openscore-nextjs/components/soccer.svg new file mode 100644 index 0000000..6370d38 --- /dev/null +++ b/packages/openscore-nextjs/components/soccer.svg @@ -0,0 +1 @@ +game day \ No newline at end of file diff --git a/packages/openscore-nextjs/images/logo-white.png b/packages/openscore-nextjs/images/logo-white.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2b2f6b76f058037f2c700170206b69f8e1811d GIT binary patch literal 9787 zcmeHtWl&r}vo-{W#U)sPc&2@oJy zxclC^Rp0-w?$3K_>eT6}?x%aY=FFTk{lsc%D&gZ&!6^ZL6Of0Y&7JZ z1ebCY1?7dbmb$J2Qhffu>;E$F|C@oUi97=29P0Pd(FCK2&!#?0hxDN_ivdZo)f}Uf zy!Az1zKtvIU;O#!>EGQ}vo8-|@Zstk?#N*&Kh2keUmfq+FX6&et%UohO|{DxrkxY^ zMYpm&Q)I--_jYH~7*%`q3?Kdq5>#){O(saaP)h#})8W%t#R@yO=w;N(5pex@(p}8; zX81Z~zJMG;I}@BG0X;Hz3EzoXY5cm~o(CSymycq~SRZq9ual`X3S?cf`8?zlV4_-* z`_9knM_WbwoTpV+<|e{WF`^-P((4@&3JTMJioA@jU+!7nofVk^#pnljg4z%d_T&i^ zlEK0ks9y_dFBnJ|qTI0k2-tBkwaJK3iHGrH82qYZir9~jk9T5EkB`s$S_QJsk1B5~ zE6uOHYy);49);&2-@lKxnSZaU)K41Z1N?XU`2HWr`kQx4E!rT!<=TC5#HJATwwFwKBGwqYOdPL@cqIl|< zH8|O+HOj#X#vdLl_&KAxWraNvG6G-)*}zIcLU8h`1S){F$?M3RI8_+F+er#!WZ~_w zOJ;dKN(#g}{ngCK>#78}E2vcQ{o)g`H6pIP1G71G1ZZ_k)kc4C%<>}*l3*ydi-Lm$ zUEs~H8x(+|r}&Rds7Wx0BYj@S{d%W9DD`bbJ=rb+8PYv-YG`L+^UDT)HT;kd1xTCM zM}Tzvf$Ks+n~ReKq|8Va=}=Lo&e7!8Wm^p@`C=2#-Q!bB9*z-R@;qKM6UGAX09Z+`{yT&qr%0=VT^LwC7XV_6ICQt`G z;aiO)(U_lPFAyrLFV+%r&>W8s&pXgEz}EfdBVtpjb3FFd#@@MPgRT$k(cCsl=HA?= zmv#SkGcKEM&uXCnkQibwMQ0Kk_ZwIXqX2Wn0v4_JVFxZfXE&MCdCE4^SykQiHCG2B z3!N@wiX;lcsc_}5i)nX3^8ZK|d zxHT~GnD4pJWwNX;Sx-!Qa4?-kfA6Ihp|vdiy-VH%XxxpsERxV4)lQUeh;mp3!*d)= zm&6A*GV%KZUKV8PwziJnH+G$WDx_0+Z__rsZm?u>a?D!b#hUsZz>Bp@!O!PTy{o-E ziE0`sBoI(krxKQF?JYp&mpjs2I)?}aNwqZ)wFe6f5H!6PVAXIH=C&N z4obzvrlr+^)|Qn#@1z<5fR3#XcJa-waqT=~+o)Xp$e7 zn1=tM`S)er`5SMocVw#En4D#H8KtaE0Qi7yO!4salL?eCYcqe+IcG9I<)$V@kB#w7 zb^GDk>raxxy<2~rR$8Cj?T!|gI=|wCQKqdbLT$j9YPIdPPw8#due(EF8j;VSTA&QfVO8?>(8~-399l%JW~C?$O_?N$)rA_DS2>8I1+{V} zY}O%Wgbr=Szhds9YIK%AOnx{YMy)X^Vyu~JHsRF}foiu)Ta3w)m?_o5}{I1S*E&RYv#yoS?MsMhn_>_H1Wf5Ye$4uw|`M>X9jC|OJtftRZ)e4@wvH>LgI zn-9by+9Buug;AC>=pIKX45-;Rs#virH}VL>mt+52g8)`uylXWq9tpJxBr zRP-W7uzF+8U;C`60By=UK~LpXfyq~m)1=s|aGsz?$GV+mVdtNcLN$5LSKxEn^C!c0 zGp_P|f!wpp8~j6c_}Wi%1Jg2Sf`Ukfm^LMtB9uQ~9m-qWxy<$6pLjq0zz~N};=1?t zXP7U!CnJYDz6~!Jf38#~wQr%j!Z!xqZS#B9KaT2sbeeWpEf)NrW;Z90`k+GY8^z`h zP8sGJ+e^V^oer$)D3k7s{9Rw)oZM%MO#5t~P|G%r1)OoW0cI6ML4s&lS8)cHKbrC*`@0&e^896)^#tTojbkbk7R{`|!Z?%i%7V$PbX z;`l8BP-))6AFm3XtgtCC+W$zg|8i6B$nw_rHcDf5<8y688R=V#0F8L@2gMX69mBrF zjUvLI*`spD?+SqgqilusR`7;P_`;tq-Q}olNr5lWuKS3&#OKyO)3)rtGIWyI!k9FV zZ8Bt>UT+#3rkTTqr$Kq!HnBgTW<#M-}FqCZtN=jyru#;OM32^U984SGO z2HuVpRx4eg1o{cIYtNsx6J)8}Wy*8!Hlty`T=iy@K=$#JNvc0^a&CJgHncqY0$q2$ z!c$7p-a9sErpwHPpZQV!W%8dR1BE zyMF-_4dsDyl3(>sn6y&04;jaR4{!d~{;8b${q{QlA38`FED)gn0wY(KZIv&IF4V(X zD`VnkbLKDNcn7PjF_GTi2|#`5#TK>)df`<6c;akYg=}xgUA+XpxiV*?bPIAIo7J9)Av$GL)kofPgt_^ za)n)|3mj*}oFQ61Q4L<*T&6+^Xd&iaQj`z{Lm=~zzDeKEMVRYj%W?<%&vaj2r&h_g zxzS>B1#q0uXF)TqBrbta)_4a6m)_fj5{{aM zjqf}QF;H%h|B!{ynwd*B)0&)VXg9h(a9EE>t^D65;`h7So;%S1`~y`(_X2*Rttly2 zz}okVUE$G*RK%kO&EgYhmrFrlwXqh0A8H3H8&SDET`Q+ui_#$an&|4AD)}j?xtbor zPQS`exUt=llrrYUYNbuz_&F%C3c4;9b>co*( za(Xu`hBzYFDG-HhkbOJ_L7)U~m7tI);fqL?-Ubisx2N>Kfw1LzD?WMAb^tAy+vf$p zTf`@R9Ycwv146d<=W-nX;QoQ2n(3YF0V?wKX2xeQ!zu()#62^jT7|0%%qfi7?xRiv zsd-mg>J*vCn0u~b7AJ<{o}j?X#wZgJQG>u9+9INbyWdYALqEv8|o1Eh$E(_-Fd9MIUsvHXy?{#07(mZ|<*TzvZR`d=^!}*CawrB<|_$nT$y*yo?{H#k58eKs(5*ZY(#HrM8 zkkxp#8}gSn?AAIX_igzEz?8X?MGzlL`Jh@`_~@X+?!=WBDRfNa!KKmWe02H=nV@vcyKgQGh(dZl{Ps!&YDUBtQiFSW6R z6h!#1l;|G&M&A%-D^1C2NM_IIY=mpygPbmvfvkc1$3V{Kx+io&wK2(x$9Lf6T@T<{ z)q$v^EjqPeVGm9^%$xiVMtr~1eOmn(`vhGm5S#;QKUd+T_ctmHCfmTV%yPQ-XkDyZ zsWE>~4O3KW#_oq+eH{nTwYsFRny8)L?evctNznmKM@A5vZ&%`CLzWxk6vicuHy4z2 z50ws^Lqe^NL!|t!e2>8!SX12cf6+wfGzhqxFv;9jBS@rR20x}tNlupPGL}s30-1Sq zaej12B7TTVSFVq6l~L)Trpmyi_5Gqh##DfQC|~ZOmuv2EX1dh$T>&(p7Dq|iP=#z> z$@fN|AXLhfxCAD+y{S(jPPTtILg5rx3j>Ku6D6alt|}(3-l)`0ru5KLqb!wJON{VI zFLYZO=~CPR&mx2w7E7+zb2)cP)ZZIX3K*=tQND}Twll+qR8)FRj@SoA&sTzB^Um$# zOm3ImXPiW_1I{m0)Q(F^R5_lyeGm)e4l4smGJF}T*Nd$Ujs=DnkJi4UHbP_i7r6LC zS8osfa0>E!hnyDu*|AeGS%D#kLv&qJ?5OS^aW;a7S<|04{hA@)FoLofwFgMc6k%?xdo}l#K=IX+}PSZXD&dTB*F1QJ}|K= za(5NHeYt)uJIy3NvNRjjF6|Gv*@zje&m$Sfb8*1pdla}tPsJB%b@OjR`cz3|wq3Ef z*|$6dNjebBvb_#7+4}m}xV`|kV3^p{=Iq@%6%gxB+c5e!8#15zf+Kk0RLHnBNx9H zX5nWp*>=Qb^_LOVpc!6cgMT8qx4V^_sfBPrbB+_F6^meFlK1&J`ms)%=LO$mBgfgt z{gSZcfyCz=ajDFaOvfwxTl<FWOWafxF!d^v&k__&F zA($@<{78NFc~M$ycLn%>Xum2&X6?!T=Cq$<)NTu&b>h6a>-B_HG`f3Kntz9XOH*Tf zpw=m5EGTl~CjA2H-q^6Y{X)!st9Zd@r|Cc^yh6BO9QcCOU}n(f!?!yt9je^DZQ-oK zhZ|o{4!Yk-*-VmQ9nP}oZYzmc@lMUJc$oHezL8L(80$$YywDZKHyt92UlaY)v!}#d z2}mOL*W}_05ADQh`jl&4460Y^YC&u%Et?ME7Jqzp;u%7_chcBk|4mL(hDPMtovYdv zldAlYk)qBE$V`!cR}F=s%${xZ5||G6jrnh<*Smoob_Roq$ac83&^8^6Z*3EGg*BgU z)kZ*p(n?gr3zwnz&WwU27bD^Bx$8qfhx+T_2tgaY^--ND=899Fz*k1R7%0QqVP{M` zgP5UMz+O;&?}Vg5Nv;$tY(Qw-3=1$(Wahv%gq3hvFjpR7Dr)%&&287a22vk4AIwRD zGn-lfV(eT#E1aYu2I@R$+bgw1PcyF6#=o^&m*9ggMB`(YauPrH8`*;sKtc?C;>226 z-ddQHZ-yV}r-;7?^h38I2!aF%05!22raOsPwU0mv8^cRxi+gK%=M9EfTuw)lLeQFk zTFsZ{ndq;S8XSK_?Fnf{o_^Qh7~EgN&q~LZg@9;Ve#-_nTb zg&z+eP@kp2b1UDuYzYe+HS|55 z)i7f=e&c$$e1K_q_V}p*EOYiyjNSvBM7b50xG{1u+R&70dC>xD<|ty3@5>^nL#dY8 zir*74E~^ZbDfs-0X7RT^St(+sm!72)z-S%+rflWit4J*@XX@)8gt;1R15)T%b54CN z|M76`|B+5-=qFDTX8SybuP8vu1=pG#M&xAL7p({PH{R!F zWxZt~g9O$oTYnAt%MxtKT3Mhp1M+WXvnogsG^`o+CIH3(_zA>Ds2d~mnvYO)f!N5wCPLZ+9! zOHUIV^d#1p>(rI_S&9RMd9=HqszHa(Gu07vXB~bU+OJ^s38T*YC=KhwJw{my)u6$h zKc#rTOh0t&B~u0juRd|kV)~Hl8W$9LFGzj$kuo`CJP+1;G5(AZn5_UiYgpY&krXR0 zMQowS#ZJ8hdj4B-dZ_zaGCoc2Qj?YqkRsvL3w$N8WkbK*PR{G3I1AKxEdG3!$%LMVYHi-1C{hWSq9XW8G{9V9o}a$5 zc#Wz_5=E(dAd1J$+rMjSYP@a)1?u0vm#CU!8Nz{mveU&Zvh@Rc-h{!yq0RkyM{50f zLik?TJnFPZ11RUD#&D+$2kK9BPeX`$s|me}cDel5WDOM)cloX1pe;0K|5hNl&TEY# zcedQIE*UIo4F}myVsx!={*3-(XEd2P`B~Z0L=i3Z!by}9CYAvq_4hInBqQ^gwpCrJ z57kL62mSPY*ibg>@rO#K10||CY`A(Z7MZv!Fohr)wUDgcKqu`xipi08uV?#PvM2k0 zUA?)EZ+q9Ez|nrui5*9`OHM#82z*e~{- zHywGR_2NQuKGA+!H5!f8&D!Pq%iVrV?gRV@fYj?`^===D`sT8d^OFMt#+8uUi>A5? zRCD^-E;xp&jNISuoyEk+iz%N3j|aV-z@#1o?N8gU9hbg2t!X@#Z%6Z2YydsFWtE99 zcELzw+3ih1K?k3LDipdK+bI5yNz_%Ik2Gr`Mxp8H-$n;3Cfup>1)OmW4z&99#QM-P zhh967Hk@qAl;>9&idoiyY>8K(cp=5=dfOmy=Dmgpp>M!8w# z6DU$EYnRrfP*UUWKtt&4LU+KgSa&8t_weoe%J@C%Is~olxW|=Aa>p-c#$R< z^;Gp*fVb+x0QM= z{Q^?HxRNooQ@;}UU&~fje+$|S!`Z$Y*?-19PP&VT*^{X=jydBbscU44bbiihD_VDK z-ph7*daNl3E)$ZvMs1M$Ze43^) zYa_k#eJQ5BSIb1L{}AIFcglY0l)|Y$RRx9_JS_~fO|1!(_Eb3r>=N<@bw8;NG@ehj z4vyQJ9G+(epBxc>%oT{D{9dU%7)wK8L*Lg_Q+$2e>Cf9&==xq!=BoWUuq|k}n(8OP zMK?SBw-@RS-R!CDzrNIcCLtk+b>!g*c*- z1Yi@9g1#*R(*SD84^N;<8~Rb%ggl`&buxgegJP$b=>jqt1gk-;SrK%ZNri_Fb&-$} zW->JvUCdmKb`@EQSK0SkRBpIAN>P~up`{dSdU?wqDK%}r3sV|G)!#ShggLr~<+4J^ zOfirka05fy&m4HR6P3bHq}XA=9%_g9O4)R*K~SO;KtF9>A2??3h?=VNl zSNsY!X1HM*Sz^a2VOOnd#ULn;i)n%U^L1A+f1_wU5jd_&rg z8i_{)@sZRF0A_`n1&HCPzaN=mQW;`tOg&S&YLJaqXgFbfUL$HOUNn-n5uWJ9abHjN zvHb@gO=f>Q_5TKc<8C~e5y=#>r2Ky^HuV_|8ZpJou$2^tB<8&GQZVoWyV`j9T6#cH oq@BE7EZr>aUA%bRTx_|mT&8> ziDyd;%YHV_Y>MYUq<4ZV;i_;SlRV0YOMl=0@A1m>5AnXhAI$%*`b|g`=4YGJkh!mC zp`b~xI;!IRKQmrM^e!-2y#dS8`jGys=&$LM)%TnqGHpH&NDiA^e_w|G@bm5Rp2dGR z`~MRMdhk>58ghG&{b$5q-CQrdZxJuEa zUk`dQ_s+pBq1CUK@12j|J4o?WEZFW@PEpzgiD77n4M>Y(`CaB1O3i8SOI)5P+ZmP` zkahY~O3HE3T}mRXtCBg&?uO^$;^LTmQZ{bRi46T3K|4!|p;t)=Is^`2Z`*oQ>5xb0 zmg_-ubT~bm^WD+AC<7O7%_V!RA_T2B=u6%}hz-K+`Ok1yeIX|nHyS&qqHTr>tv|k- zB+CYHycgcAMw!P%@yiL!a?&D9U6=f{C$$c&uM0*3TCWV zn_vs)bah#Z^460Tg_wC901^HH7zS)(CM&1@!hxqHZoxz|97Rle$``(On>O0;m&+pY zS%KFRXvq@^HSSv>QbKgusIYzJeCR3avOQ_BAlYfxdb2b;Q@|kCGDkJ2H;Y|WHYp!; zEHyoMCP?Zi#=02_d`bUFOmDP`Bs1Qnfa<6_%;ME(*S zCau*f)$Zw4L+$V>0)sTw$HioFqtQ|Rt$J_JeCIir+iLFa`-$6w-2Z>KlQv|HWM`2P zunX*4YWIYJDNiDMb zb^YSU>j%i=Gx+o_L-fS?(%_xT4ANRLHKc23uO8veCmHij`@8Kz7 zP_(r@*E@UvV+n9ag3z3-!P!$n+)rD1Sk7sKlG`;k@eDdo`fp`d$#L%3?3*Pm5sx%= z@u91SHm6sG+Lw(7oQE}BX1_-FH6ho7VNVoa1w=%lkKcM!6+3d&t>Y~Z@(C)adz zLtPrGp0DlutXNnuSjqH-d$0p85#tru;1be&cOsS- zObN&TFL$P9UgN$q{kqZIy2TZB= zB}9T`G0g5qI~!tsyoIM^5`jHT1r02}#gC*C*ny@Zl0GZii5^_Ght`ZP(_wDx!CnYG zOgz~zXW@nVl03K4TX;i0H<4`t?fI$mjtrnS+_FXcV^(6*PWZwLnUhiQMG2OsCJdeNNROj*6d9XRm*0-&-alE|-7k`oJ_}Vd&7g2Ij#PmFjl)s4A!M%mi zsY`t!iq$E$5Faibf9gGES;CVWlvj;k&%WplIexlyAdt)v&09MRllyoqFhV@;Dg??M z)vssmC>zG?Wj%iP=W&N$DG3SCGZWhfBBgSTHBR*T&XHLxv$Fo(vOU z{Ijfi1`@zDu23b`jo(PEe0R~z=fOT+QhXe9ifBbboxr(x@t`H?t$MA%Wo8sd*Tt#; zdQ~6;)vpJccBpbZY0Gds^)!obh%GR&T#(M|(uhii&1Dodkj!n340C$L_NyRlFHD=% zW;AFx*B}bJEcplX@-~ZniAtAPyV+WBa&fZx{%bpmJFV6^-FyCv#VUSYG+~gDYxXCK zfz>qRc>@8DVRky+%V9V(mnyjf6_1Pcr;mK)jE3X5^lLkY`r)*a=ywJAc*T+mHyP); zq3*r*j(^CLXK=i_D7Fu7ts)SzW#2TO98=TcKWYt)0uBD?eqJTc`ZSJx=6Zz5qFS0% z!?BPba?>qa>k2p9XT3L)Vwp5j(Z2#gO3j25ToJ7Ap=P^_e1di@lU3g<)!mRq0h2q0{A}6F5>;SXWL7CZAe&5;wks(W2CvizjfaNe%*a?c*K@rA zmwAZOk4w7(!%L;peJI<+?$w|E1qKO?LZYyK+CYJBGh|XQcOj_tMkG3fwfx?S-40QSrW2}$-PbPVYx zHO+WI=N47AKTwQUw$p-GAa&*S699W=qU##-0R-wUjW~3#{ZEGtW1p z;$?C}&xbZP$D)(dUO=p@f1+3LPuA!po_da!(+B3!$xn-F(&l$Vm>mxB`S?LT(#j_R zQn(tht8Z}*j-Nw?X<~gth)Rg(L0t8K@`mIKBV5vR^CFx^lUW-74tpM-fKr+@r@t)4 zt$az`c{Cc9>{Rj(NZl~{9z8(nmT7>~%ECBjsFKY}@+Zs+vk9nfWZ>%p-l8`c9KB+C zR;At;x)Nk8Frh`>%>u*N)+}$(m^oL+iec#h^tyE zs-~6Hfg?j`;I8#(ieSNT({Y#UjJSK~88^S{dp*kl2aPksIp(3XL2C}2%~7#gloNq2 z`)-cLQLQ&N$BVB4Bte{j9C-zk3fVu;CS;hPI}5K!JLzN^v3uk|CrWj9a$iy`U*6D{lgQ>W(ttg;)WiQ zs}Sp?jThGNe4Bw=J1%kASKT$@v7^=rIeH@3Z$>+sca0fU&)S8Ca?|2eQ*e}t1v-@+ zgy~_jYib`LTck|#H^9oNdQoE#b*&8*5s*k{>jTfiyh8l>=h+u`+wddPj@z1ld_Vq$ z^9~1b{T#q9S#SE=;;NxZ*P`0!WC587>aA4Fpt-}`s!(SL5so#nwO-o?kV5SoNFFDx z&2b=HnHPSOm+V&ml zPFOD*H}8njJnxv56mq^aQfq|pMIMdZCLC}#cz$SSVp8;ahK&DvFS$ufDB<01C z%JCtr>GPd{dPh_4UOy#D8v+4TqezlO2{>d9pIe1r(|+_dwEYS= zs>po01-=&*WBO%jk?LA_N(uFwi7Wh3Z(*|9Rb&U3*U~0V>+xnGDhSx@oJm%;vttCl z?W9bT-@U^r!ssg5VAB#7BP)`&s9M6WAZ9Dj&!z!niu@}J!iyO?Uwf++!Ot}J8Nh;N z=tpw&vCb`tdnUKmyoAUCV6v;oA87qX77*oKDo}1~dqWy>OzId1H*A4Jt6wt8bfG=B zIqW4zWrV{GOsu;cb{6fNaLnTAHb7s7eLFjfWE*)RX>ADEwa$9*oz|Gw#X##6p%PC} z`N(e}@pPU1Qi2~*1D%;#NV&M-wf>j1-<0t+d)R95Dh_LN4C#W8;^~jyKA~J3PT2C% z3uHgEE->}$-Chh?kdb9vQmQvxrUEJgvYL!;LX!iNo{p;u4vE(&({s&+)3UUY|GiFCNN-jL6 zRSMc-_TXN|T)L;78BuX)8OhTrb!dU>;@s}#w@!`4c{_(GguiQ4LFTS?nF^u1UX#&Z zSeJCsVESToU)~o`?>Y|}W7>oaK_ps#aZq(@u-Q+Llw22pM^XbUOIIEdV*(#s93{#_$oo{7rNsQx~ueD7yt_pV%4t!xoPcyV~d?A0;U1w&a^Un5A?YhI3S zeH8}QRZIJGqDz!bXJ}FvghvVS|IL*!<_@-`cu_@nrDn!wc#jaoq>!sL>V6pydG|rtI2#%16RlOV*zSGxL<)6% z6dj*|<@*S2sCTK6F5@Gt18;x%m%|70?8mfYaiN#=yPh52^&8DaN=xTagk?)Rik+!h zh6v?7P1-;!L9NEo{shZhV=f$5t2X)Rpe`_yjgK3V`%~xl&d2vrnzj<8E^y!6`P15b zeSU}S(tT^qYMOr6j;;o}gxjV}86R^6BVD3MIAf>_DBJf-rL6mp(E;f|=^w-+8Q+dG zpkt&e@V~H|JnUXD!qp!TFab0Rm`R-*U3F$B=emq5LJ|0L2NSJhOnX!3-(o>EojXoN zu}5Zhunm*MkEzEj7ajc~V1`D>-Z(EW%lmEU<#+!aU=I(i!odv2Oq4y=K| zx@cmd-QySA5e^M}J?^RNb-JQ={Rd2ioCNeYWcNSIr9K2*qlcFuRarmNIs3zU36ym^ zBMJQr%vExoVA6^^XSQ6XZ3x00Ob^gN62Sqag4NRuuvipiXmAFAcZ6C>c{g^+2{&FD z%(G?jBMjZB@C8y!y#_~Yys=MbhbXcsuyM>3g{OH-T|RyHLD?jr?0xgG`|qv%2Xtf) zD8~c8N*v~5!M$8eAj-WFO-nYHs@3rbKa69UQw1E5B=zW(g&HKgk06xChLJ0Zi8w}! zy#o3v=^^{8jj#)L9WPXyt_0JGl$s=icVAINoe2jMaq{$X90Pi)tj$cxwGT!m@q30W zraXZH?^?rAsbAe<@MQ#orL77(&;FI^ zMv7*?%KQC>sjpL%jl9yhj-xK{smuL8&$xp`;1Gg)?;;-51wSg;kj@%ve@NiL*++>* zu%>?O@DGWMR^lIU$5fTE&J$OB?FZO%TITw2Hbm)FF?MQ};xtpRVgwpNTX`B1QXpby z!!>>2$e0RKjp-x4*XRJQ-zmO=IZ;HlBY+`e8HuLUrzcG+NTQGoxn4oAkV5LXYi#c0-UJQ(6ggsfxi@8Oh`;z~ss$jwtzWeuNY8GB{b`~lWj`t^e5 z9ZmIGHxk|dizR2^S@de^la0#$G!uUJFzAlT;!KY8*?~g+80LXR?lrtgTLVPK!f**? z4enQ}V-hP;S&3dw3e%pOBw(TYL^c&U-JI$)1nu#)ssh%|rZ~2s8eEQG=wuUkiEv-U zA#rU_)Yr%;y5cb<5 zwg$!LdDQYy492!K^SVi3L+&Vd+$D4(K2G=(~_Nv`7AG7=rZcC`P zsg<}YW0u{-zppehaZ<>hsl^0}d}vZ!ZC>g*%zgDGZ8f^+c7o4dPIt3D9%3#Qm4E`W z%Y(zSm>yY6E`oQ(uxdg2Jun=qNkl~QrCl`~@%MNY74ROC+E#FAY2JsYIJAl**%LO# z&e3(8-uv3}>b7W~a)zj~_(o6g$SqJ_OUV(JyDM}}_rfKnO8ijYP4M`wgmF{%-w5%~ z`M-6FrnI+OyGI$|=J2F(Eh0n#4U7H3CqlPQD|qIotV`|Jo=S_>J} z5e*Q9n4K?_IH7zs@yhp{{IBz=*-$wWU6?QWUr=BF{p=Unp(8w0C}V!@BqW@r?jF&l)SxhgDY58~XRsb2Yu1sRM2>`oS&@4+qhz==23Icw4%APl=QmZwsm zZ2!k4;m1_MB0&2I>nytk7$iya+id}^L9zYB?sZk&3*QrlLhabJkp`qsg;e$QIYkdL z2n=tL&{7X0Q$s}A&-|EUfcE76;Q{7E(mlU#ydPi}uCt!tF&KYaCI9eL`N#s_*&9@l zd>o1Dy@fOzleYfEvT0ATd_{1n{5N2QPhvzGpz?1Odj?pDhZnw2^{LQQlDku_3zb`}6Z<9XK#8uq!$<>+HloG?p8$dril9zNBx`nuz`xSRK8Yn(4e$EJcpZN< z$)Y6kak9ky-p|KM38aMjn{k_vz(1?CZ3=;-tZXbhp}S1s^VuOv*O_9I!%RKpd}an$ zbQL}QcKUk#yu;k5>I5I<`>W>wZ|qc2gAH_`ZX^S&_;<`Il43;T_q2qVA#-;mguZ9> zp>i{_U%inG2dH4Q_PIYExJ%MIku=d}0=sKL?74Gml=X8~n&cMHs?I4OK$7^Z-D{SL1OSq+U;nH-%%dTuIOEwLrh?_62uP8u{AY-XN;G0}JIbY&szTy@ojJxJDU!+j0@legdw9}p`xvk(xz*8dP|$B8UxfG8WVz2-H2D`ilDII zM`jw}QsAf8D>a(fx-uW1jBr%#2@>FQW|aBHk=ucRw#COu(rK0pB{vV1HX*Qc|BHC@ zZ3MahxQN(dQLYl)9&%i`(|p)bgvN1kw`24sXjACKB-B@K5moTKim+)ZPrwQXjaAVA zB~CyqJCt$b?D5C`9nK`{N<}2j>jyUL>+^QJL_jFR%E6(=h9@1cHL~qW*S;B0LoC{a zXHuyzIr#KW=%~9{Pri9MU;s3mOYeY?5eW>Ks;bB?5D8K}t7Dhkkb*_>(y6gqIAj!m z;%KIEnJrIUy&?f`ot%Amb`)=03IkIHQwq_C0gl(Ojce!o1~3 z-C5mg!0A%%2w2HY?>vl(t+Jhqy@Tb6-=b_J(Rwa`7(@F-n|g>qW4G>wU+kicii)i4 z%;yg$M$8B$D$a~Gv1C&Rn#L5O1(BRu?h*iy9B>Y8)L(Oi%`AmPI@gQ2>aZ3q1jq+V z;prajp(~ibGYfd>(TK4zJsl|nBRFS6apdAiSboik@O}VuzX~@zGR&|HW=e}9mymjh zhV#Itq=?ZGkruS>N=*U*EJ*CI$80kAw=SG>$EL96| zD4?aTMOM{%P&=)6ItABfBWv~pd-)Na+W&Gucd3LVF!}(XWzw~*K}&kS4xbq2Gllj1 zS2jqws2ep2euJ^F1=DBeRI~R1P_y0bO~@|(CF$q}RXT$hYHdN%>k$3Pc`dh>C`EG*lA4 zI{QP{j(a^zX{jEv6SqDdM@+>O zs+p=wGKZalEFBXI7Iw7`8@@0$rj>Wcn96?i%=ab7FDoHU+|_+L&V(!?h0viK5ZyGF zFLMo?iV-pyn5y?yA{yN+PO-K_3+Z{tlBlAuOR~xd6!jx=a_@43GZ?`P+CR-9=u_xES7%a)&u9f-LW2UB?0hvZq)!r*q2jVZq@vomG~6|U+`D3%zBA1=zB@Dudl zdRrT7$kVidD_RS5+Nzo~=qTIfiq+ffl?xHfOTgjE_6;UDQA}AnPUd^v7^%{iehB(H zJd$u$4=MkkzxkDo29`W{Pwok!pRo7^{m^y*)o;q{mbwc(FJII|WQ>o^Y%|t@)A&qtB|{Y4}M5U<8b6rBZ%+j`M#wPk;Jkti_e5!ZVk3D8@9~K$<@5ekDhagX5WWY=pzUd)emZ;vz&IxOUjt+^fvV$e1ix zE7aV!x$-FLC9hZ9MgyjRdRB;*=sWz1m6%FGa-F+!4;JXaWxGzF_gW`VmFxVWJxxB% zf?AFAZ0v4L`ta4d6_{U%+8-)T!+a>qBiY@*|V2KnZs2I9O&n4o`0J!_=)-A})x zk8^t{bynjV?0Yl#Ue3K}QbabQscF$ozzX5_<7%_SCNwRDR{a*Y5fi{lHi?g``w^BuK+@oKNS7H4c5s|pA?+u;IOdIg^rUaU8&=Yg;VLayi@54= z^w<6`WCoXiytk8s_q3LEdUj)L{uRDxGl6EnkeWi&N0ewA>6(LX$b--k z0TFcNBmi{IAT7B-@yCK^1O(sTpvjNbb02=Ng43w7(qx7Y+?3-`H)56qoZHoR#%BTN z#o&#35fhodRo#%vLEaz)2VwL+-9Z`ZRHi#QT0{wdjwJfxZ%IXWyfyhyoa=$w zrV2j8fJw(hhAz}bIk#vZLGmKg3E8qdDj^Bfs29Bi%T6o_pb;L@M@{iVQ@M>)iVluf z!q-R91dj)K$%9JCXP*#(esF-vX{#1Fl#K-}`=CDaZ2I|((S(3Mu7Xm{2Y^3mMqh*B z%tz{bjjtSahUg5b_OSrGeX z;8!r^RmxCqZ)sTJ4#ZlG(N*PP$At4B$ThM?9s2K;PqLgCKUew71z~usG4t1B^x}|d zHXQdcoae2Jh*P4oPj4ZiB#XlKi~k593I2&DtoU>{g>7!j87>K&l97Cu%?%M@O>$1GZG5Y`-biRe<{~vs!2>d-@DXV>f!%`L%Ov3JF|2Gp|=kr6J1O zk+V0C`+yKn9Kx}beHNbmvU@yU1#XZwRVeWj4<@DhPqMSRx1W^5bY0kLze!(q&r7b7 z7%+`v$hDB668Sy6mlNo#%WlJ96>)B&-w?3Bp4FI7g&9~{!!;taj=&|bsh_1h?~#li z044_*S+hd|_v+hv=)aFVY_(BI^vb^OIFV~RM@>i}YkO_rtiFTd-P-sLcN`O2g?<@WnQvEd*W{d!3l9+Ma*L0Bn5ksupSrO* z@%V67t=b9W63eRod3Urz#&?1sg)L8kP4yW#`%o*;)u0D@pA+2DQE(5~ZOhFrFNB&B zfdp)Qv&`8VEGhxaqQJ-{MPYW~04h2HpqWkl$1^}8RmBs^ID0=q+5jYC#=_4(6)-=En?(_0Lk#^uW!*vKEed^@hTJ z394i!c)h!;bhwWZjfcLs0QqSv%jYBVbOqn&WS6~(UnmyInGDf+#RyER|72caj5(rS zP;!FBD32(zH)dskbc_YOS+O1|_&_yrAOLO+Gkx)_T_%7G| zhvNsL9Kc>pmJNNSR&?}4%lmBA$67_>uDEtlR><#$+3hs|%WTlFF0YeX#ftSRsk!&CUeUN#1l01gsD-=6uyn4nV*GV0=PwDO?~Xcy>|l@mkd0X`5Y9JBL*^X?0dNt&SJLKhzQPNX1-@` z@D~rU9dV7%&+jEkwSB_W`Ctc@D7FkKIL!4DWSU7G`$wfqXBV0iZ56hV*F-KosHWgFoS#b(pHYi9wbZRV%V)Ehbq##OVRy!(bjQ!Xh!$ z$c!XgcTS?yK*~WY45JtgnvnR6@PsODGy=JWY>RgXAktV&`y3hah0NPA z8V~M`MBra}4-TCs2;Gg1bD@Icp{ov3nAhdQt&d;dI@h_->8aNl_XM(vwtEA1t?59F>JX!bQ=k;;>Uw+F<|$i!R&dp`Z2Qf z+IQndL!aqVy1(;W<7$tI+Y>8fpRG3I_&<~*)qmttVuOk;OwZAVYQ;@oR$0&nGc7Yh zS|RQ*(I$L3)eqk#D^6DqP8B%zR0V9e3?u>zdeXbOky!3;)5UTn{65YRs2_|t+ylvz zCN@+%wL6n31#|J+G5!8D7s37Dzd?7Qe2>r+b+ghEWYgV5lq>MQNV{)5F z8&qIjMhy|fyW3?_T{HLxz$n31thIBmCX{kL_Q&ytF8=v>VM@jf1Q^%fur6%TsDu$< z$<`2b9@am0i<0uy*T8<~gM;DIm;SrDV~h-@I7Ua6#xp8wm4Rp>8uH6 zavBRNfzqI>I#qf33km76?if46RYjMhq{F{@A0)nJ96B&3&iGI%wrqvJo%ZjSN`lp` zi-}#FV-ZLMB@ATZvv%SV<7xl%4xEkS{S~vo{(u1x;Uzian;?6Koa`N@> zH9?Iqeu{%WGEWgMb1v7zrt(*1nKf5i0lrkkd6bdRm75XLRK}#&rrq_1H`a02ieN6ake$323-hmopeapwJ7?qc8)2 zk9*szQnd*kSk({x6StQK=&9o!HdE6{YG(6_y3%QC4KpxQ;@70Jg#}5gg^t2t24vj2~*0{7mR1_giFOJ(OCy-{lHWS!rldSnkMa@6hS%#Y;7RUAq%QI zV47F4n1AC+R|+fX)VLJlU^Lp4DNpd${#XBpgbGPx;30V8$G2K?$E$ye;U;K~Kx zE`k(x2mmKBB>;^xzhuV%zF~W!jE8>ON|rf<55@jbsrU@a6@>p5GKUkdcA+d#_u>fM zHq+!oH%H4O`t$OGI`{unC27RsrxijAsTY2Fd5wyiYJ{Jl zd*AX?VdoDZSb@vSM~Mx3K54(jwFl&MtK8c_YPA9RGo*2?;bU1JRuS%vr~Gz2!hkB6 zQNYnQbc3y|j$CPOW?eSoAw58FLrO{iMiZT{TwH2)PR2e_W?`96+#LLOGuS$WA zbBfph2Z3^(qiQ?BlRi87=mtU4V8j1Axgc%FVTY91^CfQ|QuCQnF~DQWnhI2EvK8vF zaInIDL$^Bu6~!B6zcA{yBwO^6Rv|P%!l!EY({dY=9(=beU-yGw5=L@L#)cZLu9Yfl zc%7Q_nJN30KC*G@3_3a{nZqDbo%YDPmO0bl^^idL`Vp}Tjn)D- z#d2Ttq<60h6?Xu{poN{K80S69*-Y9r>#3xMT}Y}9kHzy0N&m`~|Uco29^VJ=z~ zXetl@0!{%ku}j5_#5TkU>|g63)+FY889Z6wg&Wgm* zS6bs|;raf1roDwb9_Ri5&|asg9807og33#x3lcstPm{@uzQEg86FEnHumJgB$5Cp# zp2r&tR@(-s5G7~%>h_Uy=t4pHeSgZPViGXMka}P1r^D_5+^JZJS<~(~Q^teK#%@DO zQPc&}h;3V+?^Y?8@mJ!OW2@PcM$9odl0pd}1cLz7qIGCcKq1{1BfvG~FA(#JfGzq7 zh?a)MPy|Zg`-{3y7kL@E<6*w0<;^~W&VLX}N&hcpw;Mr$kX^#Uq8ZXw(|)@Kodo48X;;m z2V3lA8P(C_NqO^9AyFYQ9~iI6AE$ho_}(FcW)^CD_T?SrNA{E%f--e36c8-D?Jj@q zPaQM74t`m8=Ked&eea$FzRBT$o*ORJi;l@lQnm%M;CLEUXDe0!=_p$muWFpTd3A^oK;%;cYBA?vEXX0}DAYCg(wb=rx`ZRv(!cANi&$MJ>}swc1j*R9ksrV|XQaMtn}Syd)RU$*{$ z7E3rM3?Uw9OC_YbGnBykErdra7C+KQNn@YAg!d9E549~P4vchR04Wj-)4qIeExT*B zElw@Z74a=;PS7~+6fx2bka`;woH@crqNyYml}G}GzKEjzZD5}V_TAwC0ynkOO9g9z z;FZW50)h=hl6~PGa?Q0NF2<3?|B5 zP73U5W!V$5AkWqm=3% zXH$Iie#L2GL>GJ{fu=T9U{i^;k< zsNQq^IXbv0j=ZPQp|)dY$wcuMOvTb(JvZUCawrGEoT zJH_L+l^)FunMO5jE1^3Hqt$)Wh%+*MASjoyEgfzO;u(<^lsd{}Ke-D4z)-~% zpy~l|Sj(Lp9a=Y^)~*s@{la#LTpeqFlO;}o1Vz{Y34&Sq@pb&ee5PeXYWf)8TPOf> zBW02hgCt>H1f_C`Z`)YSwnW@@GqA`C2I?E44i$+id0T>5nA86KB%0=L%e!I~feeVy zJUeeX4O2yviT5vqLdU?cYpJh0J?Kt2iP~OXjpYTc&1Kos1Kx6sXDM)1UTMc9i5^WM zx8F1_qoRlcq{SftE#4Zy_4*2D23@T%QDGgf)9tToTUUtmp2aowerd$60Hx(ASzx(z z9u^l(q;GZe32Sfx_?(H;T;w%ggq+Z~5wisfoGDcDMCg9SVXe%K&Z3gvZct@lTYb!@ z_&9c~6(vvHB;+!4DCb5zX3qz3ByMW@cxg+SKWRO7P=2LJ=&*Qpe&Ou>guY8xT5`$) zvk<>m_;dZ_s52ha?X3I@yA-bh)rp@5_5YE=%GIw)BA0Eyyql7DO2Ei1tLptzWaywd@U^OVL% zi$Vd|UEv#52-1$wvl*eqh&^eaB?cYtzsfVc9Y1|~ye$F43h^;{&QX1R5Cz|8$Z`li zMsEMs9}mQ6{a3tT`3+IuwUcN9}kr z^}rW;dhvo5_RO&4_9zgFBj z9b2sJo<|xs)vsmOktP$pgW&{vlvV7FYhHp*Au}roVi=M)iBGp{$gL8(KU?-wW}J#h z%ooDvz#s(&y(8*c>AJaMcmE^(Lfpv;^B2JmA(r!sI97f4tpdY=TmbpFe{=1n_o0s{ zLsb#CPS&y!bGc(C8PHESy_QA(9w|bTK2RLXu-QEidLvc7<(9p~NmT2X_A2P*eNZs4 z4!23jfSSpmu^b8*9LRAfWMnZOz5Fw9c&)%gzcZ-Q zUbgzIB`?6*76HAasKjZXaDuuHY$^RaffGu~Z3y(M_`NA7*R%mTmVAu4h?Xo3wXpey zbyb%sCx0DCVD?Q@y*=zo*zLoA!lnGI~5vd+sV|` zIpm>$Zhh8;i2JQ?VZG9Ki&k6A?^@*4xYjHYK>qt6#}ZEC1a_LGVOa~j+qo8;-=6yF zSFwq08+%^~Bx$iY$L(i|In}*>m@AKLmwFwF0CSFT59(NyJ)IcHkc>C-1T!hNc;EW* z2oTn?v+J}o#MDY&g=CHUwFPm>AQfKE+n0BfDYiDzEv+-&cW7{BuYH_#ZG199^?V+U$JC$`+(!ljCvp}f#l39x;zLA;RV1WV`RXz#idh+f7yX}m{aUAt zS&-_xqg!CLL=gP%nmj*@l`Ml@>-L^z*$z}aIRH)wzdS#MY|=79^wAP6*HWA|k>lzj zBBA{7BTBciL|Lc8E2m(w(mjW@#dQBLIFt9T+1ieUK0aSZb;nhuiVtEY^m;ANH@4X* zE=lHu^g{AhCuz2cTNenxMDA26XeZnDS4TCR7Pz49R80bF+X@<;ols`clj zVK-uJ9xrGllopBm8}Jc8ar|2p=^3>dhc7(a=+@O>rW*1QP6*yNaR3Ff>yr ze6=#neDx$o#V7 z9GK0f>aIjf>f3q_{teJFP=?51ovD4VegE+id3;yZI+eJdEH z%hLVOBS`iCG(&q#A3Z=y)wW7^*58Mt2L%wVUlTaw?If6Q=boJiKjB#Jr}5NC&5y47 z5WPwsl9ZMla|=SuD4LsJb~dN^XPb!EkMG0N8warkAz&~&PyPHO776*f6&@D10#U-E zcN2*{$37QV{kBFtC0G3N4BmR>yrrdphM?tECvvw~@q>(UZMP~U2E+AT2k-Sv6Zi^C?8K9&l5~J6nM)g=mW@f_K zbwa>^a+@-nmMoOLN!NmNYJk=rS`FdVC>a`=GRIj=kZ70Qd!FQRgcgdpQFgyG@6aIV zaMq>*l|uT=D81J`?Hcu}x3H})`Ff{ikO~&OlV&Um_7pW4*fjIzOi*tl(&u!kJr^uB zjI0KU0Wvd}gMA%=2>1v>={z<)gG}|FOll-3dUOHO>LO)gSNZL@(r!ywa#Y-HlX%E{ z+ZbHXL+VWp zU4)cwfY+($p(2m+juCcmWb}{{%(tMi)|4hVD3;_1W*a`3t9*ISN;+fh@8h0^ zPyTlJ+?w8GBu_iWq9>vpsy#K?6j8Yu@X(l!l=0jn>c`WGwSJoaGe7l?ccCYwV}Z-$ zYFGkJQ5z+pzwKAhZA>}<)OT>? zzaSh7HeFD|ok_4KJ zeFV*1E0NUn8OBka29NOBidn4Lev{LQBi<*pPAsF|sf2Ch-R4-4tf}8=V`9zD)go0Q z=Dz4;X`p)v2{ln*LiAOj@C#wHLn0azp1ibOr+-REBU%(wTd3cw{7m2iy}}qJol>F2 zGzzO2N=uc~97Ii@ygHK-oWJ^J)9EXIlwRfEtLP@sT`hv*= zp=UptqNv*BEizg}R?3ExaJTWdc(A#m0)KU= z5ZTJ>Je;cdOb$v=YctIqafwGoQN=JcJgP$9!OVqyP7PcVd+m?X%qD+JZk;ze;5Kt# zNHhZ$sT|iTGIGRIL0i)FElP9Ue*DEP!;%x_2}&DFxs~-?BLUz5D?rr0#bA$*@|d7l zHR58JS-oIOyI7;sjEJj=F}<0hf!YAOe2ow-<$d4_^+c`v;baRHM1nUS@61soEr6OMa6}<89!HMK(%Vx`@xU>ev%{Xb`> zqr_0UIJ*^ZU|ZLPT~;|WrW?R!jeow!)E?m@ug#bl;H7CNG%HrY5mJQ~Upu0?64qiB zS7X77wBUv<#^8PTgsz~}ZC|#cXMUI#VodSrKLb85U=8l$7P$Eax~O_4Fo*ENI>?%U z7$cHT8BRsGkCa>Us%IJhID5tF?1hH>SNSguRXDZHeF-{|q5Ci9RWjehd?v(d)+SpD zJcIVLtfXdC?%#b6NVl>JNoJdQmegmBxF^~>F9jC&;})6IFaOMZ-1YyIAPInA71XF9 z7*bFlxWrD}y%t+rVG5Lviq*;N{AJgl{j7tYN8{1iA)n*>_KVrLZqzep$FgZw-Kl8l z1f6OaG>bH^oQ{cCJuQM{(BHShqx8P|4>FzXffLuvwW0e&>bPu7 z`nGdh^~L%EL4R0lQeHR}DI?1JtWC#@^n2pQAZQR=KSR|47{B20AR?>VwBU-zZD|40 z{f*jVQ z!KZDP51!A;);616bjqIusF>aONkI8{+fYZxQhM=voxHFNdkZC-uDQ%CA%fx5>AZzx zX>}Y#tI{#JbzsBo${Kim?RjEYNUbG_7mjwmgDlJ9GwLrK_Akz6k_+5G zmaf$LPzf6hmKouZc#=_hP?x3?7T|)(U6@(>PqNY@9kp>rd7FAqmG=hLj$ulY^(khYZHx`b-s_P$*Wm6|CYD+(v>IEAChpSbwdaSdtdwjbvE^4w85NIIo6Ae)^ROZ>t|Z9dq`d7e|oTQ<#{;iXPTUkKycL$Z-$JG=bkef zjP!Lf1sdw-kh<|mrk{!dx&t=y%Dms#LMyXDnQVXPZy{EyL)&<78vl>4! z+4}W(9Wbz(h=QKS<+Rjr@?L?wh+glluX0hknK>)M1~00qaEzu*QyW2~7j{?bS4Dt^oWGqjqK$^!=l#dId`efU8J z0x7$cS! zHRzWQco94H_cr*}NgP76c8~L(T1CkNh9>R%OSg z#Subct~olGib*y6DVTct&br%I`h&y`=h`aRACT(=6DhKG5V$TwqH&h|=|K-ZUpD4dJgt7*tRtWn6MRZxo z8Z`;V&E&?L{@tXbWq;Z#-K~a33`4kow!|nb?XC&fOsqt{*@_1B#-@VRHaYS=IQ}>0 z(~W54uyz0QMR^8})O}k5CUJ{-4N&@{TJTGTZ0kFtjB`lj#qCCZmHkO;h%wtyHKfT5 z4F7Ey%Hv{&fK=(|nN!P!4X@lE+(WtU?rF%jz&dbWFZTlT`pV9sQkG8FqPG2R8V<1w z)`3PsA}#L(Z)R>Q^~AliBG2Be#KsO)ZNM4pbVFj7BFMw`Pl6y`Y3IUeJCexCv2rh- zcK0>}gGlOkfClBq@S+Y}9rfyOEW(jh5CYT*7DTa~9wCQ%-Ce|r&?bJY*aW7s2aNDd z1}(50AN0PB`su0g4{8uW0`Bi-0Y%tuJ~!j^-m#>Qqs^R2Az0m+Atg<@*Skb#WL=U~ z>i4(9X=YQ2CW&T8s#_-U7|&J@stt0Y5~={h0g00RCdAH; z;SFq30uEq>RLP4U9Qh+6MUmDCpa{4z( zF#Ncjq%6=B+6&qo7wIFZszSN5@vY_KSc#nnwkClk1bjz=uYH(EVAiOXQlb=f97jY8Sp_7u9DEDwHIt^;1xGJ}W`g@YHBq>n ztJkZ9N4>m&EM?TWfs!uc$QtvSR4ax?s;iWyqU^h`8gQP=JL%qwkjC+9O#8IoY(`s9CS>My8GspTACkVU6yK#HNfr&VafLl- z=jZF=c5~)7C7$uP!MHcdf;&AJkRTf2WYwH76^;$HeAY*s_EBLwaX~cdq@bZ)mc8YHuwQi4&=s zRIIYmaq`Cp#$=gV!R>wGE`6qvo|*GDzyJZJ#b|sWp5j?s6Wr>$_1q@C0Aia&Dnd~I z7&T#Le~xg959Y3+P5`38-3IvYq~mTru6k%~%VvHps$w}M;4bN{yLvY>Ug>;~>|dh8 zq_opLzA4H1SBY0W&`Ei14nba!1kERMyj`v0p1PKtI}&3i&cp3hb!D3F2<|J-0C=X8+yj4zbIGM^r+j{lGpPY2?8ThRU`2s!Z zgyWK&tw`BQ`}UhtRnx|NTm$t_2QJhuVOL^fO?hAxn$(uA&13C&#vb$=a|q$sbPWmL z4zhWkr=_P*@}8J}WhVer{Yvw-a0O4ta{jfzDaxGt0ld1LkWOd$QfYTSne0`%lVi1^|j@)HI_q@u)np>Sa|q!1vA7i)71$QD2sq4ok!mVhP|=bF9D zqM#N}at3lnGN7B!by#~APsam8K;ts4}r#Ob|Fz(fPJ+i)MX$Yh=%! zRFfTK-l>p~dM6NeKm)5)#I67`X=?w2&xiM2&qiIke2R4h7c}s`xv_2vE(gHE^p(gX zQd2%K%gFe)lpO)X>~>>*>!7jwJ!0rTC9?efy$ntKCQfQ>zuyzYj$3=fXeRYbbqG1f z#Q)TUutrqh3zMK=omQ^dPvt%@{6tV*6>KX(Ue|?@jL)BFKgbCz1!>KH23;p zEl_&(s|Ajz*XX5M&KarMYC+V1Au$SB8D}4)Ttuy=R$&T#-_zh_M?xsXG>=`y0^v3) zZUPVnNmFQULpT|z@$CVOlkxD%cN|(q1F&53M22t*>Os?|2_6=!vq?jO@iqzsH3FVL zwlIizibLucZcxq!WDM>DpW-{HN=FYM7fLK#5ZWXK*Uaow4_h+I3%7&-02hE@z$a?r zntptG=ykpQi^yW?Mf{=xZ3?a0#NepGFw|DlAQYA%|M8$8=U=kFeB>y6EVrf4~lnebJlrcD3Y>mGR@?hYN|D3D6%Upe)%p@T`MuVyRP zG+E=+>Q24dE1Vb6({BVe{{xkoy`a7!N6jviM9^nax_AWpRi7#L1r9n8=;KXK;YH3l z`p_Y|8%6%s$qwcnAEJz}pnk&5B>Uj@k7h6^V$-ur7a|sO1P_clQ058IGsa_KLT0bq z+86}+93(#R!qk^^0bQaV$`kr0)a#`Wuk0abP9S&OIY;e3VTU%UV>p;^uzJP@AQ)Kr z;M2*Ffwlcx+e8ZtYBlb7+%dhIkwupNQA6}XcR=&<8`KB~lxXfF-MM6?VV+{nw<7Ze zU9fMCp6b4f=a|C$|6Z7WkD10UIIsb8L<{K7?1PeylD0O^E|{mk&39gsS>O4Z{wFc+ zKnr+-PcDEN_o5XKp(xMGwohfhNkd=`!C&3E2)Ra34a7_S+U*XZ!d;la1OQ`?pcQ#K z{|%V)&H?CR{bQsvQGmW>{Uq*qn)qB*F$c|e6*qyO=Htfj6&2CORCe@x{`<%#C4q>r z?&R^MpH%3x&EO-v@zLBP4#fOWcId+!FVwKADHJ*eBr>Rv`+~{<+vM+;8KZw&dtH zoTk;!!25oRlDKhgxU>&an5eK@(S_zwn`~E4`F0!U;XLtXP(dLY8;o}0ajmo7u}q@{ z84%hNshnV;Rd>l#&$+M$9R%3~W)FNbawMBZkwc#E02k z6VuC7aq9}~-~m+&PZ%mp3z!ecIj?PPnXx#`?pg1^nK`;Rx@Hq^?AUn#0x<<6mlHvt z{oLS&`Xvt7;r}A+eJrYh5rxmIeIn89V^GMwEgjEPjC}chm9So>)RS;C0w{vAAZK4} z_3sR#npX#6*&eegRuVv@+Go3hoacQKn1dmFGVVF^T9DcJ9!Rh{ye}yT;oY)oH?diP z5Q#kREdtb0W=mH4<@Y*LO3~6pWr|12YAi$4PKBUocJZIj+=QIWzN?_>A=0&L_ZDM5 zBE{d{))kI0aL$F{u{EG+D@R7WD>OZ>$qE-|>HBwlBe_y!PSh-jXQ#@=pzJ&f-|=u2 zfEGd_`C{yg@kW~s1(X!K%Dr4#$bK+5{_ekS;cc10wqQ$n+Bl|r{YwxOPw|U#00Ma*K&foeBaA2}iiSLC0J@)Xg&`$baOpQ2vDZ}7 z58t)91CeS=e4?|BK?YUeJPbQ?juuS7&yL_5O2(B?#E@0&F&BG*=GTg0qsN z$-&M!w6J;el4GsR(Oy{CIG_smws0&V4?!)DF5gbo^#o7G_rrF(v1cPVA54pSrf7zy zLyntK9`G7FTaERYPXo#aKoIH3tru{fgLQ27G0_&xG6XFOv#Zys?fJfD72!EyB-B*a zB}>lrH>7V|0o@|6B!R;@Em3GC<92-NkJFY;VHrTKA`_(YDC^IXB(m^YZ+C>%eLQIy zPA7PWe)m$Qr+iZEI14iKScmJVU(vBK4t0h*`imZ;>zCnbbj#UmojYZ zbRb3J;vcmcobPjv|0|3E0dkRI`3FR~1$kEr@1EvRr1Hu&Nn1uMya$Sra&x2+8pMxi=Xd)Sq`ohX1bRc0uc&x>NK4IWcPyUV$lpFW@D&X z=wPR@Jt2i|A1?zQztib$$zi}yXLJzE)bw@8WB>`u0RNUZo`F)cxM7W3apO4u~5S@m5Gn`NV~bwc$w5<6YiW)rzFb% z-GWTM`;o%u(G-&vO#HT|62T_*cD{R8VlZGzxvxHJ8t8dZ8z3~ndP{iCrd`~HOPYFv zQAu%#EL9Df)od(;Qk$cDwFICk$TyrqmlNlu2P&8;H9zjjP0SY<>IS_>Cf}ij#7r)u zCoFl99Qh~5g)q5!q4KMt0MlvSx{!qvANrCt3OEvKoi9d20Vw?}_$i`77t&kk?;h#% ztUHHvU%>J}vhK$oG;8SawJE)v(ah~1w?$`xtlYgqTS&DD%KRa>u57b}*a&QGz zf|AquTI&f78`xQh%d7>NxCEajKH|A+p%Qs_IZ*ud@H8gDhU)!|d6UT`_zDkP5VXdY zELp2Z>%J&loZm_kH~-*g&|nR1r;adUUG#U{YS!kS z%V0-nI)z;-nv=8lB~~AFK8+AkhN|d?JLy+nDjY7dOOjC)blY!ul#DXE=Czn-a*FLw z5N33lOFRx;m%}+$TF+t;fiGxX?z%`h+ds;`UM*vd#rbMMfa0iitnq z>#xV_)YJoL-E6WKXT|pO#%xCYo9EvYC`B^JbWj9+01MPJ+FZKhc+?{EzA@49q<~4U z1YIj4w(V2}<<6=dbeH=C(ttS}LGm&8Ev4viW zmOXeG?zLi9rCxZeUr`K;t2KL_OhUa@e^X9=6z2cMD$i4!NHVb7uqOj0^7d0YmHy+# z2KWL79_htd=7RB3 zalho&`XYD?Q@Scm#d@Y;l7}X>{!s|G)UNc$_A>U2f}~n3?GQg`a+P7V#z76#{P6Xx zXJrAP2nxI|?f5;Z$YzbvseMha-yd$xwGS{l2G|)tXsSEzk>-5kR_$bZ07Gr5zB7{k z=P;okU@i#^q{%=_AQsj%1gFymAHP%)`G%04$qa{gb3`*CQ#F_{df}T#?j#94!yL7-6A^;QLt6U%(JBM^UnbEq&9`MK0x<}G zNq$n8IVYn_AFMC;ZQ%w0f!G#8RR^*l3o>v|c6)u4KbE2#3$w@N`}2E*QOwZ?p4UziPhx_0}a} zDIHFzB6J0I#*ixgjo2S`RriGNmi!#7mh9RLuptN?KzmgC1;FEg(JV5>u@hs#ILKbJ zBviF${d$$x_whljxK~0?Scs{J#9rQf6Zu-1KI|~L^}a_)H5M&gbdjmHdDwfQ&>!Zp ziMDtYL+1L{i=a3(5m_cGX>i`Lg?iMY_%;zSoH}(cfSF8z8yEv9m26l3&(}SQcNBO% zoOZGnA|?r9Rl_=Q=vaV+`4k$4@Vy_%Z*0jV0Iw(yE#o9DaS&QBb~~U^xd@l)z|T zdD%m0NEe}f7>Ts-V^oMpM)A3It#gGXWrF1F0o!^1=or#+(e(l=b-yndq|mysuF(^i zW%6RZqP(l|e<9iz6r-nehINoPf2=f${^y{%Hocmx7b;x7Y&K0u2s?!2P^2XK7GFa! zoJqe^{nC@;lR#{%$saBrw<@50#C3GXo2|I2-QCAL;w$at_EYY&Tg<3v17syCoiNX7`gP2%@r@Q>XezIvBMl=?3gt%z#NihDcg~)>*Zd zC1bSyMjC{#OT+C)9$(u|F0<3}xU%r1{d~wR3pn!(qkNl2mPiD6lR-35u^Y2Zv-`BbXQd$|LfPYA`xo)s(fMOtame-6PWA zi9qv`;;&p7!V$xTM`K($lhF5aw-6cwn^7l0^UE z+tnjcj+tm9ye^zyXXTD3NxuRIhMDr?{a@3!E$5^nBQ4=P&bTrgy+WOuwb);oyh-~g zY2^Rc0cy_1=;^vvzU1(PSF|{9@LL>lLPA{IO{diA_w-=*gn67RjDT0dfBr{dmylF_ zz3KZn>QA|TRXCN(d#4EkPPwZ2!;|$$gGvXd!A$c>3n>d0KD++zVqw4x(OK#t&J|&P zT3_JzdI*8eugMiJJ$lRE&c;)wRXCC#DltQ?%}pY}T^0^BO`B!bmYYlC1(|HqpWNg2 zz!BEl6vgZ+czV60Lx#B^%UwI7J(GiQTbPBVqwdr1GLSA^A@MGLWWGZ{wN!(eo5ZQ1 zLHw=$SgYuzJ$~bTYS|fx&=5Ud?P~lKdu&L2(`rTehew!G`nR&})~%0%L1u#w;~T z1W-c+`fNStRMeX$zlRGXuK4FIxbr=>M%Cb_EX-Lk8nBW_!=apD-)- zkcqHsFylv9RzF?oohTCd83~9he6{xyag97?-q@|X#!l)VET^d*O(Km+N}T_q=F}IU zn^tL{#v5H6>F1qw?4TVk??xcNgg${o(HcXfMlS<<62=CnueoVMNhE==s6W=q1B?nZ zB7#UslZAPYe0NPxdhO#Bj*?b&HRFeCM@NsTp+ORv%sXA7@$ z@Nq3@`VR;fedutyozz2ESgJf~w_%2tAq3e@N9beuo&~*H`_1L;-R?sElc>I>%9_9# z8Lk~>3+Qc(%jIZt0N@Mwy$CXb4Z*jBZC?d3|@vY;YuB~kfu4XGC80CJAAyL6eewX+JRwMlqG z2y<=GZ_8PEJkiRdCJ|M3)`@=Hj%{Oj%sgm3_N0SooU8-Z0M@*P8ZaDcyI<<8vSs5} zu#3vahd~#S0sS|R>%!ivOk86d?-djh!fmxl$KGM)i2DIdy@#TuO{1?c#hSg zec94Jfe>P>zXcnf7Dbh@gttvZ^W%=}T!_{!ytHgYXsYOeRewGa3~OY$#Cs#A3mI^# zYe7=;emw6--+^@L(|J~Fv-B7~LG+Pz+?I1QI0$T(eK$Bxfk9`dYqCB3CGsjKOd;I4 ztetRdaGe9EZBM8%M+o$eVRUA?atacNZ+0Yoy14K+IuU6HCaC)*xAUPVK5N%739Dq z<0#McYQKWWV7ig26PIE$AVtk5@}!qSi6FSTZkOLaR1>b zCPcGWQf(}eE%k7M5;Dq!cvQs$qus#T?4z1SvIBwUE+D{sMi^#bW02a$i0ua`V!@d6 zTN|6!(o4+|oDWkV2GF@(6F0Gv&w-G_tfw!w@U2PRW>?x@dwrsu7Z!@UbG&)_p~3mC zy`mSeLJWiQgTMDwsJ%)1KQDNs@C>|xgRh=R?IySJ2e)r2mKd zY56uJO;__-rB=OQh-EPG>vrib1mI3?(t;}wQg^# zxA0?EX?)JUAMG?KPA)uunP89}QdTv@(o>tVJIKZ-J2 z_Vv~I&?C+r?`%y?M23XR0CB3%cHXVXRak$c=}7C+%q`$ZvFJ-tm8fUK@JSjs`v`Bp zQNWQYtBk7>J83J#-^3O|M$+89vA+~2M6tC7bB$jb-Cq8u_)DcBDOe|QXcp83<#mCN zG?+3w?%j1lX{IqZcGY$Gkgggy;OWk>bNam4q;YXXAkoCV{i2zbIgiPRyjtc}pc1_rtah3eA14I@>Pj12^SU8U8BkNcE)|dR8&~xM=e~6@_b0yXhGR| zOBfdQb8>Ebylo6zy;Y=QiE?^{_*xk?B%P1D%V)OaDC8?alb6Eg80f z&RNkqW~prP{HKLI1r?s!_9+l|QjaRu^U`Rn2~Xzcv6MxP$DN`a<$!3M?06h@bzBwj z{OsEx1M7LnUVggOB88w@91u&pu=mc$Z5V(Y3zw;9_vc8?cY_@2!@p8fc@gcXsAJ-6 zSqy8Ic0cO~{a6i>v31155O*d^W(M^kl&4Vsx9@7A0JgnHk&czIGxKk>7TG0+-~+x~ zEyN!FZdH%;h_#naRxGglSCC7@+eQ^huf>**ns@o0mRu6<+Kbz|NiTxDCdWKzPgH9s zUF-^UnaW#A=)S1`px5csgg@_wSx;1*x8$s6u~1=kx~mdoXS8Pt?HV|BNtabq=E#>U$;pm%)CM zcDvzW?li?y2}?98BO1*&jfdQUerQ)u0K-;FM7>;!e0wvP^BElm0@L<80W7O?|8=D<>xgxr(269eO%iyCtx*OMdz|V<~J2O zC5eFrIIq{w!@6bof2c^pZsW#*EAi8whmU7t8*^*)bl7RHd4NA>SHWYKFbX{j9euiB zyVxMLSZEaoHl(FbdV4TGm|7M5944|ChhJ_OUl)}gdZElA6OLkE$nBeY1vWy4ye-2? zY)~#{PlGKeN?AcC$p^5plfH`wuLxm4Q)_HUBFhK>NwsU})65)3wHDrVK2G2LkcU1r ziuPRLU8?=a+GN3nFZqk({S%5FI5z6C$SR+~Nf zpXH;01`6&o$m?~jkM0<9OYOxr*0j1u0Jf~dH{02I_mPfGK=mpWN)C}AK7%_3BgG0%*Tc~`kF490cumgOY zu2}NYu%z^%&VbwEphgwl?=3?4DBtBdFmj(ccbqR6&s3Xj?JWp5sLwYKqQHGwWmHGs z$eK^5@%WqOx(bT%uF1D6{#zf(9BL@mt>*F+OaXRzAqtqoP=NrQ*=g5t9NTcUoD|vg zS;jguZta4(%$+QD1UTUrLZ30_@yF7?Es{y#1G&G~k3QFt6o3F5O06t==L_ll{#pCwc+z z4HPko?~hrilq%WtYfA;Iql$Qj=RSQ{(gMZ!el_e0Nm(Bpe?c+LT&a@i6FQKbsQ|MI z@23XRuUJcpZEYF_jL3Pho46mMa>zE^ZNTqZwF5u#|= z)}$`Yh*q4{lh?kcn29nEkjQSCHQh7%rZoER>5j-m2;9}KT>!~Grgx&2bAPd6@B{s`HD$jD$R}9{oY@4gxKD z^pkz=Aw9Buz!Q`x8g7U*KuguPSHT_HKK6h=fPz5qd5)h6 zFnwkjN6$9-VciM-bGmIIU=%*-y|O}|uHGoELZwZw9di9Dvwb5Pp;vWWBGocb;ULm} zQ?;mY)&)1nv~BX-QsQa|mt5++ZK=35e}*GnwTWS=j#OC$-!n(;)asuREU#nxGM7B*eD?!ER}Qe*Ym9T;rqhQ)RrCypGqmZV%c~bw$;PKV>>y% zYo^~MB7VjbJ-m@z?j}Y&EniJmx?1?(gJo=S;4PBdUF3v@T2!x)`;>hGjv#vo@fybI z+Ek37!WgZgMI~#xHh|y2QweO}x#J8Qf1^4QuD`Akv+tnFa{lR;OD>+ycKj}Cz(&6w z$crVI;FPnJpZA^DD`+NVM^GlJ$a`}KM#QT5QOW`!k*olK`mPLp6t&38J2w^o*?o?3 zA>t5+(ug&`xDu{9Z)BT|0MQRehL6}vgI`^(Nw)87q)g=zojK9ea3%TABs#BhBup^E za0{sQpXL<}fEl&OVqboL$**cskISDvMti^0(4y~L;Z;WW^pgFD<-k_bC=P8hRO0fW z9-()q6U9Qa#_Z@P--Z8>hUrt_jgGI5C}lVXN6nl=#a7wL!4Mai-=mfrar_QLmYebl zK^wn|d$8$*l_8-ss|i@M%Ia+I6%rX2B3qRivy$ow5tT2Tu+@CL8T~RW_C*EZh$WMC zZ{?-T;Qbp8W6G~LUaJw#2b+W?c}WfjtrG|5$cO7cb;x*r)jE-x`*3`zAtdEtQ@$pP9-Bb zse{WPzav#LdU}l;s?kl8X;K0pbrD`!)y!T%U%A+j5d%P{%S@Sa&vc7ahMJjKXe5s8 z3Dq4arCCYw@G_Pw_AmwdqMvTgKm+BH%Q;#pdc)o87xqP(Y@qC;S zn7(05a8RTYJ`=*0dW|zhCM|=zO``Ja3myAJQ2!xTh0#R`6WsuX_ z0ug>Rj6=@H(rbTQX`7gk0tV8w;g;PCH1!N>Q8sS$vY~Kcb31(y=Y$chQ*w0RWM6=w zl&_eyM5S-{r-7ck(~^>H+rU~HPs0){P;sq~d67jCW4|kwLr@1{xVr4?(ljTu-0H7TBO1oEWV)dMRBo|-oM@@u#$$m; zd@ayjRkW?<4IId4KeL?$8y=BR>Jpr#qhSvsGb|01K^=kA$Yc`~mAl?~dCEe6kb)pQ zU&81ik+f59vZ|~09LoG(oE5|`Gdhpt`Rs$xhI@K%sy*Zfo(2|JvdCU&VtWT*hAHv} z9J;JY$J3VM)}Tqz5;#cQU8i@P9h*}@S?RPda)92}uBXWq<;a?1b9-j6nT-JNISVOT z^RXQyoO3ikj^j09^Ct&Hq-87<_A{r3D^R8d;VChbAA=p2Ih#ke$QZ~tJjvYG$D3t;7PLMJ zf*#=lD7?h)y@Ja~K4JNSN+97@3yk zyS=5f33jJbZpO8Rtuj&TL}-6R=C12q?;y7V61F?0wRM18)B`)UO2*hj$Zoje(#<(r zFS`!_x zF0Zkx2wo-9Giw!P5Wp4V2n^NHfC7MRpzCXA;ZROL2wGfyShMGVQB7le$0R4ZQcAL+08)RcTj((mcVW|6J(o(_WHPePD=LiLWtA1l-b%s9%rMIjgG+gSN z57c;+dt4Ro7x5{9_<@O@Z~?dhbh$r+Sz#_2FjcW}LcJ;FQ5nnY_VYJUl`d#PfcmX> z5ukgg>fniEW!tOx%8o`nzl&I8yHOtWEIJVy<=7KA9pQJFpwm#7@X|jF+!8mJOD-Fb zSP5}suB0%bYlOh}r3LcdDv0>Y!Fpme$XU6+GDjLK^*Xc|HZISr=ba?h&;EE6xBAx*1y zR^kI4ui17fFA|25vXp=G59G!Houfr!k>)R8X1#J!a7HyHNYdc^Vs$v)4(Ket1%^I1 z=2VZ^hA4EEZ@VxkaIF@`(JT}#L1Hb$PHyQU`4zcP6}SvK-p zC>g@qr?H*1)wHOk^G%jC?&`+vl}rC}=6iA7=`Eat_ZEa=Eej-_4-A__8MqzPL|Q!= z2YC~U`AGSF6a>T7iHrHd$ATD%afAlWx`!9-uZo?tR+VvkLn4EB5)so>^m1uqKwSB# z8^K{FaK$(k>#;0rnhAnvrbVh{vlziHaTu{Y_h$A5e9WsefO*8Go&IU_eb;6Ux?Ea= z!PCxDQp>nAVdE63!`2vj>!rq_aGEm$Pf8Vv!7dTWQ4)t~ptW-{`qY5)bBf*a60kWA zJoe)FA$-6`XpJ{aTLER*s1ai*!S)W-bb-{x&88Itn8x4m=okgKfmgf! ziayR!cmH1Y+<;5$H7)TtVVg+QsmdPFVx z;OD71zyUihv`0S=YrqZ};v|46?M{KR@2BxAaadQ4&TaC|IZ#zJpR~9n{M{MYOg{7g zXk!mG%*OVq7^zv7%+*=T#i5%X`c8FF+I}yv?+}&m*rWA1>EZ+DN%@aI<}He5uZsZq z_0CaatH^diD(Wop-@`lgbMmxPbHRhZSZUtvS++`GocKsfsc_jMYhMt&j27W&`FVPQ zZC=Yj8~NO8VHr=GxdlGtg!_BTxFnM(E*Au!&g8L(4>3r&L=6I(2!zLwU?(LWrAlm$ zAXT(OC*-x+0{^%7;Ih}>`<2gb!_eWbyNstuoyrd}m(?-k_@>f$KNmXtOLDR-|BfzH zqhRcr{?$KAT@3Gq;U^<``>abt3!+RHzRB!?Mlpz+vMqtIU__)0txqzU7Kjfk@TCiJ zB&5MlITiH+7qx6!%n2ktOa!xZnxUM);)|V%t_qj&fT9(K6#x`-YOY``SQNGOoOJ&+ z_aql0s`}<(bz0XagRDQPTG9nfr7~aQmo0+M)n3Yp*6XvpT;}?B_&^C3IJqq$=aK!| z{@E(NQf{=uEB~AF+sh%ZU}ePnP}ZyIN{b+P=xg>gt?s|K)#`DcAlVb?eL(tYcC+Aa zNYrle>eEWu#ybCp?S2kyg}IE2Zs869Kjvp?t@mz8qgV17K3?!F>} zUnBmn<8fjX6#`{dyY8IWi_gHRq9L!#A*L2)EpVuW#DY`bHFDH5Rj!=frw*WPWczql z z%nvp^u>M*6G)6O>?m^IGTls?PnYJQljjU92OXtr{D@%KXb`5JIUu#F2H7J~8q$mST zC+TO?Wa8IR@Dn=tfum10G{jLQT)ierF`FTBhCDm>3}ESj ze4nHPL6X5#3>v&_LUJh)a3U{ha5x>R?%Qg)(8r-EgKx>KLt{o+8<_(?$^GB5W7+*} zBA&I-zY;&T*z48t3B?N!24aarb)nu``&3WI@{_!WxMA38-d;2>-Yv9>Lao_^s{0O_SZy?Bxb&O#Phi0aNi{INOyw`Qn@@I|TJ?J-S ztO-uKgL`;ky!C9Bv8A`My<>2V%BDi`%iK;w3dqhT7}$p!sd}{n{SfP0Chvj%q_&x z6RrW7(KS8;4gRr*t)g9JMH(92-nL26|3>JGZO!>E2zXT%Qiem9_HYCAAdtPe-;E&U z)?Cl~?)M3K;bH@rrt}O(LGfNn0D4FWm%`e575HiR=%zv(t_}7dqb8WN`)S;O{cKD` zgBcR_wpAj7y6Y=LpuK54Ztd-hlBA6L&a?Ke1GB)2_FFx%(Czs~HP7t#@JZ;uvAxtX zX%g@f~LFHPI_2j*9Q`{>39$u>_}( z10jY8obj)>T{$Snjdn)Idl^AVt{<{PpGO7~Z~^GsvKv}^mPAO*mE2Vw-VB-Q)lh3bBT^YBb z{j9B4%0sxvkr#`#{dd$Em7gv}BLmAKui|cL*6~N~RJxr@ne_n{E}6ImuZ# z-^yi_v$S<%O~=wB;%;TLrFWt`IF#PR2H)^>$-&i9Je3JHIjDskqlUCInebQLq#U%| zCa*2t8lQUwQ{Jp(76P09vks^B@|SAu=%XA0Z5d1}s!TE@VF;zp@ z_-|a|J6kQp`uwG?O2>4HIfi{PBe4{1D=FP`(Pj8n$&Tbgd==}QnX{z~q|p_y4v`Bv zcg6zS>ch*2xRc&Ia9#z&b2cC2Z$Q<;ZeHB=YCdu7IF+T!DQ3zRp*JFi%6- zi%PTTj4XNzq&I0;w{<$9k6h>xjXgo8<;DUf6MT9lUr(X*GM#T@jYGkVM zkh1(UYV%=jqCP?PDOQ)%w{4aNpo}&!3P`_MC_N1@2023_11S;-zN8C}o_qfjqaVdr zYnr6jt*SQrRL)r2LRD(49hO=q_ny}aL6{|ms;;OnOA$hsYeqmJHIH#=)V zy|p}UNS3xjqdr5VfO7pkyN~V4jI519+~fHn4OxHA$%?gIOit?r_{^(9A{KdzdY|*8519e@C153l-+YZOYs}DPXSK5 z1Enn+R*9jduNi}G!lGfTx=TB%jP`R!A1KTt=Bli)L_0^B-Q5ytijy!lX1d2=ss?x% zk{+L#jcEqy&bHyLgn(F90q!pm%^ohBGVkE!?d+sk3GF<*|B%TBpGPK`-CTD1V@QO?zXg!Rh*GInojDbu9+nT$-AzzlqWD(1xr6RS6|AI-PZ;HkhO;!;QxR@N>u>sJFEy)_g! z@Wk~UW)q5X()m$4I%}5wQE6yu%GR=K_Q>5B#q1>bAg*7Agn1R{>Ky<7fPXz#XXizQ z(&WVQH5eMqSH7JZZ+=CqbL%3cU1d%HxnjxJ#;m7k$u^n;>fKC@HdZ@Wu)DKzDY-kc z7|0&Kw0~xf3|*L_x#*RM5LZ%)vwCmG0%3V45EZhfsI~~1Q$FNd)BBM8>;oI?c+h#F z-@|Rd#*U*;_Eg(m5)3wVDrT{HzlL51V4#4fE=H%3i=D^|XD&dnBP7GJ*|)!gp^|ys zL}Bekw)+)nkH%$?pxaOluiwIjRdT3=^wDjQB6DK$Wt&@`h7uW;%pzvZEAan_AV1>iyr({u z^frSDZM#U;*E%G|l@foluQ9^l!gkb)Z}U%6El1^Beq#VX&u)r3o!E*?rOm_D;^%N^ zjqU&5T4&P)yGDs2OiXs|d!$@-fb{*VB87N3jkvnmvS|+`F*++szffv^gTDtEQ;!>v z7Q3Mfn4X}A*?WlT$C?bD1Kg`8#bFX_{^Mnuwmxa>3!gPLZd`JHvjPN}|1<2II^00L^L+1khpMnQYuVj&ng(vdZk2TnXJ3}|LCxksBZXCp{!%<8Q)~& z7hLrO_se@mrvjHBdMcRIWk?@ouE~-+tXRiKPXv)0e(t-OUH-x6QAemudv(pfaI5HA zA;8J~dW#ypW~ToYxC{+iwAv&DDY zP?k`4IvjVG6UL{j@Pcru|BcIc(0-}v|9X<)RoYJNb(x&{P23Z!_WJu6n96?VCwZa} z^NBOsrE3=QBTvFaah{fQ?CkPqw{^rSQ*(*gy(HNYLf{mKp%v6gq*~(h41fL};!{gt z@;gRQ$FA%^>!=|e4DTfW4nHhDT6;4i(55!d_Gr|TmmiXIl!oOWySm*Yw4#_eo+>OY zS5=Vw)DBe&a`v|AM%J$snxu)}j!#o@&X*SH7w>bEq0|VS(uAhoq3tF5-eg`M0>SRI zd9nbv^P<#xaJmyZ5Kc7VvPe%oDLf1|s)u~>D8-EpY^Vv#lK?-PDo@i7I9!ACMyZvY zRL!L>aT8ksOh$_)ZrCbgC4WJjVo7Ys!VCbZ3r>W+Hrb`;Wo{>_%s+Jfogv6~0Fuz7 zS?C0_QKY!GN#{p5g|&FvFKBsDVMJM{^OspPEoCu0RW*AIRy%eV(fY5?%)pr2C~kWk z@I9mVc-OW8dbWJSi?Tfy)dp+x0h%b@SU^f6jms`|V}Vm0o68gBHRdRQ*#|%Lpiu{6 z=<D!2*_48H7*HJ&VP<6oO=8-u*|)z_NXXv>tWqw z$rRFb$nb_|T4~Q&n9?IQU~{P5l!7e#A}x_XRX_Vcz&BTHnkHa6opZc~g!flMTEiCf zXFYTKpJEnrE?u&q0wUVQJ@X1u(;?^mY6mqIq2!av=@(%rHH-P{uOf4g7hE+arK1^u zO|o@xx-p2uP@Zh$X&xM7*1dQ||MkZd!`7$NU7S(eOTd+6yXVwLSJch&PE9XMZa=f4 z#nq5B%OKxfFsKDz(BwZ8f~>~Fp@i?d($5kaarP$n4IC9 zvy|m!n!0;3=fz0uJ~Rx)wV%AS8!wPr6ho?BrPjzR% zH4rE1dGaWki*|QGrBHlT@<<&7R$QT;k6#ZOe6R(XDBoVTiXgbu6wTMYpmVAg^kwOP zyS)cYbC?2#VO9&oyH5iA$Pq`yU~G!Z&$`2r+h2$t5_1CA>Bao*Gap7FeH&!ML$<#0 z4DG;F@Hmr1qO)!)_>v8uc~LBY@@p$j;f}pfBuEiyN)c#ht5foYirk(9&czw$UH=!o z%sFBJcXNqW;L+H?ab_EXE(bgyE8(xGB}v1Qvw*d(u~xnxn|J7<@6wynL_hd@7TRm1 zTDB)t7>q$)o!b{kxhcmxb@HQ)D&D^0P4f-J{Fm%bdpxcw=1o=6+RuXc??kCP(h|=C zgu{1y8f7Y0HCwAWwn^Euj&n`c92YL8-O=fGDo+3UD?9H&VVogrZn>L!22No7r`k1| z^$RFVweyDc|6!s?@;wfvZ~seV32tm@qt+=v7VTgnzZgDIkIa19!fUgtm^!ZH(7Tt3 zUhaGMbk?u{$vBqE!2O!NagKGEE5Cim@qt{vQOEX)0}l(9nx*QJE?*X372zeBzEqOg z=6!HAsm=QjzFoOPmoE#%%!l)q6JQ**)IYEzRGV3wJ?KjH-vD+SYf8W9&9_UIwwR1Q zqX%KMNd}|*;Jbhu@Nri3MuCD={_cGK=n*cNLTT$p9J2a+$zVy;vm;fkIA{t> z4I*mD?pws%GJj-WnSUzj2Ipm5%Jm!5#eQH>=gu)(M6QLE@XXVeeb+LFyU8olho;AY zxB%NL?bkz44FYW-SoBz2GQ{qB-6146B>Vrgdp&&98OB;-NRSf@t67EO+u7r|8b|l+ z7lecHoZCfei%evB+of(BjVaTw49z}MY^^Qy**v}km*wRR7hF9FAkps9+P4j-ki8?y>Ev5?K(r0W!mHqWO3CPDCNmmulWo7Xiw^RR;`Nu%?Fhp zY&EKl%$|u*qCxNEL%-f_A{JW8)jU1b6W(xkkUBZs)ZphXQcXgxEeBpT!0DGhzIhl} zcO8Jh@TNGrA4_I_XC|18eR|B0yl<{vA>FGf+k8yh)!HrhmTtH&iP3S3u)SLxEk4QK zxM^3Gvc~z=6WLwe()|Y`n0LUnShV-1B30-qw@j(6rOFb!MULi&RK`_TbWg*E>^xCn z5~lm5Q#Xz#oKhi&6`t&E=a?x{Whf_mgeg zyOJ9#L*|+{9GPlXBaJSOxP5vXUqF(k#h7Q?r#X@>KYs{Ew+Sc+C?bgXM{^pln`;N6 zb2&?dvYA|y={!xxmmQsJ^d5NsOfHw4R@Y@VJd15pyx7NO75W3rp-YaYjI%YBq&k~v z9KF<1b#alxRh$fab~3qV(NH~0#F7@KRlxW3m+gWnx7PxUZe~Nf+BGlbnoUgI>6S`N z^M^K32t@juGovWGF%)1dlGDf}*1vALhD`-l6XUB?Cho-6t}kBfiX=S^wL-ES*dn;V zQzAx=zM|vAf>xamGN9htb!r}ssZVT2$u)FIpA%eX_bFDG_0>&w{8r%#<%Sf!s!Lx6 zwS!Q~Avzx2CRNDFtygCCc^n%~y}yC1=6ndsgEc8qez!S;!CyC!bG)tDL`cTPq&J6- zTlof;9%)C2p1>n_nIMo{!94_V#o3nSvKyxL&?w{U2)vyp&B95!y7gaIz!8pLJM#JM&XXji)XZAj2sF}}uk1sJr!~yO(M!{U=J+Xi<2k4&#j=7Ow zp7?VF&ozBB6jcDYtZi9mMO=Ro>#!6Or*c`UO``h^7O206;was8O;o(FG-z}rKpyF} zY{$?B`bL`!z%7_u6Vf|_asG+n!nXA~vi$g`O!pG9I;d>%JegfR z$CEax0{3{QSD69RR;kkd(C^uklpqWhn5TTSk;(`Bou+PIf&qkf>gw5*t0(cNONN_h zfWpIUroXeU8qXT`7JKYPNDx~)I%#=9DG9(3$lUIhvzDRlz) zR{9L}C@ef09NFVvSBQFXWFKSe_BU5}1MHi_8oE4tRkHLpX^Du+87fUUW%-gQg!sy z&@``S$w&7Bhu2m{_(kw7_Jyh?Y*qxp7%hoj|HVB=pcH$*mgV2ip%Dzhl>yo2?qQ~W zK9Bdb)agxF&%fEJ>V|<3{J3rwgqkQN9vCPfxE4S9r#+ZPsV=@`^|S^k;REGMDI?!0 zOY+b5&e^s$l+flM^w_8fp6r4o*R6||MzK4gkVaTUG|CQPHxhc$>A-7P2_%v9MF0l15dP06 z7UMzUfc{N|IOHd-FbMH6MsE{nF6cL3a%M_~2XL~QTF!9$dbENRq)=0vk0URDmv!0Z7r#>hVy@Dv?yUbyyapD;G=E`Esn z4tmam03`Y%2n6LMWY@!_J5X}4a}TCPi6uvb(!|{*CxayBtn$8B2-xIz+s}dI0M5~5 zqwc!R*`tg{g^A(zcA>JXx4eap5)TDMGj4xWwe7qjlvGpc>h%OzwiyJ!y}Mc05PU{) zFuT+r+-A9nYI3=b9;Wqw?JWOtHS^T|0=WtF8{j`brlTu=eR2>9zt_!NO|%eP{BN~l z&Lh|`6C|brl<=s+5spna%jowghvr_p2hI?YU`;@x3zoa7=+v1Qd@jU?_03z;S+)7} z?_121{HG&W*aX$?CLAOq;3-yxp!J{DW7a!888hnhvHQ)b66btT?a-^^vb3K|tK6ql zO^O*_jXDJmTP9=``9mwF$@Yh@4ldQ&&pcIn8Nj`b=O6-zI&mYNEnPlL7m^?6d^k&)Z0 ztP<~D)IL6}kz@V0395<)MVuecnPZFcDIR2XIX;!`r?(E&3pg*v;3OCO&#Sa+V6{{K zsQ?9kG^x7#L&y_c2}{}_*_-=k&~%O1`*K5LJaUxQfM=c^E@l1|b(HRj!p{Bs#Lzo! zXw-lB@~935Y*7Je+_)}C_zeY?^4bVbTnaP>L#IXf%s=Hz;0{Q{29!G~zSz*uldI%- zPfwO+&9m_4PFXKYCLkjmVroYtj!@DhZxTIifuw#Huxqv%9PsI0Uc*3rMkXdzTH?)2 z^1;C4qXGMXKv_OxHoAC+QD38zRC5s|tQ+`@el83J-PY0A*D^A#a7`BZU)(hkT@v5} z1DX$5HsRB(?5EkeWg{mbUd5Kf%=^{wP ze6%^4*(oqx2FqU=4}{JiZ>!tvIE8ja187!vU#e#2D|1o{zp6#m3AuI-j1dQW;@2hs z9q)RsKHU-C4%qS5a1(>+$Ui&DbGvB8P}5;#=VSP#*^eq)-XhPG znAB}f_a8c=$b{x?QCijxG|zq`HLXcEBvK=i<~G7a!40^3SejxPi4`$r!@Z?p2YutWGemB#HiL6aLhl{36F&y&7P1T5QUIHcKlkzLYIvsI+zHpu(e@aCb zL#5+^?gyE52`gu1HsCgr=qf;hBjR$xqT&q_OYry-e#PenZCbdsX7~vd4C91QNt}nE7b#M-y}~9!nG@2$)JAe;PG}y`Djj z{$US5UvNFSBS>ggS7g6&g`w%o?#0^ztwg>#K$-I7P|8mk)Ud+>v9e2vQ5otiUk8)b z_OLQgB^<5QRJv2Izp4cp_W6Mq5-{2JkuqyPh4ef@>~9r8Ii0)IK5E?Hs@0JoE|mV^ z?Ex@Z!mLZBdK2 zbn}Qc|Edy&NVgj+``N9u(X0ez;S1<}^36BIhmH4wRB|CV`72!ERo)3#>`sCI2 zlUt#uce!X5KK{nU3q_~1L3?$Pcl`ASDC*BV1@ME5kv)}wDi6L92qAut5QIKX?h8p` zvW#D8Vn=UrX>yMa`)kH|?S?PQH%R=VQehDE+_f6+{YDA|{kX}&u7rS;%e)GyXww<8 z2MU?kemcYmQ_qD*f=!uT0Q1og<%>A*rY6E(5hS_DrKV%kx_Yv>k~*;k5o)}4(C0@N!}wuN=+LlA2*2jhNh*Mziaw)v)-7cW=%C0mA#X^r0#yy=l_XV z(S|8aY%V?Or_(lIFf-s{SDOwd=rmz{33c0RSU4ld^zxd7s)k|r3{)fi-G5yzM-tit!a-*5Mmb;E!{SZnGWF!)Nm53i=wGmSySSRc_{ zw&<|0j6{Q}UTlU>x^qcrny0UBu?eaaO50M>gw7`upj^qfDrcLNDrKo(e9Zt44bYlt ziU*<2CDLeBwLjH@#s&_;aAUrelvJp!8Tw_}zPQ>WID3A--j*w7FL;%LA_f}DY!hH2 zI-?3l`ZGVh1KOVtR#qR!FQNBFEoH5*6ie)~#z~BTfO`9@CLi?Gl1j8!A0vmk5|3s^m_!47m~v`cD_hg{pTAsrKJz`r2W? zVyGJ*5D?fXIP&EZy70NQ=#(J82x;2@Q5^eue4VT~Mpu#QFgi&v2vI`3k$3ibx=4qvxA8S zkmTGwuCFlc^0%}Q)BH2O@1isnWF5PT2+ium`WuLa57@xdgur-sa8?UG%^)o~T6 zX3c}NS1fl>-ea^r>J&c6>>rf}|GRo(fP6PwCHy$SIGJAz@6IeL?oq~!z#}7PEx2{P zdIG~~gf`#7+{R(KT*7nWtTZ^UUAugU#(ZsdJ=}xZV$1*$dOf{put3$(O| zs&IQs^Um!H)pGLA-N&cePemP97-p?CJkJuk2S(nL_x}6NuPE$Hbp=JUxMTA-9{zrq zdF`hC9qoljXN*NP-QFn_2w?VkSzaoN>JcfQ9&S_#(~I@>8>!yh2T<2%?+$;WN}+2* zjmxKqS|=1gKMdb+xhzLt)mmBAES=c&izEzO|B8S723#z<1I1pN6{+&Nf6_>77421q z7XKge|IDub=wMY|S?8{r+-x-QAH3789l3FTL)0D@aAq@S3pTxq4Ug*xN@pZ~NJR#T zg|-c;^q2DV-z#b~Pk`=8v)03Ry8_$cL)6kkHe-21anlRUmrU`B&OiSVckSC)HeAnO zvHNtc`3NBzv^z0*&hprSre5xZ-e=^wieG$vj33i_JSl(K?dUaRjI&3>OpP8%gq!Ru zD}2CikY)NNxwh=IuHh+}S-HB2q+$UAs9X5u7_{;0cnEgVLFrG}z=3aXrgJ>W1D;2% zwN#V-Kd%-Ma1WeEp@)cTvn!ayJ7bRY0C3Q#Pc)Brp{}qgErRQ}8nB&}= z+TEb)kQq6WgkTcsF4rUmyw^*(#4^9cn+@OY6%1H(zuF`tou?QI(^h13{XK6iW=Gb)5X&Ee-E`t2-?Lwf?!~b zx-4Jri0t)hJXe+WXy(fdIDbvHeA`uGw)2oaI6pLV?$MnRrKLL@=YSF0eq@xkc>RCd zI_&N@2#gSji~%daaO2JlyO9K@rbaO=8^7^Gf0Q^{6_ZCDtRoBrg?Y0g52awa&K_zn zxIItu5ulZ+JA6F~U>L|#MUC8-M&qzTtU3RH!#eJxI;LM&dvCT{A|G`e`CKQ3K>05l zcD_jXc;SF#SeLb!>74MU0)^SlPkF9t)8 zU9#ZxO~E&rVmB2}7#FUwEXKbebRlIQlGWvs#U)DhrN%xoS+gl2k<%=S!BQ_o#Xuw9 zm<+QLNBeBnnq%y%9%BT#1+qPJGN@@ywC55NU+OJqw2FlNi=+_+^4y?yhf&dF*0A@K ziKC<@Cc8Ox6_okB2n5uhtxvm~p>Ppf8*RaDr=E2nO}0GFV*AK*$*9xcZ6EC!3b$Nu zquUU{3Af9Q)@9GQQ8|eRxy)BK@@b{?Cgld{C89%?tA{DGNecdzLj~5|niZ)=D3jbZ z19~m{6GhRFLx$l1uJzEK?H=-F<#t*lf7vrO+h+&eKER ze7`8Iaz;7&j0|f+4Zc`$=>e;vD@srId<86e`&+%qfo=SiTfl#8^gcKn)$b4gX>a*YG^ebKao^h8Z7Iz+>Y&z5il#f zj%2~UvS)hHF#i(kg0)`)^>S4`elduN+>>`l@yJpzWXuUn?K;$7tM&&ueVJ0_rTk1W z0TKd$XO!GsqJ4we8#L{?td{eu4rQ)k(^_)(+@c*?V7rLC(}X#1=%8N4Unf1cIV8!h z3ca41YQ-K|d@`R)fA|b;F)Z1JPgDj36nE3~T%(|# zzg@~~Icz9g2P3hq9xVD>W>Iww@W2#EV^L_-tJM=@Eyh}UaUeT~KO1t)qn|e8zW5SG zl%lqF_R$mtmj?(BASo52b;i}xkNv6aYhM2y-uIL8K&9Rz_M2g-#C@<)kmPXa!Hh@8 zh&FeC4gt$@84)j%d!8n+YFRC;OJ!PX5c7HKT!q3*^=rz!;5(OVOkAvW9rPAY2odGu zegAt40f2l`lUv-mBf|RK8`DfAm?i~mDNhxd zaFNvM{FCN=GV~rJSJ<;PI&xn#5KhLz-op|p)V_032w-m(Q>>3!gBcooZ3^m>`mv1ZP`jd9llpp6m~6{3G;CA2%6n7Je-XM{Qd5WL30Mv{9bff+T%d;lA+vfZ zVey`|HcIC@AVzYldO}x1&kM394ia7x#5bs84oq`fjmk%@tGB?E5PRt*Ga7bvSwR=v zb{W^C!k|O>Ru9-PM6#$vtqpQWg|S6nO(AS#$-CU+jstPB1>UZz5gT_1k@Ref-|c6P zQ5e!pIn6L*oP@}*`EX(}660JzSeOKj`z92rNpJV^f@JhhKDs*O;K zYmm_n55#f0brqawznVPSeZ_PsM9*EyQE_$GTk{Plz6XM1H1u*tyl*Eck`A<-KWW<(Pf{)5@*8?gas0JMw-udUxWN%%O(p5O-yu%}!gxV^~;Q z(xL?RFy|y%qbqT}Lx5-~GdwdDZCwWOApfvy+x^vhh2oy!csB6|_CiGA?$rjZziZm#>@D*2^a?8SmY?zx@k8I$n5r;R=)C3v5t!f@1vDV^{^T*0X|r*`FL@zD1- z8Ern)dDbu2(Wc+iJKyO=Q`3jr=~fFKU9KKW9OgESd8SKU&qO6f*}u0xVBbQR70z30 z^3b$f%Ki`pD~hB7Bwx@*lr7ORqQIZDPPN#KiTp_d-gW9@t&f|XD^Ddlv&9RMlTU+k z$WiFIq&3yIsn5z?wdSL1gFby1$(pU{MXa!EBePIKQVWq`Zv&)d019Xi5F%)xr~8rZ zvvgC=rj4~jhivn{>;m4IEY!sSX-BA;7WcVCx15}@<6fp&x!;B0Q5N=?S6a1rtT8=fPBp=~F z1b*fmJTQ`pBlX-~jfr1mttr}>^B*`R0=3RjMRS0uAal92G}`#3*Nn}V$o8>Jm@(mwycd~+#c9y zMnc~(Sa1S+N2}&ymFvOn#!&vXX3A))q3QNmut1JX|d$D~-F&wkGAZ@A( ztgs~hMqlrqdYzj@fH_zc*<;wat<4jBZ)j}T%ONA&Qb5QZ=Rcqh-41Jld$xR18+x5N zC!aFvnO~1Pq@)X-N&4O71{p%q%!{|5@y8Xv23(>b`FH+-VcV+)8(wz)%;P8iC@Vge8*5@i_zX)9y)c0^r3 z#fbgZiqAn%N)42=Y3vwrh!L{AEa<_cWrVdlv zbBd*R(BV?+-O8FlD9xssm215cof^Xkp|Ng@c^(FIh}9?b0rrv@VaS4$4MM&T@^n$b z;DfI;NGMLM?_yfUo$2sDzzrrYg;*x__p=TB;BONW!@Z*|KV&{0+8fbIw45r^m{0-u zFBg=PbW=l=t>R~RFl5)XHmWF=-w~hC;E^JMfLXSl|P@Z=xb{t+U zEg(5C6>9(|w8^dX84}tvw@XmI))Nto>-boJxGLJhHtEq~JY0*(i{h9}R<%QcaE)kl zpLsMSMd1Ywrn^ehfolI9+_2|RsQ#3hin~|LhrFg_cp+bTuj+B?l_Or{B$=q4$hi z=tm9EagrQ*#ZHE1r9JV)y6{Fsxg%}|ABjB?n9n#J6eiYQy?YCJ8$&$1FPn@$1N2c@ zzd-iuuYLsjRT8N{&;V62hA8YuMrEU~$=az@c?Ga0BU0J|U(|k)dByG?;TkXQm-Hqj zg;#Tc!LzjunDQlF+E17X~+3)^AR5*y(Q-GupHt zJS8&e9$kLJv=z*FVMyl}Nq#NXKCic(H=S%3L3wzTaC}H~R_E?TrprAc{msTJJ_&RY zgRVsCQ404Nb5pl|-eB7sJYmec4*kT+dL-i6ZIUg0|)ij2pLNI6B3 z>{5GJ?FyZ^oETyq>r~jo(qD=Glk6g6(;pPk4KUFU1;68y=(Tf~Sp``XnTDN93g^Z7 z1sEL+J4;3}=!e+%`DQ-_`4I#FuU3-oacsN(;XxB#4s&jBsRC72#xwYk)z^d+%)_sT zD`qU+g>G?*WFlYBMI4y%(WW#1d6gE!l#?q3K>l zd+5uSZQ17|+NSunY*s3(0kAHY^=Sr;f&S%4JiHp#Z&9D(VDv<2341S|cgU!AbtO%{ z2IBsiT|&rT=PEMwRk}z~AbZ~IK1BofAb9OMF^4^HM7wdx1lS604CBQX34_D-6#gYI z;+!*^?7?#MlZ(24wY)vaQpjFHU~Te@wM ud%z9jgZ=)bD*x>)*>KFW8X%rCQCDM=(MnJC@bm>CqaaLd|NpF86#xJgDHw$S literal 0 HcmV?d00001 diff --git a/packages/openscore-nextjs/next.config.js b/packages/openscore-nextjs/next.config.js new file mode 100644 index 0000000..4c79671 --- /dev/null +++ b/packages/openscore-nextjs/next.config.js @@ -0,0 +1,10 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + swcMinify: true, + images: { + domains: ["countryflagsapi.com"], + }, +}; + +module.exports = nextConfig; diff --git a/packages/openscore-nextjs/package.json b/packages/openscore-nextjs/package.json new file mode 100644 index 0000000..c263609 --- /dev/null +++ b/packages/openscore-nextjs/package.json @@ -0,0 +1,28 @@ +{ + "name": "openscore-nextjs", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "bootstrap": "^5.2.0", + "formik": "^2.2.9", + "next": "12.2.5", + "react": "18.2.0", + "react-dom": "18.2.0", + "recoil": "^0.7.5", + "sass": "^1.54.8" + }, + "devDependencies": { + "@types/node": "18.7.14", + "@types/react": "18.0.18", + "@types/react-dom": "18.0.6", + "eslint": "8.23.0", + "eslint-config-next": "12.2.5", + "typescript": "4.8.2" + } +} diff --git a/packages/openscore-nextjs/pages/404.tsx b/packages/openscore-nextjs/pages/404.tsx new file mode 100644 index 0000000..000cfd6 --- /dev/null +++ b/packages/openscore-nextjs/pages/404.tsx @@ -0,0 +1,11 @@ +import type { NextPage } from "next"; + +const Page404: NextPage = () => { + return ( +
    +

    404

    +
    + ); +}; + +export default Page404; diff --git a/packages/openscore-nextjs/pages/_app.tsx b/packages/openscore-nextjs/pages/_app.tsx new file mode 100644 index 0000000..535333b --- /dev/null +++ b/packages/openscore-nextjs/pages/_app.tsx @@ -0,0 +1,23 @@ +import type { AppProps } from "next/app"; +import "../styles/main.scss"; +import { NextPage } from "next"; +import { ReactElement, ReactNode } from "react"; +import { useEffect } from "react"; + +export type NextPageWithLayout

    = NextPage & { + getLayout?: (page: ReactElement) => ReactNode; +}; + +type AppPropsWithLayout = AppProps & { + Component: NextPageWithLayout; +}; + +export default function MyApp({ Component, pageProps }: AppPropsWithLayout) { + useEffect(() => { + require("bootstrap/dist/js/bootstrap.bundle.min.js"); + }, []); + // Use the layout defined at the page level, if available + const getLayout = Component.getLayout ?? ((page) => page); + + return getLayout(); +} diff --git a/packages/openscore-nextjs/pages/admin/matches.tsx b/packages/openscore-nextjs/pages/admin/matches.tsx new file mode 100644 index 0000000..5ccd004 --- /dev/null +++ b/packages/openscore-nextjs/pages/admin/matches.tsx @@ -0,0 +1,15 @@ +import type { NextPage } from "next"; +import { layout } from "../../components/layout/MainLayout"; +import { NextPageWithLayout } from "../_app"; + +const Matches: NextPageWithLayout = () => { + return ( +

    +

    Matches

    +
    + ); +}; + +Matches.getLayout = layout; + +export default Matches; diff --git a/packages/openscore-nextjs/pages/api/hello.ts b/packages/openscore-nextjs/pages/api/hello.ts new file mode 100644 index 0000000..f8bcc7e --- /dev/null +++ b/packages/openscore-nextjs/pages/api/hello.ts @@ -0,0 +1,13 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next' + +type Data = { + name: string +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { + res.status(200).json({ name: 'John Doe' }) +} diff --git a/packages/openscore-nextjs/pages/dashboard.tsx b/packages/openscore-nextjs/pages/dashboard.tsx new file mode 100644 index 0000000..3de3012 --- /dev/null +++ b/packages/openscore-nextjs/pages/dashboard.tsx @@ -0,0 +1,96 @@ +import { layout } from "../components/layout/MainLayout"; +import { NextPageWithLayout } from "./_app"; + +const Dashboard: NextPageWithLayout = () => { + return ( +
    +

    Dashboard

    + +
    +
    + +
    +
    +
    +

    +

    Matches today

    +
    +
    +
    + +
    +
    +
    +

    +

    Days until Final match

    +
    +
    +
    + +
    +
    +
    +

    +

    Argentineans/SolaEast registered

    +
      +
      +
      +
      + +
      +
      +
      +

      +

      Brazilians registered

      +
        +
        +
        +
        + +
        +
        +
        +

        +

        Mexicans registered

        +
          +
          +
          +
          + +
          +
          +
          +

          +

          Colombians/CEACA registered

          +
            +
            +
            +
            + +
            +
            +
            +

            +

            Chileans registered

            +
              +
              +
              +
              + +
              +
              +
              +

              +

              Peruvians registered

              +
                +
                +
                +
                +
                +
                + ); +}; + +Dashboard.getLayout = layout; + +export default Dashboard; diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx new file mode 100644 index 0000000..d56f33f --- /dev/null +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -0,0 +1,65 @@ +import Link from "next/link"; +import { useRouter } from "next/router"; +import { layout } from "../../components/layout/MainLayout"; +import LoadingScreen from "../../components/LoadingScreen"; +import MatchCard from "../../components/MatchCard"; +import { NextPageWithLayout } from "../_app"; + +const filters = [ + { + name: "Today", + link: "today", + }, + { + name: "Remaining", + link: "remaining", + }, +]; + +const getLink = (link: string) => `/forecast?filter=${link}`; + +const Forecasts: NextPageWithLayout = () => { + const router = useRouter(); + const { filter } = router.query; + const path = router.asPath; + + return ( +
                +

                Forecast

                +
                +
                + +
                + +
                + + + + + +
                +
                +
                +
                + ); +}; + +Forecasts.getLayout = layout; + +export default Forecasts; diff --git a/packages/openscore-nextjs/pages/index.tsx b/packages/openscore-nextjs/pages/index.tsx new file mode 100644 index 0000000..b51e5b3 --- /dev/null +++ b/packages/openscore-nextjs/pages/index.tsx @@ -0,0 +1,16 @@ +import EmptyScreen from "../components/EmptyScreen"; +import { layout } from "../components/layout/MainLayout"; +import { NextPageWithLayout } from "./_app"; + +const Home: NextPageWithLayout = () => { + return ( +
                +

                Home

                + +
                + ); +}; + +Home.getLayout = layout; + +export default Home; diff --git a/packages/openscore-nextjs/pages/leaderboard.tsx b/packages/openscore-nextjs/pages/leaderboard.tsx new file mode 100644 index 0000000..bb02a32 --- /dev/null +++ b/packages/openscore-nextjs/pages/leaderboard.tsx @@ -0,0 +1,79 @@ +import type { NextPage } from "next"; +import { layout } from "../components/layout/MainLayout"; +import { NextPageWithLayout } from "./_app"; + +const leaderboard = [ + { + name: "Adriel Paredes", + score: 71, + country: "Argentina", + position: 1, + }, + { + name: "Leandro Beretta", + score: 70, + country: "Brasil", + position: 2, + }, + { + name: "Emilia Paredes", + score: 69, + country: "Peru", + position: 3, + }, +]; + +const Leaderboard: NextPageWithLayout = () => { + return ( +
                +

                Leaderboard

                + +
                +
                Top 3
                +
                + {leaderboard.map((l) => ( +
                +
                +
                +
                {l.name}
                +
                + Score: {l.score} points +
                +
                +
                {l.country}
                +
                + {l.position} +
                +
                +
                + ))} +
                +
                +
                +
                Others
                +
                + {leaderboard.map((l) => ( +
                +
                +
                +
                {l.name}
                +
                + Score: {l.score} points +
                +
                +
                {l.country}
                +
                {l.position}
                +
                +
                + ))} +
                +
                +
                + ); +}; + +Leaderboard.getLayout = layout; + +export default Leaderboard; diff --git a/packages/openscore-nextjs/pages/login.tsx b/packages/openscore-nextjs/pages/login.tsx new file mode 100644 index 0000000..b9abba4 --- /dev/null +++ b/packages/openscore-nextjs/pages/login.tsx @@ -0,0 +1,90 @@ +import { Formik } from "formik"; +import type { NextPage } from "next"; +import Image from "next/image"; +import messi from "../images/messi.webp"; +import logo from "../images/logo-black.png"; + +const Login: NextPage = () => { + return ( +
                +
                +
                + openscore-logo +
                +
                +

                Welcome to OpenScore!

                + { + const errors = {}; + if (!values.email) { + // errors.email = "Required"; + } else if ( + !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(values.email) + ) { + // errors.email = "Invalid email address"; + } + return errors; + }} + onSubmit={(values, { setSubmitting }) => { + setTimeout(() => { + alert(JSON.stringify(values, null, 2)); + setSubmitting(false); + }, 400); + }} + > + {({ + values, + errors, + touched, + handleChange, + handleBlur, + handleSubmit, + isSubmitting, + /* and other goodies */ + }) => ( +
                +
                + + + {errors.email && touched.email && errors.email} +
                +
                + + + {errors.password && touched.password && errors.password} +
                + +
                + )} +
                +
                +
                +
                + +
                +
                + ); +}; + +export default Login; diff --git a/packages/openscore-nextjs/pages/register.tsx b/packages/openscore-nextjs/pages/register.tsx new file mode 100644 index 0000000..2f789cb --- /dev/null +++ b/packages/openscore-nextjs/pages/register.tsx @@ -0,0 +1,11 @@ +import type { NextPage } from "next"; + +const Register: NextPage = () => { + return ( +
                +

                Register

                +
                + ); +}; + +export default Register; diff --git a/packages/openscore-nextjs/pages/rules.tsx b/packages/openscore-nextjs/pages/rules.tsx new file mode 100644 index 0000000..13d55aa --- /dev/null +++ b/packages/openscore-nextjs/pages/rules.tsx @@ -0,0 +1,75 @@ +import type { NextPage } from "next"; +import { layout } from "../components/layout/MainLayout"; +import { NextPageWithLayout } from "./_app"; + +const Rules: NextPageWithLayout = () => { + return ( +
                +

                Rules

                +
                +
                +
                + 1. To participate it is necessary to be registered. +
                +
                +
                +
                + 2. Only Red Hat associates from Argentina/SolaEast, + Brazil, Chile, Peru, Colombia/CEACA and + Mexico can participate, using the corporate e-mail address. +
                +
                +
                + 3. Participants may register any time during Copa América and + until the day before the final match. Points will be awarded only for + the matches for which predictions were entered, and, in consequence: 0 + (ZERO) points will be awarded for matches with no predictions entered. +
                +
                + 4. Copa América consists of 28 matches, of which: 20 are + in the initial group stage, 4 in quarter-finals, 2 in semi-finals, 1 + for 3rd place and 1 final match. +
                +
                + 5. Participants may enter predictions + until 15 minutes before the matches start. +
                +
                + 6. For the predictions on quarter finals until the final match, + the 90 minutes of the match plus the additional time, if any, and + penalties will be taken into account. +
                +
                + 7. Scoring for each match in the group stage will be of + 1 (ONE) point per correct prediction (Local, Tie, Visitor). +
                +
                + 8. Scoring for each match in quarter-finals will be + 2 (TWO) points per correct prediction (Local, Tie, Visitor). +
                +
                + 9. Scoring for each match in semi-finals will be of + 3 (THREE) points per correct predicition (Local, Tie, Visitor). +
                +
                + 11. Scoring for the 3rd place match and the Final will be of + 4 (FOUR) points per correct prediction (Local, Tie, Visitor). +
                +
                + 12. There will be three winners in each sub-region (the + top three): 3 (THREE) winners in Argentina/SolaEast, 3 (THREE) winners + in Brazil, 3 (THREE) winners in Chile, 3 (THREE) winners in Peru, 3 + (THREE) winners in Colombia/CEACA and 3 (THREE) winners in Mexico. +
                +
                + 13. In the case of a tie a random drawing will take + place to determine the winners. +
                +
                +
                + ); +}; + +Rules.getLayout = layout; + +export default Rules; diff --git a/packages/openscore-nextjs/public/favicon.ico b/packages/openscore-nextjs/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 zcmeHv30#a{`}aL_*G&7qml|y<+KVaDM2m#dVr!KsA!#An?kSQM(q<_dDNCpjEux83 zLb9Z^XxbDl(w>%i@8hT6>)&Gu{h#Oeyszu?xtw#Zb1mO{pgX9699l+Qppw7jXaYf~-84xW z)w4x8?=youko|}Vr~(D$UXIbiXABHh`p1?nn8Po~fxRJv}|0e(BPs|G`(TT%kKVJAdg5*Z|x0leQq0 zkdUBvb#>9F()jo|T~kx@OM8$9wzs~t2l;K=woNssA3l6|sx2r3+kdfVW@e^8e*E}v zA1y5{bRi+3Z`uD3{F7LgFJDdvm;nJilkzDku>BwXH(8ItVCXk*-lSJnR?-2UN%hJ){&rlvg`CDTj z)Bzo!3v7Ou#83zEDEFcKt(f1E0~=rqeEbTnMvWR#{+9pg%7G8y>u1OVRUSoox-ovF z2Ydma(;=YuBY(eI|04{hXzZD6_f(v~H;C~y5=DhAC{MMS>2fm~1H_t2$56pc$NH8( z5bH|<)71dV-_oCHIrzrT`2s-5w_+2CM0$95I6X8p^r!gHp+j_gd;9O<1~CEQQGS8) zS9Qh3#p&JM-G8rHekNmKVewU;pJRcTAog68KYo^dRo}(M>36U4Us zfgYWSiHZL3;lpWT=zNAW>Dh#mB!_@Lg%$ms8N-;aPqMn+C2HqZgz&9~Eu z4|Kp<`$q)Uw1R?y(~S>ePdonHxpV1#eSP1B;Ogo+-Pk}6#0GsZZ5!||ev2MGdh}_m z{DeR7?0-1^zVs&`AV6Vt;r3`I`OI_wgs*w=eO%_#7Kepl{B@xiyCANc(l zzIyd4y|c6PXWq9-|KM8(zIk8LPk(>a)zyFWjhT!$HJ$qX1vo@d25W<fvZQ2zUz5WRc(UnFMKHwe1| zWmlB1qdbiA(C0jmnV<}GfbKtmcu^2*P^O?MBLZKt|As~ge8&AAO~2K@zbXelK|4T<{|y4`raF{=72kC2Kn(L4YyenWgrPiv z@^mr$t{#X5VuIMeL!7Ab6_kG$&#&5p*Z{+?5U|TZ`B!7llpVmp@skYz&n^8QfPJzL z0G6K_OJM9x+Wu2gfN45phANGt{7=C>i34CV{Xqlx(fWpeAoj^N0Biu`w+MVcCUyU* zDZuzO0>4Z6fbu^T_arWW5n!E45vX8N=bxTVeFoep_G#VmNlQzAI_KTIc{6>c+04vr zx@W}zE5JNSU>!THJ{J=cqjz+4{L4A{Ob9$ZJ*S1?Ggg3klFp!+Y1@K+pK1DqI|_gq z5ZDXVpge8-cs!o|;K73#YXZ3AShj50wBvuq3NTOZ`M&qtjj#GOFfgExjg8Gn8>Vq5 z`85n+9|!iLCZF5$HJ$Iu($dm?8~-ofu}tEc+-pyke=3!im#6pk_Wo8IA|fJwD&~~F zc16osQ)EBo58U7XDuMexaPRjU@h8tXe%S{fA0NH3vGJFhuyyO!Uyl2^&EOpX{9As0 zWj+P>{@}jxH)8|r;2HdupP!vie{sJ28b&bo!8`D^x}TE$%zXNb^X1p@0PJ86`dZyj z%ce7*{^oo+6%&~I!8hQy-vQ7E)0t0ybH4l%KltWOo~8cO`T=157JqL(oq_rC%ea&4 z2NcTJe-HgFjNg-gZ$6!Y`SMHrlj}Etf7?r!zQTPPSv}{so2e>Fjs1{gzk~LGeesX%r(Lh6rbhSo_n)@@G-FTQy93;l#E)hgP@d_SGvyCp0~o(Y;Ee8{ zdVUDbHm5`2taPUOY^MAGOw*>=s7=Gst=D+p+2yON!0%Hk` zz5mAhyT4lS*T3LS^WSxUy86q&GnoHxzQ6vm8)VS}_zuqG?+3td68_x;etQAdu@sc6 zQJ&5|4(I?~3d-QOAODHpZ=hlSg(lBZ!JZWCtHHSj`0Wh93-Uk)_S%zsJ~aD>{`A0~ z9{AG(e|q3g5B%wYKRxiL2Y$8(4w6bzchKuloQW#e&S3n+P- z8!ds-%f;TJ1>)v)##>gd{PdS2Oc3VaR`fr=`O8QIO(6(N!A?pr5C#6fc~Ge@N%Vvu zaoAX2&(a6eWy_q&UwOhU)|P3J0Qc%OdhzW=F4D|pt0E4osw;%<%Dn58hAWD^XnZD= z>9~H(3bmLtxpF?a7su6J7M*x1By7YSUbxGi)Ot0P77`}P3{)&5Un{KD?`-e?r21!4vTTnN(4Y6Lin?UkSM z`MXCTC1@4A4~mvz%Rh2&EwY))LeoT=*`tMoqcEXI>TZU9WTP#l?uFv+@Dn~b(>xh2 z;>B?;Tz2SR&KVb>vGiBSB`@U7VIWFSo=LDSb9F{GF^DbmWAfpms8Sx9OX4CnBJca3 zlj9(x!dIjN?OG1X4l*imJNvRCk}F%!?SOfiOq5y^mZW)jFL@a|r-@d#f7 z2gmU8L3IZq0ynIws=}~m^#@&C%J6QFo~Mo4V`>v7MI-_!EBMMtb%_M&kvAaN)@ZVw z+`toz&WG#HkWDjnZE!6nk{e-oFdL^$YnbOCN}JC&{$#$O27@|Tn-skXr)2ml2~O!5 zX+gYoxhoc7qoU?C^3~&!U?kRFtnSEecWuH0B0OvLodgUAi}8p1 zrO6RSXHH}DMc$&|?D004DiOVMHV8kXCP@7NKB zgaZq^^O<7PoKEp72kby@W0Z!Y*Ay{&vfg#C&gG@YVR9g?FEocMUi1gSN$+V+ayF45{a zuDZDTN}mS|;BO%gEf}pjBfN2-gIrU#G5~cucA;dokXW89%>AyXJJI z9X4UlIWA|ZYHgbI z5?oFk@A=Ik7lrEQPDH!H+b`7_Y~aDb_qa=B2^Y&Ow41cU=4WDd40dp5(QS-WMN-=Y z9g;6_-JdNU;|6cPwf$ak*aJIcwL@1n$#l~zi{c{EW?T;DaW*E8DYq?Umtz{nJ&w-M zEMyTDrC&9K$d|kZe2#ws6)L=7K+{ zQw{XnV6UC$6-rW0emqm8wJoeZK)wJIcV?dST}Z;G0Arq{dVDu0&4kd%N!3F1*;*pW zR&qUiFzK=@44#QGw7k1`3t_d8&*kBV->O##t|tonFc2YWrL7_eqg+=+k;!F-`^b8> z#KWCE8%u4k@EprxqiV$VmmtiWxDLgnGu$Vs<8rppV5EajBXL4nyyZM$SWVm!wnCj-B!Wjqj5-5dNXukI2$$|Bu3Lrw}z65Lc=1G z^-#WuQOj$hwNGG?*CM_TO8Bg-1+qc>J7k5c51U8g?ZU5n?HYor;~JIjoWH-G>AoUP ztrWWLbRNqIjW#RT*WqZgPJXU7C)VaW5}MiijYbABmzoru6EmQ*N8cVK7a3|aOB#O& zBl8JY2WKfmj;h#Q!pN%9o@VNLv{OUL?rixHwOZuvX7{IJ{(EdPpuVFoQqIOa7giLVkBOKL@^smUA!tZ1CKRK}#SSM)iQHk)*R~?M!qkCruaS!#oIL1c z?J;U~&FfH#*98^G?i}pA{ z9Jg36t4=%6mhY(quYq*vSxptes9qy|7xSlH?G=S@>u>Ebe;|LVhs~@+06N<4CViBk zUiY$thvX;>Tby6z9Y1edAMQaiH zm^r3v#$Q#2T=X>bsY#D%s!bhs^M9PMAcHbCc0FMHV{u-dwlL;a1eJ63v5U*?Q_8JO zT#50!RD619#j_Uf))0ooADz~*9&lN!bBDRUgE>Vud-i5ck%vT=r^yD*^?Mp@Q^v+V zG#-?gKlr}Eeqifb{|So?HM&g91P8|av8hQoCmQXkd?7wIJwb z_^v8bbg`SAn{I*4bH$u(RZ6*xUhuA~hc=8czK8SHEKTzSxgbwi~9(OqJB&gwb^l4+m`k*Q;_?>Y-APi1{k zAHQ)P)G)f|AyjSgcCFps)Fh6Bca*Xznq36!pV6Az&m{O8$wGFD? zY&O*3*J0;_EqM#jh6^gMQKpXV?#1?>$ml1xvh8nSN>-?H=V;nJIwB07YX$e6vLxH( zqYwQ>qxwR(i4f)DLd)-$P>T-no_c!LsN@)8`e;W@)-Hj0>nJ-}Kla4-ZdPJzI&Mce zv)V_j;(3ERN3_@I$N<^|4Lf`B;8n+bX@bHbcZTopEmDI*Jfl)-pFDvo6svPRoo@(x z);_{lY<;);XzT`dBFpRmGrr}z5u1=pC^S-{ce6iXQlLGcItwJ^mZx{m$&DA_oEZ)B{_bYPq-HA zcH8WGoBG(aBU_j)vEy+_71T34@4dmSg!|M8Vf92Zj6WH7Q7t#OHQqWgFE3ARt+%!T z?oLovLVlnf?2c7pTc)~cc^($_8nyKwsN`RA-23ed3sdj(ys%pjjM+9JrctL;dy8a( z@en&CQmnV(()bu|Y%G1-4a(6x{aLytn$T-;(&{QIJB9vMox11U-1HpD@d(QkaJdEb zG{)+6Dos_L+O3NpWo^=gR?evp|CqEG?L&Ut#D*KLaRFOgOEK(Kq1@!EGcTfo+%A&I z=dLbB+d$u{sh?u)xP{PF8L%;YPPW53+@{>5W=Jt#wQpN;0_HYdw1{ksf_XhO4#2F= zyPx6Lx2<92L-;L5PD`zn6zwIH`Jk($?Qw({erA$^bC;q33hv!d!>%wRhj# zal^hk+WGNg;rJtb-EB(?czvOM=H7dl=vblBwAv>}%1@{}mnpUznfq1cE^sgsL0*4I zJ##!*B?=vI_OEVis5o+_IwMIRrpQyT_Sq~ZU%oY7c5JMIADzpD!Upz9h@iWg_>>~j zOLS;wp^i$-E?4<_cp?RiS%Rd?i;f*mOz=~(&3lo<=@(nR!_Rqiprh@weZlL!t#NCc zO!QTcInq|%#>OVgobj{~ixEUec`E25zJ~*DofsQdzIa@5^nOXj2T;8O`l--(QyU^$t?TGY^7#&FQ+2SS3B#qK*k3`ye?8jUYSajE5iBbJls75CCc(m3dk{t?- zopcER9{Z?TC)mk~gpi^kbbu>b-+a{m#8-y2^p$ka4n60w;Sc2}HMf<8JUvhCL0B&Btk)T`ctE$*qNW8L$`7!r^9T+>=<=2qaq-;ll2{`{Rg zc5a0ZUI$oG&j-qVOuKa=*v4aY#IsoM+1|c4Z)<}lEDvy;5huB@1RJPquU2U*U-;gu z=En2m+qjBzR#DEJDO`WU)hdd{Vj%^0V*KoyZ|5lzV87&g_j~NCjwv0uQVqXOb*QrQ zy|Qn`hxx(58c70$E;L(X0uZZ72M1!6oeg)(cdKO ze0gDaTz+ohR-#d)NbAH4x{I(21yjwvBQfmpLu$)|m{XolbgF!pmsqJ#D}(ylp6uC> z{bqtcI#hT#HW=wl7>p!38sKsJ`r8}lt-q%Keqy%u(xk=yiIJiUw6|5IvkS+#?JTBl z8H5(Q?l#wzazujH!8o>1xtn8#_w+397*_cy8!pQGP%K(Ga3pAjsaTbbXJlQF_+m+-UpUUent@xM zg%jqLUExj~o^vQ3Gl*>wh=_gOr2*|U64_iXb+-111aH}$TjeajM+I20xw(((>fej-@CIz4S1pi$(#}P7`4({6QS2CaQS4NPENDp>sAqD z$bH4KGzXGffkJ7R>V>)>tC)uax{UsN*dbeNC*v}#8Y#OWYwL4t$ePR?VTyIs!wea+ z5Urmc)X|^`MG~*dS6pGSbU+gPJoq*^a=_>$n4|P^w$sMBBy@f*Z^Jg6?n5?oId6f{ z$LW4M|4m502z0t7g<#Bx%X;9<=)smFolV&(V^(7Cv2-sxbxopQ!)*#ZRhTBpx1)Fc zNm1T%bONzv6@#|dz(w02AH8OXe>kQ#1FMCzO}2J_mST)+ExmBr9cva-@?;wnmWMOk z{3_~EX_xadgJGv&H@zK_8{(x84`}+c?oSBX*Ge3VdfTt&F}yCpFP?CpW+BE^cWY0^ zb&uBN!Ja3UzYHK-CTyA5=L zEMW{l3Usky#ly=7px648W31UNV@K)&Ub&zP1c7%)`{);I4b0Q<)B}3;NMG2JH=X$U zfIW4)4n9ZM`-yRj67I)YSLDK)qfUJ_ij}a#aZN~9EXrh8eZY2&=uY%2N0UFF7<~%M zsB8=erOWZ>Ct_#^tHZ|*q`H;A)5;ycw*IcmVxi8_0Xk}aJA^ath+E;xg!x+As(M#0=)3!NJR6H&9+zd#iP(m0PIW8$ z1Y^VX`>jm`W!=WpF*{ioM?C9`yOR>@0q=u7o>BP-eSHqCgMDj!2anwH?s%i2p+Q7D zzszIf5XJpE)IG4;d_(La-xenmF(tgAxK`Y4sQ}BSJEPs6N_U2vI{8=0C_F?@7<(G; zo$~G=8p+076G;`}>{MQ>t>7cm=zGtfbdDXm6||jUU|?X?CaE?(<6bKDYKeHlz}DA8 zXT={X=yp_R;HfJ9h%?eWvQ!dRgz&Su*JfNt!Wu>|XfU&68iRikRrHRW|ZxzRR^`eIGt zIeiDgVS>IeExKVRWW8-=A=yA`}`)ZkWBrZD`hpWIxBGkh&f#ijr449~m`j6{4jiJ*C!oVA8ZC?$1RM#K(_b zL9TW)kN*Y4%^-qPpMP7d4)o?Nk#>aoYHT(*g)qmRUb?**F@pnNiy6Fv9rEiUqD(^O zzyS?nBrX63BTRYduaG(0VVG2yJRe%o&rVrLjbxTaAFTd8s;<<@Qs>u(<193R8>}2_ zuwp{7;H2a*X7_jryzriZXMg?bTuegABb^87@SsKkr2)0Gyiax8KQWstw^v#ix45EVrcEhr>!NMhprl$InQMzjSFH54x5k9qHc`@9uKQzvL4ihcq{^B zPrVR=o_ic%Y>6&rMN)hTZsI7I<3&`#(nl+3y3ys9A~&^=4?PL&nd8)`OfG#n zwAMN$1&>K++c{^|7<4P=2y(B{jJsQ0a#U;HTo4ZmWZYvI{+s;Td{Yzem%0*k#)vjpB zia;J&>}ICate44SFYY3vEelqStQWFihx%^vQ@Do(sOy7yR2@WNv7Y9I^yL=nZr3mb zXKV5t@=?-Sk|b{XMhA7ZGB@2hqsx}4xwCW!in#C zI@}scZlr3-NFJ@NFaJlhyfcw{k^vvtGl`N9xSo**rDW4S}i zM9{fMPWo%4wYDG~BZ18BD+}h|GQKc-g^{++3MY>}W_uq7jGHx{mwE9fZiPCoxN$+7 zrODGGJrOkcPQUB(FD5aoS4g~7#6NR^ma7-!>mHuJfY5kTe6PpNNKC9GGRiu^L31uG z$7v`*JknQHsYB!Tm_W{a32TM099djW%5e+j0Ve_ct}IM>XLF1Ap+YvcrLV=|CKo6S zb+9Nl3_YdKP6%Cxy@6TxZ>;4&nTneadr z_ES90ydCev)LV!dN=#(*f}|ZORFdvkYBni^aLbUk>BajeWIOcmHP#8S)*2U~QKI%S zyrLmtPqb&TphJ;>yAxri#;{uyk`JJqODDw%(Z=2`1uc}br^V%>j!gS)D*q*f_-qf8&D;W1dJgQMlaH5er zN2U<%Smb7==vE}dDI8K7cKz!vs^73o9f>2sgiTzWcwY|BMYHH5%Vn7#kiw&eItCqa zIkR2~Q}>X=Ar8W|^Ms41Fm8o6IB2_j60eOeBB1Br!boW7JnoeX6Gs)?7rW0^5psc- zjS16yb>dFn>KPOF;imD}e!enuIniFzv}n$m2#gCCv4jM#ArwlzZ$7@9&XkFxZ4n!V zj3dyiwW4Ki2QG{@i>yuZXQizw_OkZI^-3otXC{!(lUpJF33gI60ak;Uqitp74|B6I zgg{b=Iz}WkhCGj1M=hu4#Aw173YxIVbISaoc z-nLZC*6Tgivd5V`K%GxhBsp@SUU60-rfc$=wb>zdJzXS&-5(NRRodFk;Kxk!S(O(a0e7oY=E( zAyS;Ow?6Q&XA+cnkCb{28_1N8H#?J!*$MmIwLq^*T_9-z^&UE@A(z9oGYtFy6EZef LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/packages/openscore-nextjs/public/logo-black.png b/packages/openscore-nextjs/public/logo-black.png new file mode 100644 index 0000000000000000000000000000000000000000..95bfeaf675e0c20305b0efd94759f203942b54a8 GIT binary patch literal 9648 zcmeI2RZv_{^yhI1!Ce9bx8O1)xCeq0LSP8)GQdD^_n^Tw1PSg08{FMBzyJdb?(VSj z+uhgy+dl5CTet4Fs{3^JIeoiM-Ou@@LhotBWQCV0zItOnhMXn(o=*~uh)(S*A1(@$<;BdTgWR~%!0``_7&TT zXmcE@eW^2{(%c(NhdhE9Mr2ll6d*U}Z`C${AD1!prv@KO3i{BougPYwdGO;6-_{9B zs+IU_{c;H`@-PWEW!50d`5`UiBtViLEb&p0-RfP2yX|LL74L5e`H}qUU|p|?8G9ro zh9D(5>CYZnN5AgONaV=|GI=qLQ3eZsjym-@6=zZ7ZAD-bM9@p2wW35)eC8%3AVkf3 zTg=JESy{OODXVPphmV^#7nQA+?fX>~we0-6x#QX^-QUl6zAp39xf*sxlP35dZ+do? zx_Z@ecN(vS!^J}3W{ZWF`AhwOxpDW8d5lLBV)NPIk>GlWg8R$ z4PjwT4MxdxWv=lY`NJ#v7EGLxVUKqZ4rArZXoRD)B6NC|w8ZC4%UNKptO#P1UTe2# zzE`mIZC)E*LOGDk42l>-v{C@lMM`lXG33=4wg$BwQD;vUD9(SkX}0_$P>?8SOHq99k%@<^ffmNi37< z;j?mqEfkrbH-0SQk8ahpvGDLC$}Fv2jD&A2029EOwaK@gz5X8EM z5%x;94S_mh;4*08AIQI}lq~4HM4tz|vM8}cF1RLUp2}hQ;M!6d(`o3weg~oMc`UJ+|G1AoQ4!B@y0JPcjw{vp)dfLIXh}ekTj}5q& zZd3fwHcn~eAHYFg0@95YZZA*c5Y$4D;{m@Hm>#xnj9*2cUG5%A9e;MS##YZC54Yq8 zN!$$^X5G4yw?LPcJx)lCbL2brC(bf*n{ro4K~lrV(K(KuXl;uznZKFnHVvc?!QK+L zLQ88clK*0+-FfHt1+jQ2Xq!(rqEok{MPz%z@j7rE*0K?EA*Ao8-x=ik*VL6@#|nbz zwK4UfSH1D9+gLenI+>$XtjH7nKxE}h6%y{`{q8d>m8c=L4$pO6?F1XgI=|^bj4`w> z!H&feq6%1Ou)4dnc)K-Ov%uxzQf5}J9?Tmu58_f(%LS0&&tzT|n+MB&JvjNnAXe~t zs>#B1IhMEz8cUsuM%I`nIZwkm#));{KWGkp6CCH!owPrxbhA&i7#^HE7;dvV*w58a z&ssBl1S8T`OK3&?rZvV zZZZ48E0BSXEly$3KqC5}y>$XCW|gBq#ul4e4HQNLc-_5nPZK83_APOvR9n^wO>DK# zOSgFMttd6+_81un8b%LaIEFn3re()V$7UB@<=i|8kzJcVKrV=+bScX~w>DCqH1kx{>GM@nF7U5RwhyUu;CG*1s9u69|fCJ+xMWUEq zx^0i^J0_yMUvTj8*Es&lJlxdwv|tYGsJzbi4?G|@SW?fTyP~N@{pI3LSY{nizx&I2 zwRS41GVmWfOcB&b38`s;|Ma@E&iu4MZp86o=!Sx35A_Nck@kUIDmir|`iq*hLwhZJuId*YD^4N$(fFsha6G zjE$EcCUEzc9XcF_QrN|;07tex-p3neZC=me#)WyJ(-|v$Z7%yFZ=5EI3 z03+_y5&c1VF^wF{3$j#bv*uX4>6Sn0maY--NSBU|NX^jLAt6vt8sH_o>&x}(SX7o) z6}0)~Awb;FfpB7~BeGNkeJ!LrUNtaz!aPOHWLTIot_)c`d<-y4_55&lE$ewjf6r+W zFX-_4UwL&S=Zu3!kbLHkPayT4$Sc0rQasZJTY1-I9bfMUe&x{B-Vbv5jP zxI%n2YWbwmNu~%axRkX;y6v-_=R?1&Hl@R8Em-fqcg%8asd z%#R6nN2>kIjen~Rp{k1`lZotAs=o~{A=L_d??J5tgffGtM3S98D@$8blX0f_IKIaE zE#GeA-5=E(=N6DDX5Rc}1oXHxk@CBC*N3g0h*^SXZXMbv+R!b}Q-)9(A149uF@8ds ztOe^;(*)}Ccjq^lxvPKpBd52nzk8HLXB_h;E)_}!Mz739(_Tm+>y8dxkN;7ex5uY$ zxHHhcXd5gRp3hu8Wvt2s>i`5+74iIM)%^~cVt`C-Q+6N*76`pJA}_##Pu?$f%wtxC z@}sW7M7=<;s$f`e;34qTu?^w*_`g zr$^cIP}_pNC1bu4JOa#HA>wlQMu_OXCS?@UX(~ zlgqTqqVHt%21w~$x5%q~dORsI$)3-TlaA~pyeQl7%j(KK3@EYFaGOXe{K}68WYu`X zbPAZ8uaBR1!duk$7cfYN3>g$XOi69dtIxz>>$ULhjFzI z=MvrtPXCNPtY*=PAO#R7LScK2Ry}{;cAAE&#Q6`Mmo*;gxjK4GSLiOJOLQA+jT zHV*t2Y<6{T4Q+cUGNE67iMq9#J&lS>!ag}&HcV=TC@vJ_p#M(9d8(UoFZ8PaoueW{ zrqg5pRr%^sF`I5@l(uIh!|0Nl817b|aL!Hg`K)@M;TP(+g}}so3C*~FSQVb|b31-V zz9C%Yturi(oF8^C2{lKtm1o3ndc^z2^w-_jw^W+}_isID>X@e$Af)rE6)d-S>byu7 ztF&HB8a4hIW}Ce2E$xg>zH>JvYSe}bi}!VUkMV%`DKzghEU*hFN>5EzsK8z4H#vjg z@#BT2Z$lboyCq>2jS4@hebU=wHToS-yB=@9g(>jt9!CeWWgYq)-G{^W9j)u<)xA)z z4(t+^y)&}${E(|q1=f8OMM#QIvOMq2(Ms;zNi6OHhm#f*uKa)TE=x2G+HqiS|G{tO za`ZN_-z%^(TDPGCUUrbJ*oCkD1l|P!b%4=lT#h!V5T5dm(1wEg$H_@xl9> zd`HBxY^T3;*DLD_tUu(n3}z47F&7CrnBk^gTk6JX6}(XVX^E@6F5+*^-jI<^(oGg@ z2W1l;$z>JVijorpw;+|(@rvQ2pd0(;c)fbsmxPV+bHZTjfUONnr?I*_Y_wBNiHVOO z-&-csrrirB<+H-AotdGIKs$^DTb${60t58LXvs@t>+kjAxGWGZp)8|GJY_vl^PD-C zW?-#A%5o|^t-N?OLEkI!Y|sI_d|H$cTN;&QtpyYK6t;JOhu_Y9pAh2MLuQ7aJv;4l zU=#puF~Qb;5d9cpRb4fSm)?qYaTLUE{W{B}A#V{VM$R$b%$%WS+mZq4}wfwDP`@yyg7VnU(1r01rrGh%7@N z9!sOV*H#hr{GgVIV^9QY4P2;~iY7!hoI_p)Io_sg`)1~>3#6;|YjtMXOu2C$xp%HO zpuS_Dd}1Qa^Y~;NWk?$bT@6o;ED+e6cnUIlLUuuR0;Wp_AoY9z7VG))q)Iv~CS;<1 z!O37mZ>`Q^5IJInpmRT)yrba5G=KP);)MFKc!`GzFw=lMfLzv6E*f>UsHl|_g*Bi! z^;fP#QH}_lY>zV$ELBP5PnE#}5TVgr>2~?};{Uq>!|Q`22Bs>gQ^*!;olot-q-#)jZiF)%o*x`E2Ru|xlkE4>=Ayz1POKIj-fJ_3yDO_A`9=l7@NQU&oGl$4)jZ64}V*={6Nvi;i@mWuw4 z`FByfd-YE(H^PJVP}ntRS?ncq*0qf-T;6 zShHz)@d6e&(dZkb;~nig=Z~+)S%{Ldi;+F$cFO2|8t$AFh@1AKu<|Vuk%+B2ga!)y z5r#xX%OzJ)O-yn+2<4Yd*4z1OH9_mU5Z;%Il4~2d!&=gLl``u^rY{rKRLrTNlf&9J z)*+WfeJJVK92CVLsS}hjFBu-r0;mpVJN(#tEXsp%gkLr;tAav4AKC~PdAt1GTUlfx zcXTp1tg(D^fY4V7N_V96&Iu7=51L7ZAHC>|TXmsU(o#blbRK!ooPq7g2md7&P=sSH zaXc{Ho4TSUD8<7jtP6bulMJuOL3W70lYpb0DB}|amr-s_!ZnlJOwV=VXBag9T7VRB zm_%ar#2G{i!`Mtret?62+bk5|9-$KY6FQiJIh`qS?n*rviv?gWDeJ`M;)7%)b|=Nz zm+mjvsv!4n>X}~ErNl{`FSE=)-#GqQ_!hHT5Um6n9IJ`=hPGr_ibK-*Onl&{q7ig( z7;qgJ@xq1b6{7=U7BzR%@p55zdWFol+THRNIEf+W%V%bp=pQn95kG}RAU4{u7rG|m1Q zv|+oIf3L*xIaIEx&*RrVPvfgo%BG#Typ`NxjI?4ifO{lIMwxk@a<{3sAdtwl%Y#;8nSekRR;TJDudFn!@mI-A}-ajUB| z4`a5mOnzHKBZA(DX9cRR%{TtCPl)^((k0HjI$Qb7o)hcmGaXOuVI!{IEqLm z5!}tv;w6N&nEwE0RutW@WJRhMh}4=f5L2FWaa{jJhKI?bI^pRw<8Q4N8Dfa5j#R~} zX?Gyv)P-Ss`*vem$Z_<=*Z&Oq zUIxuWhBr`%_o66(-dr2~HI{>PL0BfP(B~C2@N2K9E`V?hyjH6bT)$r{EA_mvyNRw) z4=HuWp9k1Ju}N3xy)8S6K4oWWzzzX0M=^ua5J>$CGwc2a+ z^j;&P(FD(@4Wc&lVaTE3Zp{%hWgQh`hK)ZB|1g--`BwxkeqmrNVHpL+f)3GCYfXww zihy7c)L5OH7&eWRW35qrBKtTe9UW2{j(h07iP<%K!O8?^DqEud6IigEiSqgkc?6?! zNxR!5o5+?(u(d)FyCL;_!i+Cp4b41AqwUhino}z&a@Id%nUBW7HN{PBi(n}aKbrbV z7xOQ4?qirS0Kg8LGrezEQup9nB33h_;P89WtELHELmW{IE<@C@zo6VY;cO)N?vj*%x@NmH_L(IJdAsvJ>sg0JLEd$ zibeORr_^ze^|f2)lIGc|2W2YVP<~=8b=h>`rjf66>A<9OwtCH}E5>0Ly9qf1Rq?0_ zNugm$FX1yJFjmlWmR2RUMr33}=3}Y!8UZYGX;+=32s+8mW`PkDywz_0A&WLN4s(U( zq6$y<_~?p98i03mP`0x@;xPKKqbK|E99uLHV0c#86LIhdDJJ%Ua?n!mum<_~yDnp1 zBGqcw17sjN-Vx&QC8VY;>4VdW$2Pk^IJFUun^77X&eg7vJ7r$UA?V5WV2c7WWiMbC{GD-- zMGXos2aH+#!;Dk!rcp1R-!CZF0avXCkg+NK0*@7#zE}XB#AjAaliA9kGpUnrzY2Jg z?`ZrI z2iBF)y(aO(oUa-k9%hzzoWwN!P-IK>xUon7dI%gmPBdb8w3jWp8?jePX^90+X$(1L zojM^*PTL}@j`N#oE^=St^5$V#`EWTZ>^f~kIy2>DU33%YWRG-{SzOeU+_e@+jA!b5 z6>(a@3H)aSO|qiml-)6l&5VpPXNV_sl4 zvFO2M7wkkTfx=K1)!LFrIkiU6bhPzx5|P? zE^TY{c+})x<+Pxy7Z}YMEh-7jtx!H1UyI>uiwrnfF&N~`v>osx{oQ9fE9C1jYo#a>lSAkOSL3dc8N%f96#`sRR@O9Cf2 zIE4;38k-U<8uE$r>PPD8%V_0QOYGB~@cr)BIIO944=TuN0^927(j{37G;2unW;Vq} zz}Pn6bzin;rusB8;l?E`)h7rFqsm?~m_WHk(aQsRs`MNuR zZ$WHG_C83s6JsV{#Ql;}3{tT^;55EjvA~9HMetH=* z*VTi}2FW3k8U?ce3n?yB4}8GOMNn&I)VoLQJe@%rB(@>W5FY`}O0Ux{M!v3ZG=QWx z8dE8f3uDA`zQ6jU0(md$cwy^k;K^^kr(t$&XKNuhlo3Y`t$}Ytg}4Z7omrd8u{9^g z3jf4Vy=pjvZ@<}y`x?2uDKTI&JVwUjO4eqykneDZAtaOvO3vJTjM2QK9r65nWX%E{ z^@A}DYf1XD;)XW|h2clxydQx1@@fBRtJ9QycKIU3f1)u1dGl&$Y!N{uNS>ta(mla{ z>CA7*#4HB-(E*iSJ?XV-@w6;;iF_VpQg>pM0uQUjxnH;An%!nVJ&% zWY*5A6AY~T*qiPK=?52sKpzo#*OFv+nc-Hkvz``d3N+|CSllhwYs!Xk!#{#+!ddtLpJM2n9jorPNcDvL^lIH(?UuxN_rqD& zJX0{(CF_bU<5#HK2%oP`XVtTPCv^4sXMR}+{t3`QUew_7Koh<#LgR?>EBouZ{a}}L zM+n8xg=PNKSyeT#s`hXhHZrCchewB+BV;dqdJ{F>$~?t_JUn>-daDFU4s#;edDzXE z1S2flK4=0>%49c%>~HzLI$hwf`X8|84UIYDjpNdaHnfpZ&E;+;1~6ndp70;6lDQtJ z&Z~b$L##W!Vte^Bm7~ezlx|ulnSitaFkXGMIkzuwg%vJAViru+~^ zB_DUp2c;#zeK%eU%uita?}1I;aK&sv>tpkrXCqvFnzrVB(Yxdh+ZAQN__%ljJ@jkm zxzFV3Y!244J8*Pw=r?!B&iu#i&W2*Y1by`#HGL2>Ud6JVpRCut6%jxJkv@;xImvpzxs{>pvmt$0G{qgxmA=@1O7Kd(+)nj*n=_zd7gF9bT8%cY3>f zj@1yQeiGB{-YEI))w>l#baTAIU&Jx|Op;a!{f zzXtfaozY_xn1xSR_eboAz`XD6`DUBL9d(Ot$Az>QAD+GI#PdyF&qE4No9F$Gk!9ON z+_!ImRap16`0dVRXCB9{@NGUptNnW*;q_eR)|XtfH1DJ=g@=lq9*&S^;;vTBE3(|( zrD)(VI7;~^G-RHo3y-b?P8E}h;IOU<7juf)77+*vZSBM`;mWGvS~0-@CZ?h(WGWT- zC*7pPKt_|k{ge8X9dm;B6&Hp!2`HTB-vNcHWBoO=JV<7Q4t=P1inTVW7FzB2w8WDU(rYh3!@!=X?JNBmz2bQz8z4AQlJHJI?08qn@p_TCi2 zh~Tm)wYUub>8Q>32#71t`I<%vc)LZW`Wg79zd{L)k(U?=eLi_xnPpA^DD;f#Qs4Lw z76%f4Nbr;+Wp}{wBT|I32)-t1tBIx_Y3-X%Mqp}H*(R2>{uqN07>YP7ZMUE-suc^x5W$-=S!VeneRwKzJK2`+k@Tpa}ZuaJW?qW@P7AV?|wg-r(M zUrvlr4Ye48Zrj5z?#kt{d^RnG9Jkmd(y<6aoHZ$h$m#bxOol$%Fi|k|QXveCDeCCl ziJdx~UKLhJjB^}(A)=T=z;zZm-DK01!_L-0SJe9)jF+^j@8# z1jgqIoMA!MS~BMV6YGa4ONk*ep*Hq@uJmFc3&P0 + + \ No newline at end of file diff --git a/packages/openscore-nextjs/routes.ts b/packages/openscore-nextjs/routes.ts new file mode 100644 index 0000000..84bf0ef --- /dev/null +++ b/packages/openscore-nextjs/routes.ts @@ -0,0 +1,19 @@ +export interface Route { + name: string; + link: string; + items?: Route[]; +} + +const routes: Route[] = [ + { name: "Home", link: "/" }, + { name: "Leaderboard", link: "/leaderboard" }, + { name: "Forecast", link: "/forecast" }, + { name: "Rules", link: "/rules" }, + { + name: "Admin", + link: "/admin", + items: [{ name: "Matches", link: "/admin/matches" }], + }, +]; + +export default routes; diff --git a/packages/openscore-nextjs/styles/components/_empty_screen.scss b/packages/openscore-nextjs/styles/components/_empty_screen.scss new file mode 100644 index 0000000..be11a14 --- /dev/null +++ b/packages/openscore-nextjs/styles/components/_empty_screen.scss @@ -0,0 +1,7 @@ +.empty-screen { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} diff --git a/packages/openscore-nextjs/styles/components/_forecast.scss b/packages/openscore-nextjs/styles/components/_forecast.scss new file mode 100644 index 0000000..de78a75 --- /dev/null +++ b/packages/openscore-nextjs/styles/components/_forecast.scss @@ -0,0 +1,13 @@ +.forecast { + &__main { + display: flex; + flex-direction: column; + gap: 1rem; + } + + &__matches { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 1rem; + } +} diff --git a/packages/openscore-nextjs/styles/components/_leaderboard.scss b/packages/openscore-nextjs/styles/components/_leaderboard.scss new file mode 100644 index 0000000..fd869ff --- /dev/null +++ b/packages/openscore-nextjs/styles/components/_leaderboard.scss @@ -0,0 +1,62 @@ +.leaderboard { + &__line { + border-radius: 0; + + &:first-child { + border-top-left-radius: $card-border-radius; + border-top-right-radius: $card-border-radius; + } + + &:last-child { + border-bottom-left-radius: $card-border-radius; + border-bottom-right-radius: $card-border-radius; + } + + & .card-body { + display: grid; + grid-template-columns: 1fr 0.7fr 2rem; + align-items: center; + margin-left: 2rem; + margin-right: 2rem; + } + } + + &__score { + font-size: 0.8rem; + } + + &__name { + font-weight: 600; + } + + &__country { + font-size: 0.9rem; + } + + &__position { + background-color: #faf6fe; + border-radius: 50%; + width: 1.3rem; + height: 1.3rem; + overflow: hidden; + display: flex; + align-items: center; + justify-content: center; + } +} + +.top__three { + & .leaderboard { + & .leaderboard__position--1 { + background-color: gold; + } + + & .leaderboard__position--2 { + background-color: silver; + } + + & .leaderboard__position--3 { + background-color: #cd7f32; + } + } +} diff --git a/packages/openscore-nextjs/styles/components/_loading_screen.scss b/packages/openscore-nextjs/styles/components/_loading_screen.scss new file mode 100644 index 0000000..c8eb904 --- /dev/null +++ b/packages/openscore-nextjs/styles/components/_loading_screen.scss @@ -0,0 +1,8 @@ +.loading-screen { + margin-top: 8rem; + + & .spinner-grow { + width: 3rem; + height: 3rem; + } +} diff --git a/packages/openscore-nextjs/styles/components/_login.scss b/packages/openscore-nextjs/styles/components/_login.scss new file mode 100644 index 0000000..ed7d0e1 --- /dev/null +++ b/packages/openscore-nextjs/styles/components/_login.scss @@ -0,0 +1,48 @@ +.login { + height: 100vh; + display: grid; + grid-template-columns: 0.7fr 1fr; + background-color: white; + + &__form { + display: flex; + flex-direction: column; + height: 100%; + align-items: center; + justify-content: center; + + & form { + width: 50%; + display: flex; + flex-direction: column; + } + } + + &__header { + position: relative; + & img { + width: 15rem; + padding-left: 1rem; + padding-top: 0.5rem; + } + } + + &__left { + position: relative; + display: grid; + grid-template-rows: 4rem 0.8fr; + } + + &__right { + position: relative; + + & img { + filter: saturate(1.6); + } + } + + & > * { + width: 100%; + height: 100%; + } +} diff --git a/packages/openscore-nextjs/styles/components/_match.scss b/packages/openscore-nextjs/styles/components/_match.scss new file mode 100644 index 0000000..9355de9 --- /dev/null +++ b/packages/openscore-nextjs/styles/components/_match.scss @@ -0,0 +1,34 @@ +.match { + &__results { + display: grid; + width: 80%; + margin-left: auto; + margin-right: auto; + grid-template-columns: 1fr 1fr 1fr; + align-items: center; + justify-items: center; + margin-bottom: 1rem; + } + + &__flag { + border-radius: 50%; + overflow: hidden; + width: 50px; + height: 50px; + display: flex; + align-items: center; + justify-content: center; + + & > img { + scale: 0.1; + } + } + + &__selection { + width: 80%; + margin-left: auto; + margin-right: auto; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + } +} diff --git a/packages/openscore-nextjs/styles/main.scss b/packages/openscore-nextjs/styles/main.scss new file mode 100644 index 0000000..13734fa --- /dev/null +++ b/packages/openscore-nextjs/styles/main.scss @@ -0,0 +1,50 @@ +@import url("https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&family=Quicksand:wght@300;400;600;700&display=swap"); + +$primary: black; + +@import "bootstrap/scss/functions"; +@import "bootstrap/scss/variables"; + +$secondary: $gray-600 !default; +$success: $green !default; +$info: $cyan !default; +$warning: $yellow !default; +$danger: $red !default; +$light: $gray-100 !default; +$dark: black; + +$font-family-base: "Open Sans"; +$display-font-family: "Quicksand"; +$headings-font-family: "Quicksand"; +$card-border-width: none; + +$dropdown-dark-bg: $dark; +$dropdown-border-width: none; + +$theme-colors: ( + "primary": $primary, + "secondary": $secondary, + "success": $success, + "info": $info, + "warning": $warning, + "danger": $danger, + "light": $light, + "dark": $dark, +); + +@import "bootstrap"; + +@import "components/forecast"; +@import "components/match"; +@import "components/leaderboard"; +@import "components/loading_screen"; +@import "components/empty_screen"; +@import "components/login"; + +body { + background-color: $gray-200; +} + +h1 { + margin-bottom: 2rem; +} diff --git a/packages/openscore-nextjs/tsconfig.json b/packages/openscore-nextjs/tsconfig.json new file mode 100644 index 0000000..99710e8 --- /dev/null +++ b/packages/openscore-nextjs/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/packages/openscore-ui/package-lock.json b/packages/openscore-ui/package-lock.json deleted file mode 100644 index 3169840..0000000 --- a/packages/openscore-ui/package-lock.json +++ /dev/null @@ -1,13444 +0,0 @@ -{ - "name": "@adrielparedes/openscore", - "version": "0.2.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@angular-devkit/build-optimizer": { - "version": "0.0.42", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.0.42.tgz", - "integrity": "sha512-BAYCVZ10ro6mgZQDZiNiVbX8ppygw4q7z/stpwG8WjMswgMRIcxsxYoC1VFuWcUPAf4UyfTIav6e8UZWA5+xnQ==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "source-map": "0.5.7", - "typescript": "2.6.2", - "webpack-sources": "1.1.0" - } - }, - "@angular-devkit/core": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.0.29.tgz", - "integrity": "sha512-jtUBA0pIrkdXcVqDmDrGlniqwM7NFOKdo7vWFDmCVLBbC9rZHeYW5Xv/+4HyBhGLJ4wxsAkUjsHKWGJINPPpiw==", - "dev": true, - "requires": { - "ajv": "5.5.2", - "chokidar": "1.7.0", - "rxjs": "5.5.6", - "source-map": "0.5.7" - } - }, - "@angular-devkit/schematics": { - "version": "0.0.52", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.0.52.tgz", - "integrity": "sha512-NtG8VB5aWtg0cw1Y7EJinJMuAnXsNdkQkkVe/i7CO6TPLyFQSFQCN1YojCr43l8jTWTRebRslrBawPCMOxsOgw==", - "dev": true, - "requires": { - "@ngtools/json-schema": "1.1.0", - "rxjs": "5.5.6" - } - }, - "@angular/animations": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.3.tgz", - "integrity": "sha512-K9rOsRGwt7Zmp/rNdvBmgBKqvEdgCyZF0kvwxrmZfq1Zj0GAkfTAKPL007493O6XFd+icfu/+kmYeqXBGB4gKA==", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/cdk": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-5.2.4.tgz", - "integrity": "sha1-wKQpqHENj+2xV/VG4hy0nUM19/c=", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/cli": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.6.7.tgz", - "integrity": "sha512-TprSjnQrEdrTsCAB5K/lCLuXZUH/y+l/BAR0aZLpubpZP8Ldgmq7q56trxL5wNSs3o6A8Vh43ZKNYOuKtnzlXQ==", - "dev": true, - "requires": { - "@angular-devkit/build-optimizer": "0.0.42", - "@angular-devkit/core": "0.0.29", - "@angular-devkit/schematics": "0.0.52", - "@ngtools/json-schema": "1.1.0", - "@ngtools/webpack": "1.9.7", - "@schematics/angular": "0.1.17", - "autoprefixer": "7.2.5", - "chalk": "2.2.2", - "circular-dependency-plugin": "4.4.0", - "common-tags": "1.7.2", - "copy-webpack-plugin": "4.3.1", - "core-object": "3.1.5", - "css-loader": "0.28.9", - "cssnano": "3.10.0", - "denodeify": "1.2.1", - "ember-cli-string-utils": "1.1.0", - "exports-loader": "0.6.4", - "extract-text-webpack-plugin": "3.0.2", - "file-loader": "1.1.6", - "fs-extra": "4.0.3", - "glob": "7.1.2", - "html-webpack-plugin": "2.30.1", - "istanbul-instrumenter-loader": "3.0.0", - "karma-source-map-support": "1.2.0", - "less": "2.7.3", - "less-loader": "4.0.5", - "license-webpack-plugin": "1.1.1", - "loader-utils": "1.1.0", - "lodash": "4.17.4", - "memory-fs": "0.4.1", - "minimatch": "3.0.4", - "node-modules-path": "1.0.1", - "node-sass": "4.9.0", - "nopt": "4.0.1", - "opn": "5.1.0", - "portfinder": "1.0.13", - "postcss-import": "11.0.0", - "postcss-loader": "2.1.0", - "postcss-url": "7.3.0", - "raw-loader": "0.5.1", - "resolve": "1.5.0", - "rxjs": "5.5.6", - "sass-loader": "6.0.6", - "semver": "5.5.0", - "silent-error": "1.1.0", - "source-map-support": "0.4.18", - "style-loader": "0.13.2", - "stylus": "0.54.5", - "stylus-loader": "3.0.1", - "uglifyjs-webpack-plugin": "1.1.8", - "url-loader": "0.6.2", - "webpack": "3.10.0", - "webpack-dev-middleware": "1.12.2", - "webpack-dev-server": "2.11.1", - "webpack-merge": "4.1.1", - "webpack-sources": "1.1.0", - "webpack-subresource-integrity": "1.0.3" - } - }, - "@angular/common": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.2.3.tgz", - "integrity": "sha512-RwQ/IjmpDdMecTz/wwQlKpHgF4Crr8kyqV9FJ+c+cHR8Riqlu2DOXSU7LIfDdGoo6Mpixdxd1rtHYfs7l9YBSA==", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/compiler": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.2.3.tgz", - "integrity": "sha512-OynSzUdEHwajQMoV2JuYq5IdiR2dlTCTAHhTLzrym85wOihvTvovEQwVhYYHyKERu85JIoaF1sXA42KIjMGfkw==", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/compiler-cli": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.2.3.tgz", - "integrity": "sha512-uoCxeyQSd8R/cwEbd0FIUXjnbPq0HXEsyu3WSu9Ek2jt52HL+x/gZQdFCRtjW/mvQNOqxrgrTtEkhJ398+VkXg==", - "dev": true, - "requires": { - "chokidar": "1.7.0", - "minimist": "1.2.0", - "reflect-metadata": "0.1.12", - "tsickle": "0.26.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "@angular/core": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-5.2.3.tgz", - "integrity": "sha512-tL9O8KA6KGjnlxqjuTytpC2OeKbxe/yHev0kmwo5CK0lDZU4UFetcItAzUXU1dyRuILTcBkbnFt9+nr1SZs/cQ==", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/forms": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.2.3.tgz", - "integrity": "sha512-PsMGbj/Slvsxxyl61QSSSFDCGHN1XK6kNxVQTVmAlVhP1LlaYqBOIgQy4K9CYWUeHqU/YCdhVaFb5quzZLtPYA==", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/http": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-5.2.3.tgz", - "integrity": "sha512-3kAj7YYws8J2zRu46fEXk6lYrgSK9s5YA6O4REZkLox/suK0wb6TsDIIhoMzScGctSzZESVyuWsvYMrDYCflPA==", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/language-service": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-5.2.3.tgz", - "integrity": "sha512-yBi8i2rUdq6WgYn2J+82QxqhKsl2ldH7/8Lk4ZQDbKgTBx5LmYLpNGg3TJGnZEUGtKhu8Rd1E3SBmc4qqrGXsQ==", - "dev": true - }, - "@angular/material": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-5.2.4.tgz", - "integrity": "sha1-noI3mDJCg9I+qDkVb6xby3NEPVU=", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/platform-browser": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.2.3.tgz", - "integrity": "sha512-60LgA4KK3BufBR7vwwcn3zTYuLlfDG3jFip7bvdgsDpURrUB0j6/pL5cbGElww4jnnxZ72uJzJRzSiGEofjc3g==", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.3.tgz", - "integrity": "sha512-PheS+KJQJiyvQg1lr+eX0/1b/rjLnDjgI1qvzwikrvGYymb2JdZ+rjllHBs1iotzQ+tG+hRnlktvgdFN134x/g==", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/router": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.2.3.tgz", - "integrity": "sha512-XVEpwNZta76FYas1gZSSGvkQoiGgQjvXfab6CwOh958d4c0C+9pJsykqsv6X/n8TSTShQt7wjs/vp/copXeuoA==", - "requires": { - "tslib": "1.9.0" - } - }, - "@angular/upgrade": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/upgrade/-/upgrade-5.2.3.tgz", - "integrity": "sha512-w43Wi+IXLR9X011W32Yokh0JRCffwIha6vMe2bFLV/Q8DWt+58LAn4tYUYDNpVgiMyCKtLGZcn2ZS+cNd0Ebbw==", - "requires": { - "tslib": "1.9.0" - } - }, - "@fortawesome/fontawesome-free-webfonts": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free-webfonts/-/fontawesome-free-webfonts-1.0.6.tgz", - "integrity": "sha512-3eF7kD6vndZSSUN+FOqtrAaa+3t6udoUwIdD9BGERao3t9ytjtr1tQRE1voj2Zc+b9uZNAoUi6wZdxGJb7Rspw==" - }, - "@ngtools/json-schema": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", - "integrity": "sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI=", - "dev": true - }, - "@ngtools/webpack": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.9.7.tgz", - "integrity": "sha512-D5QuaT9wENeM2j9g2qvW9Ls1tGqRz26Lp+jxwb2ZGFep7Ik1fFOX3ROLfgkxNlxZGVmbxJjsfrYUCyGlzj8gWg==", - "dev": true, - "requires": { - "chalk": "2.2.2", - "enhanced-resolve": "3.4.1", - "loader-utils": "1.1.0", - "magic-string": "0.22.4", - "semver": "5.5.0", - "source-map": "0.5.7", - "tree-kill": "1.2.0", - "webpack-sources": "1.1.0" - } - }, - "@schematics/angular": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.1.17.tgz", - "integrity": "sha512-PHE5gk/ogPY/aN94dbbtauHMCq+/7w4Kdcl7tGmSS8mPKEI0wa6XJi//Wq/tHi55lb2fP58oEZU6n6w/wQascw==", - "dev": true, - "requires": { - "typescript": "2.6.2" - } - }, - "@types/jasmine": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.6.tgz", - "integrity": "sha512-clg9raJTY0EOo5pVZKX3ZlMjlYzVU73L71q5OV1jhE2Uezb7oF94jh4CvwrW6wInquQAdhOxJz5VDF2TLUGmmA==", - "dev": true - }, - "@types/jasminewd2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.3.tgz", - "integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==", - "dev": true, - "requires": { - "@types/jasmine": "2.8.6" - } - }, - "@types/jwt-decode": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/jwt-decode/-/jwt-decode-2.2.1.tgz", - "integrity": "sha512-aWw2YTtAdT7CskFyxEX2K21/zSDStuf/ikI3yBqmwpwJF0pS+/IX5DWv+1UFffZIbruP6cnT9/LAJV1gFwAT1A==" - }, - "@types/node": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.0.tgz", - "integrity": "sha512-zkYho6/4wZyX6o9UQ8rd0ReEaiEYNNCqYFIAACe2Tf9DrYlgzWW27OigYHnnztnnZQwVRpwWmZKegFmDpinIsA==", - "dev": true - }, - "@types/q": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", - "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", - "dev": true - }, - "@types/selenium-webdriver": { - "version": "2.53.43", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz", - "integrity": "sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg==", - "dev": true - }, - "@types/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", - "dev": true - }, - "@types/strip-json-comments": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", - "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", - "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "dev": true, - "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "addressparser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", - "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=", - "dev": true, - "optional": true - }, - "adm-zip": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", - "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", - "dev": true, - "requires": { - "extend": "3.0.1", - "semver": "5.0.3" - }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true - } - } - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, - "amqplib": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.2.tgz", - "integrity": "sha512-l9mCs6LbydtHqRniRwYkKdqxVa6XMz3Vw1fh+2gJaaVgTM6Jk3o8RccAKWKtlhT1US5sWrFh+KKxsVUALURSIA==", - "dev": true, - "optional": true, - "requires": { - "bitsyntax": "0.0.4", - "bluebird": "3.5.1", - "buffer-more-ints": "0.0.2", - "readable-stream": "1.1.14", - "safe-buffer": "5.1.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - } - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - }, - "dependencies": { - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - } - } - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "app-root-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", - "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", - "dev": true - }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", - "dev": true, - "requires": { - "default-require-extensions": "1.0.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" - } - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", - "dev": true - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0" - } - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true, - "optional": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, - "asn1.js": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", - "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "ast-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", - "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", - "dev": true, - "optional": true - }, - "astw": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", - "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", - "dev": true, - "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", - "dev": true - }, - "autoprefixer": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.5.tgz", - "integrity": "sha512-XqHfo8Ht0VU+T5P+eWEVoXza456KJ4l62BPewu3vpNf3LP9s2+zYXkXBznzYby4XeECXgG3N4i+hGvOhXErZmA==", - "dev": true, - "requires": { - "browserslist": "2.11.3", - "caniuse-lite": "1.0.30000792", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.17", - "postcss-value-parser": "3.3.0" - } - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" - }, - "axios": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz", - "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", - "dev": true, - "optional": true, - "requires": { - "follow-redirects": "1.0.0" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.0", - "pascalcase": "0.1.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true - }, - "bitsyntax": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz", - "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=", - "dev": true, - "optional": true, - "requires": { - "buffer-more-ints": "0.0.2" - } - }, - "bl": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - } - } - }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "2.0.3" - } - }, - "blocking-proxy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", - "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", - "dev": true, - "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.15" - }, - "dependencies": { - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } - }, - "bootstrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0.tgz", - "integrity": "sha512-gulJE5dGFo6Q61V/whS6VM4WIyrlydXfCgkE+Gxe5hjrJ8rXLLZlALq7zq2RPhOc45PSwQpJkrTnc2KgD6cvmA==" - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-pack": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.3.tgz", - "integrity": "sha512-Jo+RYsn8X8OhyP9tMXXg0ueR2fW696HUu1Hf3/DeiwNean1oGiPtdgGRNuUHBpPHzBH3x4n1kzAlgOgHSIq88g==", - "dev": true, - "requires": { - "combine-source-map": "0.8.0", - "defined": "1.0.0", - "JSONStream": "1.3.2", - "safe-buffer": "5.1.1", - "through2": "2.0.3", - "umd": "3.0.1" - } - }, - "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserify": { - "version": "14.5.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz", - "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==", - "dev": true, - "requires": { - "assert": "1.4.1", - "browser-pack": "6.0.3", - "browser-resolve": "1.11.2", - "browserify-zlib": "0.2.0", - "buffer": "5.0.8", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "defined": "1.0.0", - "deps-sort": "2.0.0", - "domain-browser": "1.1.7", - "duplexer2": "0.1.4", - "events": "1.1.1", - "glob": "7.1.2", - "has": "1.0.1", - "htmlescape": "1.1.1", - "https-browserify": "1.0.0", - "inherits": "2.0.3", - "insert-module-globals": "7.0.1", - "JSONStream": "1.3.2", - "labeled-stream-splicer": "2.0.0", - "module-deps": "4.1.1", - "os-browserify": "0.3.0", - "parents": "1.0.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "read-only-stream": "2.0.0", - "readable-stream": "2.3.3", - "resolve": "1.5.0", - "shasum": "1.0.2", - "shell-quote": "1.6.1", - "stream-browserify": "2.0.1", - "stream-http": "2.8.0", - "string_decoder": "1.0.3", - "subarg": "1.0.0", - "syntax-error": "1.3.0", - "through2": "2.0.3", - "timers-browserify": "1.4.2", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4", - "xtend": "4.0.1" - }, - "dependencies": { - "buffer": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz", - "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==", - "dev": true, - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8" - } - }, - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true, - "requires": { - "process": "0.11.10" - } - } - } - }, - "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", - "dev": true, - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true, - "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "1.0.6" - } - }, - "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000792", - "electron-to-chromium": "1.3.32" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" - } - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-more-ints": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", - "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "buildmail": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", - "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", - "dev": true, - "optional": true, - "requires": { - "addressparser": "1.0.1", - "libbase64": "0.1.0", - "libmime": "3.0.0", - "libqp": "1.1.0", - "nodemailer-fetch": "1.6.0", - "nodemailer-shared": "1.1.0", - "punycode": "1.4.1" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cacache": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.2.tgz", - "integrity": "sha512-dljb7dk1jqO5ogE+dRpoR9tpHYv5xz9vPSNunh1+0wRuNdYxmzp9WmsyokgW/DUF1FDRVA/TMsmxt027R8djbQ==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.1", - "mississippi": "1.3.1", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.1.0", - "unique-filename": "1.1.0", - "y18n": "3.2.1" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "cached-path-relative": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", - "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", - "dev": true - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - } - }, - "caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000800", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000800", - "electron-to-chromium": "1.3.32" - } - } - } - }, - "caniuse-db": { - "version": "1.0.30000800", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000800.tgz", - "integrity": "sha1-qG5rwjvZpwfV30LzPmTQSVz9ohg=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000792", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000792.tgz", - "integrity": "sha1-0M6pgfgRjzlhRxr7tDyaHlu/AzI=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - }, - "dependencies": { - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - } - } - }, - "chalk": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.2.tgz", - "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "chart.js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.7.1.tgz", - "integrity": "sha512-pX1oQAY86MiuyZ2hY593Acbl4MLHKrBBhhmZ1YqSadzQbbsBE2rnd6WISoHjIsdf0WDeC0hbePYCz2ZxkV8L+g==", - "requires": { - "chartjs-color": "2.2.0", - "moment": "2.18.1" - }, - "dependencies": { - "moment": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", - "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" - } - } - }, - "chartjs-color": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.2.0.tgz", - "integrity": "sha1-hKL7dVeH7YXDndbdjHsdiEKbrq4=", - "requires": { - "chartjs-color-string": "0.5.0", - "color-convert": "0.5.3" - } - }, - "chartjs-color-string": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.5.0.tgz", - "integrity": "sha512-amWNvCOXlOUYxZVDSa0YOab5K/lmEhbFNKI55PWc4mlv28BDzA7zaoQTGxSBgJMHIW+hGX8YUrvw/FH4LyhwSQ==", - "requires": { - "color-name": "1.1.3" - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "circular-dependency-plugin": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-4.4.0.tgz", - "integrity": "sha512-yEFtUNUYT4jBykEX5ZOHw+5goA3glGZr9wAXIQqoyakjz5H5TeUmScnWRc52douAhb9eYzK3s7V6bXfNnjFdzg==", - "dev": true - }, - "circular-json": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.1.tgz", - "integrity": "sha512-UjgcRlTAhAkLeXmDe2wK7ktwy/tgAqxiSndTIPiFZuIPLZmzHzWMwUIe9h9m/OokypG7snxCDEuwJshGBdPvaw==", - "dev": true - }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "dev": true, - "requires": { - "chalk": "1.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "clean-css": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", - "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-deep": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz", - "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=", - "dev": true, - "requires": { - "for-own": "1.0.0", - "is-plain-object": "2.0.4", - "kind-of": "3.2.2", - "shallow-clone": "0.1.2" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "requires": { - "q": "1.5.1" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "codelyzer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.1.0.tgz", - "integrity": "sha512-a3FCIAS3FNQIACvj7KA4iKvH3c6r7X6t6zXsrtV797QGYPQyCwD1fIEd9yV+ZDamijF3YaZ5fbB7QbUMOJGC/g==", - "dev": true, - "requires": { - "app-root-path": "2.0.1", - "css-selector-tokenizer": "0.7.0", - "cssauron": "1.4.0", - "semver-dsl": "1.0.1", - "source-map": "0.5.7", - "sprintf-js": "1.0.3" - } - }, - "codemirror": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.37.0.tgz", - "integrity": "sha512-dQaayDJCLU4UJcwg2RM44oFrs0dMNndTp6qxQJF6XI71l1xN3RB4IqiKES0b0rccbARbrD/UBB4t8DNknfaOTw==" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" - } - }, - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true, - "requires": { - "clone": "1.0.3", - "color-convert": "1.9.1", - "color-string": "0.3.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - } - } - }, - "color-convert": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", - "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=" - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dev": true, - "requires": { - "color": "0.11.4", - "css-color-names": "0.0.4", - "has": "1.0.1" - } - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "dev": true, - "requires": { - "convert-source-map": "1.1.3", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "0.5.7" - }, - "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", - "dev": true - } - } - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", - "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==" - }, - "common-tags": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.7.2.tgz", - "integrity": "sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ==", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compressible": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", - "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "compression": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", - "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "bytes": "3.0.0", - "compressible": "2.0.12", - "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, - "connect": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", - "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.0.6", - "parseurl": "1.3.2", - "utils-merge": "1.0.1" - }, - "dependencies": { - "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - } - } - }, - "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.3.1.tgz", - "integrity": "sha512-xlcFiW/U7KrpS6dFuWq3r8Wb7koJx7QVc7LDFCosqkikaVSxkaYOnwDLwilbjrszZ0LYZXThDAJKcQCSrvdShQ==", - "dev": true, - "requires": { - "cacache": "10.0.2", - "find-cache-dir": "1.0.0", - "globby": "7.1.1", - "is-glob": "4.0.0", - "loader-utils": "0.2.17", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "p-limit": "1.2.0", - "pify": "3.0.0", - "serialize-javascript": "1.4.0" - }, - "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - } - } - }, - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" - }, - "core-object": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/core-object/-/core-object-3.1.5.tgz", - "integrity": "sha512-sA2/4+/PZ/KV6CKgjrVrrUVBKCkdDO02CUlQ0YKTQoYUwPYNOtOAcWlbYhd5v/1JqYaA6oZ4sDlOU4ppVw6Wbg==", - "dev": true, - "requires": { - "chalk": "2.2.2" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.7.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } - }, - "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.10" - } - }, - "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.10.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.6", - "randomfill": "1.0.3" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-loader": { - "version": "0.28.9", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.9.tgz", - "integrity": "sha512-r3dgelMm/mkPz5Y7m9SeiGE46i2VsEU/OYbez+1llfxtv8b2y5/b5StaeEvPK3S5tlNQI+tDW/xDIhKJoZgDtw==", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.2.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "css-parse": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", - "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", - "dev": true - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.5.1", - "nth-check": "1.0.1" - } - }, - "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true, - "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true, - "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.1", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.2", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000800", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000800", - "electron-to-chromium": "1.3.32" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true, - "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" - } - }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "requires": { - "array-find-index": "1.0.2" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.38" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "data-uri-to-buffer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", - "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==", - "dev": true, - "optional": true - }, - "date-format": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", - "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", - "dev": true - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true, - "optional": true - }, - "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", - "dev": true, - "requires": { - "strip-bom": "2.0.0" - } - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - } - }, - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "degenerator": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", - "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", - "dev": true, - "optional": true, - "requires": { - "ast-types": "0.10.1", - "escodegen": "1.9.0", - "esprima": "3.1.3" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true, - "optional": true - } - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dev": true, - "requires": { - "JSONStream": "1.3.2", - "shasum": "1.0.2", - "subarg": "1.0.0", - "through2": "2.0.3" - } - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "detect-node": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", - "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", - "dev": true - }, - "detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "dev": true, - "requires": { - "acorn": "5.4.1", - "defined": "1.0.0" - } - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "diff": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", - "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" - } - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "1.1.1" - } - }, - "dom-converter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", - "dev": true, - "requires": { - "utila": "0.3.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", - "dev": true, - "optional": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "duplexify": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz", - "integrity": "sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", - "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.32", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.32.tgz", - "integrity": "sha1-EdBoTAhA4APEvoko+KxfNdvCtOY=", - "dev": true - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "ember-cli-string-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz", - "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "engine.io": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.4.tgz", - "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=", - "dev": true, - "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.6.9", - "engine.io-parser": "2.1.2", - "uws": "0.14.5", - "ws": "3.3.3" - }, - "dependencies": { - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - } - } - }, - "engine.io-client": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz", - "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.6.9", - "engine.io-parser": "2.1.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "3.3.3", - "xmlhttprequest-ssl": "1.5.5", - "yeast": "0.1.2" - } - }, - "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary2": "1.0.2" - } - }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "errno": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", - "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", - "dev": true, - "requires": { - "prr": "1.0.1" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", - "dev": true, - "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.38", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz", - "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", - "dev": true - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", - "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", - "dev": true, - "optional": true, - "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.5.7" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true, - "optional": true - } - } - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" - } - }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true, - "requires": { - "original": "1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" - }, - "dependencies": { - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "0.1.1" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "exports-loader": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz", - "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "source-map": "0.5.7" - } - }, - "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "extract-text-webpack-plugin": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", - "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", - "dev": true, - "requires": { - "async": "2.6.0", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0", - "webpack-sources": "1.1.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true, - "optional": true - }, - "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - }, - "file-loader": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.6.tgz", - "integrity": "sha512-873ztuL+/hfvXbLDJ262PGO6XjERnybJu2gW1/5j8HUfxSiFJI9Hj/DhZ50ZGRUxBvuNiazb/cM2rh9pqrxP6Q==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "dev": true, - "requires": { - "glob": "7.1.2", - "minimatch": "3.0.4" - } - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "1.0.1", - "make-dir": "1.1.0", - "pkg-dir": "2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "flag-icon-css": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/flag-icon-css/-/flag-icon-css-2.9.0.tgz", - "integrity": "sha512-SeHvGEB43XFPZiJz6lFFRGHfp+Db+s1qGiClW70cZauQVbPM42wImlNUEuXSXs94kPchz7xvoxP0QK1y6FxLfg==" - }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", - "dev": true - }, - "flush-write-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", - "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "follow-redirects": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", - "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.9" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "1.0.0" - } - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "1.1.14", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "requires": { - "globule": "1.2.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.1.tgz", - "integrity": "sha512-7aelVrYqCLuVjq2kEKRTH8fXPTC0xKTkM+G7UlFkEwCXY3sFbSxvY375JoFowOAYbkaU47SrBvOefUlLZZ+6QA==", - "dev": true, - "optional": true, - "requires": { - "data-uri-to-buffer": "1.2.0", - "debug": "2.6.9", - "extend": "3.0.1", - "file-uri-to-path": "1.0.0", - "ftp": "0.3.10", - "readable-stream": "2.3.3" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "glob": "7.1.2", - "ignore": "3.3.7", - "pify": "3.0.0", - "slash": "1.0.0" - } - }, - "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", - "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "minimatch": "3.0.4" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "handle-thing": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", - "dev": true - }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } - } - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - } - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-binary2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", - "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hipchat-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz", - "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=", - "dev": true, - "optional": true, - "requires": { - "lodash": "4.17.4", - "request": "2.81.0" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "1.0.0" - } - }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "obuf": "1.1.1", - "readable-stream": "2.3.3", - "wbuf": "1.7.2" - } - }, - "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", - "dev": true - }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true - }, - "html-minifier": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.8.tgz", - "integrity": "sha512-WX7D6PB9PFq05fZ1/CyxPUuyqXed6vh2fGOM80+zJT5wAO93D/cUjLs0CcbBFjQmlwmCgRvl97RurtArIpOnkw==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.9", - "commander": "2.12.2", - "he": "1.1.1", - "ncname": "1.0.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.3.9" - } - }, - "html-webpack-plugin": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", - "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "html-minifier": "3.5.8", - "loader-utils": "0.2.17", - "lodash": "4.17.4", - "pretty-error": "2.1.1", - "toposort": "1.0.6" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - } - } - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true - }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" - }, - "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", - "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=", - "dev": true - }, - "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", - "dev": true, - "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz", - "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", - "dev": true, - "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" - } - }, - "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", - "dev": true, - "requires": { - "http-proxy": "1.16.2", - "is-glob": "3.1.0", - "lodash": "4.17.4", - "micromatch": "2.3.11" - }, - "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "httpntlm": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", - "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", - "dev": true, - "requires": { - "httpreq": "0.4.24", - "underscore": "1.7.0" - } - }, - "httpreq": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", - "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=", - "dev": true - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "https-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", - "dev": true, - "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dev": true, - "requires": { - "postcss": "6.0.17" - } - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", - "dev": true - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true - }, - "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", - "dev": true, - "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=" - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "2.0.1" - } - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflection": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz", - "integrity": "sha1-W//LEZetPoEFD44X4hZoCH7p6y8=", - "dev": true, - "optional": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "insert-module-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", - "dev": true, - "requires": { - "combine-source-map": "0.7.2", - "concat-stream": "1.5.2", - "is-buffer": "1.1.6", - "JSONStream": "1.3.2", - "lexical-scope": "1.2.0", - "process": "0.11.10", - "through2": "2.0.3", - "xtend": "4.0.1" - }, - "dependencies": { - "combine-source-map": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", - "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", - "dev": true, - "requires": { - "convert-source-map": "1.1.3", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "0.5.7" - } - }, - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - } - }, - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "internal-ip": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", - "dev": true, - "requires": { - "meow": "3.7.0" - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ipaddr.js": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", - "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.11.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-my-json-valid": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz", - "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==", - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-odd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz", - "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", - "dev": true, - "requires": { - "is-number": "3.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - } - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.1" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true, - "requires": { - "html-comment-regex": "1.1.1" - } - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul-api": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz", - "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==", - "dev": true, - "requires": { - "async": "2.6.0", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.9.1", - "istanbul-lib-report": "1.1.2", - "istanbul-lib-source-maps": "1.2.2", - "istanbul-reports": "1.1.3", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "once": "1.4.0" - } - }, - "istanbul-instrumenter-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.0.tgz", - "integrity": "sha512-alLSEFX06ApU75sm5oWcaVNaiss/bgMRiWTct3g0P0ZZTKjR+6QiCcuVOKDI1kWJgwHEnIXsv/dWm783kPpmtw==", - "dev": true, - "requires": { - "convert-source-map": "1.5.1", - "istanbul-lib-instrument": "1.9.1", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" - } - }, - "istanbul-lib-coverage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", - "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", - "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", - "dev": true, - "requires": { - "append-transform": "0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz", - "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", - "dev": true, - "requires": { - "babel-generator": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.5.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz", - "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz", - "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", - "dev": true, - "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "istanbul-reports": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz", - "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", - "dev": true, - "requires": { - "handlebars": "4.0.11" - } - }, - "jasmine": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", - "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "7.1.2", - "jasmine-core": "2.8.0" - }, - "dependencies": { - "jasmine-core": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", - "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", - "dev": true - } - } - }, - "jasmine-core": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.9.1.tgz", - "integrity": "sha1-trvB2OZSUNVvWIhGFwXr7uuI8i8=", - "dev": true - }, - "jasmine-spec-reporter": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", - "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", - "dev": true, - "requires": { - "colors": "1.1.2" - } - }, - "jasminewd2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", - "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", - "dev": true - }, - "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" - }, - "JSONStream": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", - "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", - "dev": true, - "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "jszip": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", - "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", - "dev": true, - "requires": { - "core-js": "2.3.0", - "es6-promise": "3.0.2", - "lie": "3.1.1", - "pako": "1.0.6", - "readable-stream": "2.0.6" - }, - "dependencies": { - "core-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "jwt-decode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", - "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" - }, - "karma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.0.tgz", - "integrity": "sha512-K9Kjp8CldLyL9ANSUctDyxC7zH3hpqXj/K09qVf06K3T/kXaHtFZ5tQciK7OzQu68FLvI89Na510kqQ2LCbpIw==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "body-parser": "1.18.2", - "browserify": "14.5.0", - "chokidar": "1.7.0", - "colors": "1.1.2", - "combine-lists": "1.0.1", - "connect": "3.6.5", - "core-js": "2.5.3", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "4.17.4", - "log4js": "2.5.2", - "mime": "1.6.0", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.1.5", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.1", - "socket.io": "2.0.4", - "source-map": "0.6.1", - "tmp": "0.0.33", - "useragent": "2.3.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "dev": true, - "requires": { - "fs-access": "1.0.1", - "which": "1.3.0" - } - }, - "karma-cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", - "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", - "dev": true, - "requires": { - "resolve": "1.5.0" - } - }, - "karma-coverage-istanbul-reporter": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.4.1.tgz", - "integrity": "sha512-5og0toMjgLvsL9+TzGH4Rk1D0nr7pMIRJBg29xP4mHMKy/1KUJ12UzoqI6mBNCRFa4nDvZS2MRrN7p+RkZNWxQ==", - "dev": true, - "requires": { - "istanbul-api": "1.2.1", - "minimatch": "3.0.4" - } - }, - "karma-jasmine": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.1.tgz", - "integrity": "sha1-b+hA51oRYAydkehLM8RY4cRqNSk=", - "dev": true - }, - "karma-jasmine-html-reporter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", - "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", - "dev": true, - "requires": { - "karma-jasmine": "1.1.1" - } - }, - "karma-source-map-support": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz", - "integrity": "sha1-G/gee7SwiWJ6s1LsQXnhF8QGpUA=", - "dev": true, - "requires": { - "source-map-support": "0.4.18" - } - }, - "killable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", - "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "isarray": "0.0.1", - "stream-splicer": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "1.0.0" - } - }, - "less": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", - "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", - "dev": true, - "requires": { - "errno": "0.1.6", - "graceful-fs": "4.1.11", - "image-size": "0.5.5", - "mime": "1.6.0", - "mkdirp": "0.5.1", - "promise": "7.3.1", - "request": "2.81.0", - "source-map": "0.5.7" - } - }, - "less-loader": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.5.tgz", - "integrity": "sha1-rhVadAbKxqzSk9eFWH/P8PR4xN0=", - "dev": true, - "requires": { - "clone": "2.1.1", - "loader-utils": "1.1.0", - "pify": "2.3.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "optional": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lexical-scope": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dev": true, - "requires": { - "astw": "2.2.0" - } - }, - "libbase64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", - "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=", - "dev": true - }, - "libmime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", - "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", - "dev": true, - "requires": { - "iconv-lite": "0.4.15", - "libbase64": "0.1.0", - "libqp": "1.1.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", - "dev": true - } - } - }, - "libqp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", - "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=", - "dev": true - }, - "license-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.1.1.tgz", - "integrity": "sha512-TjKOyiC0exqd4Idy/4M8/DETR22dXBZks387DuS5LbslxHiMRXGx/Q2F/j9IUtvEoH5uFvt72vRgk/G6f8j3Dg==", - "dev": true, - "requires": { - "ejs": "2.5.7" - } - }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "dev": true, - "requires": { - "immediate": "3.0.6" - } - }, - "load-awesome": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-awesome/-/load-awesome-1.1.0.tgz", - "integrity": "sha1-W5nKuyjfqlW/REb2WMG63LaOypg=" - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", - "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==" - }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log4js": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.5.2.tgz", - "integrity": "sha512-MmZhzQCfCV5+nQgOqy34V9EV3k+Z/rPCdxyq+25EePKpwdUQxCb19BTmL5iX3iOCSAV/tWh7KVYqchwrx3+S2Q==", - "dev": true, - "requires": { - "amqplib": "0.5.2", - "axios": "0.15.3", - "circular-json": "0.5.1", - "date-format": "1.2.0", - "debug": "3.1.0", - "hipchat-notifier": "1.1.0", - "loggly": "1.1.1", - "mailgun-js": "0.7.15", - "nodemailer": "2.7.2", - "redis": "2.8.0", - "semver": "5.5.0", - "slack-node": "0.2.0", - "streamroller": "0.7.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "loggly": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz", - "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=", - "dev": true, - "optional": true, - "requires": { - "json-stringify-safe": "5.0.1", - "request": "2.75.0", - "timespan": "2.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "optional": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true, - "optional": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "form-data": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", - "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "optional": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.12.2", - "is-my-json-valid": "2.17.1", - "pinkie-promise": "2.0.1" - } - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.75.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", - "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "bl": "1.1.2", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.0.0", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "node-uuid": "1.4.8", - "oauth-sign": "0.8.2", - "qs": "6.2.3", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "optional": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true, - "optional": true - } - } - }, - "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "macaddress": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", - "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", - "dev": true - }, - "magic-string": { - "version": "0.22.4", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz", - "integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==", - "dev": true, - "requires": { - "vlq": "0.2.3" - } - }, - "mailcomposer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz", - "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", - "dev": true, - "optional": true, - "requires": { - "buildmail": "4.0.1", - "libmime": "3.0.0" - } - }, - "mailgun-js": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.7.15.tgz", - "integrity": "sha1-7jZqINrGTDwVwD1sGz4O15UlKrs=", - "dev": true, - "optional": true, - "requires": { - "async": "2.1.5", - "debug": "2.2.0", - "form-data": "2.1.4", - "inflection": "1.10.0", - "is-stream": "1.1.0", - "path-proxy": "1.0.0", - "proxy-agent": "2.0.0", - "q": "1.4.1", - "tsscmp": "1.0.5" - }, - "dependencies": { - "async": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/async/-/async-2.1.5.tgz", - "integrity": "sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw=", - "dev": true, - "optional": true, - "requires": { - "lodash": "4.17.4" - } - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "optional": true, - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true, - "optional": true - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true, - "optional": true - } - } - }, - "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, - "make-error": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.2.tgz", - "integrity": "sha512-l9ra35l5VWLF24y75Tg8XgfGLX0ueRhph118WKM6H5denx4bB5QF59+4UAm9oJ2qsPQZas/CQUDdtDdfvYHBdQ==", - "dev": true - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "1.0.1" - } - }, - "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", - "dev": true - }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "dev": true, - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "1.2.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "0.1.6", - "readable-stream": "2.3.3" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "requires": { - "mime-db": "1.30.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mississippi": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.1.tgz", - "integrity": "sha512-/6rB8YXFbAtsUVRphIRQqB0+9c7VaPHCjVtvto+JqwVxgz8Zz+I+f68/JgQ+Pb4VlZb2svA9OtdXnHHsZz7ltg==", - "dev": true, - "requires": { - "concat-stream": "1.6.0", - "duplexify": "3.5.3", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.2", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "1.0.3", - "pumpify": "1.4.0", - "stream-each": "1.2.2", - "through2": "2.0.3" - } - }, - "mixin-deep": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz", - "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==", - "dev": true, - "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "module-deps": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", - "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", - "dev": true, - "requires": { - "browser-resolve": "1.11.2", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "defined": "1.0.0", - "detective": "4.7.1", - "duplexer2": "0.1.4", - "inherits": "2.0.3", - "JSONStream": "1.3.2", - "parents": "1.0.1", - "readable-stream": "2.3.3", - "resolve": "1.5.0", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "2.0.3", - "xtend": "4.0.1" - }, - "dependencies": { - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - } - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "moment": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", - "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - }, - "nanomatch": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz", - "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "is-odd": "1.0.0", - "kind-of": "5.1.0", - "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true, - "requires": { - "xml-char-classes": "1.0.0" - } - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", - "dev": true, - "optional": true - }, - "ng2-charts": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-1.6.0.tgz", - "integrity": "sha512-9w0WH69x5/nuqC1og2WaY39NbaBqTGIP1+5gZaH7/KPN6UEPonNg/pYnsIVklLj1DWPWXKa8+XXIJZ1jy5nLxg==", - "requires": { - "chart.js": "2.7.1" - } - }, - "ng2-toastr": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ng2-toastr/-/ng2-toastr-4.1.2.tgz", - "integrity": "sha1-G0UvBxOZYcOPhmxuJKBiR++iGxE=" - }, - "ngx-bootstrap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-2.0.2.tgz", - "integrity": "sha512-4ZTltcStUED2JzI9Hd1+FDaMQmukzbeBSS02hdTvuUJ+9hNtGLMSPGdPNRIniIyItzv3v3emJrAAtKkvOMxyCA==" - }, - "ngx-editor": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ngx-editor/-/ngx-editor-3.3.0.tgz", - "integrity": "sha512-JWbsuhtmpAezpgCtau6sG40wh6DPqPQrRRXi1sWO7bowgAvTsY3pA/OFjveUpKRsLLv14wECFwap73tttj0zaQ==", - "requires": { - "tslib": "1.9.0" - } - }, - "ngx-spinner": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ngx-spinner/-/ngx-spinner-1.1.0.tgz", - "integrity": "sha512-Jz71zdqQtNlyQJgggPfg4R1kFUSBTO+KmuWFrn8fi635uEzSG1RyvVP8vvUwiOf72x9VatFHy3k0Ul3M8KdaPw==" - }, - "ngx-toastr": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-8.5.0.tgz", - "integrity": "sha512-HiWwKOXVzR2lU6YkM58s+bc3jIS8UjZ95gKZrjAZwfo98RDOTR6jyA5I4+iX6Q+xWiiNPX4A5Z5bYXFGeq9X6Q==", - "requires": { - "tslib": "1.9.0" - } - }, - "ngx-twitter-timeline": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ngx-twitter-timeline/-/ngx-twitter-timeline-0.1.3.tgz", - "integrity": "sha1-845arznbCkq3/iKFjRXyUEX+HRw=" - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "1.1.4" - } - }, - "node-forge": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", - "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", - "dev": true - }, - "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.4", - "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.0" - }, - "dependencies": { - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "requires": { - "abbrev": "1.1.1" - } - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" - } - } - }, - "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", - "dev": true, - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.8.0", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.6", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" - } - }, - "node-modules-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.1.tgz", - "integrity": "sha1-QAlrCM560OoUaAhjr0ScfHWl0cg=", - "dev": true - }, - "node-sass": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.0.tgz", - "integrity": "sha512-QFHfrZl6lqRU3csypwviz2XLgGNOoWQbo2GOvtsfQqOfL4cy1BtWnhx/XUeAO9LT3ahBzSRXcEO6DdvAH9DzSg==", - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.2", - "get-stdin": "4.0.1", - "glob": "7.1.2", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.10.0", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.79.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0", - "true-case-path": "1.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "requires": { - "chalk": "1.1.3", - "commander": "2.12.2", - "is-my-json-valid": "2.17.1", - "pinkie-promise": "2.0.1" - } - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=" - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" - } - } - }, - "nodemailer": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz", - "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", - "dev": true, - "optional": true, - "requires": { - "libmime": "3.0.0", - "mailcomposer": "4.0.1", - "nodemailer-direct-transport": "3.3.2", - "nodemailer-shared": "1.1.0", - "nodemailer-smtp-pool": "2.8.2", - "nodemailer-smtp-transport": "2.7.2", - "socks": "1.1.9" - }, - "dependencies": { - "socks": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", - "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", - "dev": true, - "optional": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "1.1.15" - } - } - } - }, - "nodemailer-direct-transport": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", - "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-fetch": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", - "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=", - "dev": true - }, - "nodemailer-shared": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", - "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", - "dev": true, - "requires": { - "nodemailer-fetch": "1.6.0" - } - }, - "nodemailer-smtp-pool": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz", - "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "nodemailer-wellknown": "0.1.10", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-smtp-transport": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", - "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "nodemailer-wellknown": "0.1.10", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-wellknown": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", - "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=", - "dev": true - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.4" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "2.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "requires": { - "boolbase": "1.0.0" - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - } - } - }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "obuf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", - "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "opn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", - "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", - "dev": true, - "requires": { - "is-wsl": "1.1.0" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.2" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "optional": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true, - "optional": true - } - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "original": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", - "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", - "dev": true, - "requires": { - "url-parse": "1.0.5" - }, - "dependencies": { - "url-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", - "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", - "dev": true, - "requires": { - "querystringify": "0.0.4", - "requires-port": "1.0.0" - } - } - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", - "dev": true, - "requires": { - "p-try": "1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.2.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pac-proxy-agent": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz", - "integrity": "sha512-QBELCWyLYPgE2Gj+4wUEiMscHrQ8nRPBzYItQNOHWavwBt25ohZHQC4qnd5IszdVVrFbLsQ+dPkm6eqdjJAmwQ==", - "dev": true, - "optional": true, - "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1", - "get-uri": "2.0.1", - "http-proxy-agent": "1.0.0", - "https-proxy-agent": "1.0.0", - "pac-resolver": "2.0.0", - "raw-body": "2.3.2", - "socks-proxy-agent": "2.1.1" - } - }, - "pac-resolver": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-2.0.0.tgz", - "integrity": "sha1-mbiNLxk/ve78HJpSnB8yYKtSd80=", - "dev": true, - "optional": true, - "requires": { - "co": "3.0.6", - "degenerator": "1.0.4", - "ip": "1.0.1", - "netmask": "1.0.6", - "thunkify": "2.1.2" - }, - "dependencies": { - "co": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/co/-/co-3.0.6.tgz", - "integrity": "sha1-FEXyJsXrlWE45oyawwFn6n0ua9o=", - "dev": true, - "optional": true - }, - "ip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.0.1.tgz", - "integrity": "sha1-x+NWzeoiWucbNtcPLnGpK6TkJZA=", - "dev": true, - "optional": true - } - } - }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "2.3.2" - } - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "requires": { - "path-platform": "0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true, - "requires": { - "asn1.js": "4.9.2", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true - }, - "path-proxy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz", - "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", - "dev": true, - "optional": true, - "requires": { - "inflection": "1.3.8" - }, - "dependencies": { - "inflection": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz", - "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=", - "dev": true, - "optional": true - } - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, - "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", - "dev": true, - "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" - } - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "2.1.0" - } - }, - "portfinder": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", - "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", - "dev": true, - "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "5.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - }, - "dependencies": { - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", - "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "postcss-calc": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "dev": true, - "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-discard-duplicates": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", - "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-discard-empty": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", - "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", - "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-discard-unused": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-filter-plugins": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", - "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "uniqid": "4.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-import": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.0.0.tgz", - "integrity": "sha1-qWLi34LTvFptpqOGhBdHIE9B71s=", - "dev": true, - "requires": { - "postcss": "6.0.17", - "postcss-value-parser": "3.3.0", - "read-cache": "1.0.0", - "resolve": "1.5.0" - } - }, - "postcss-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1", - "postcss-load-options": "1.2.0", - "postcss-load-plugins": "2.3.0" - } - }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } - }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } - }, - "postcss-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.0.tgz", - "integrity": "sha512-S/dKzpDwGFmP9g8eyCu9sUIV+/+3UooeTpYlsKf23qKDdrhHuA4pTSfytVu0rEJ0iDqUavXrgtOPq5KhNyNMOw==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "postcss": "6.0.17", - "postcss-load-config": "1.2.0", - "schema-utils": "0.4.3" - }, - "dependencies": { - "schema-utils": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.3.tgz", - "integrity": "sha512-sgv/iF/T4/SewJkaVpldKC4WjSkz0JsOh2eKtxCPpCO1oR05+7MOF+H476HVRbLArkgA7j5TRJJ4p2jdFkUGQQ==", - "dev": true, - "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1" - } - } - } - }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dev": true, - "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-merge-rules": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000800", - "electron-to-chromium": "1.3.32" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", - "dev": true - }, - "postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-minify-params": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", - "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", - "dev": true, - "requires": { - "postcss": "6.0.17" - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.17" - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.17" - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.17" - } - }, - "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "dev": true, - "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "dev": true, - "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true, - "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "postcss-svgo": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "dev": true, - "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-url": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.0.tgz", - "integrity": "sha512-VBP6uf6iL3AZra23nkPkOEkS/5azj1xf/toRrjfkolfFEgg9Gyzg9UhJZeIsz12EGKZTNVeGbPa2XtaZm/iZvg==", - "dev": true, - "requires": { - "mime": "1.6.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "postcss": "6.0.17", - "xxhashjs": "0.2.2" - } - }, - "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", - "dev": true - }, - "postcss-zindex": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dev": true, - "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "uniqs": "2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "2.0.1", - "utila": "0.4.0" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "optional": true, - "requires": { - "asap": "2.0.6" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "protractor": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.3.0.tgz", - "integrity": "sha512-8z1TWtc/I9Kn4fkfg87DhkSAi0arul7DHBEeJ70sy66teQAeffjQED1s0Gduigme7hxHRYdYEKbhHYz28fpv5w==", - "dev": true, - "requires": { - "@types/node": "6.0.96", - "@types/q": "0.0.32", - "@types/selenium-webdriver": "2.53.43", - "blocking-proxy": "1.0.1", - "chalk": "1.1.3", - "glob": "7.1.2", - "jasmine": "2.8.0", - "jasminewd2": "2.2.0", - "optimist": "0.6.1", - "q": "1.4.1", - "saucelabs": "1.3.0", - "selenium-webdriver": "3.6.0", - "source-map-support": "0.4.18", - "webdriver-js-extender": "1.0.0", - "webdriver-manager": "12.0.6" - }, - "dependencies": { - "@types/node": { - "version": "6.0.96", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz", - "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==", - "dev": true - }, - "adm-zip": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", - "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "webdriver-manager": { - "version": "12.0.6", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz", - "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", - "dev": true, - "requires": { - "adm-zip": "0.4.7", - "chalk": "1.1.3", - "del": "2.2.2", - "glob": "7.1.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "q": "1.4.1", - "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.5.0", - "xml2js": "0.4.19" - } - } - } - }, - "proxy-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", - "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.5.2" - } - }, - "proxy-agent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-2.0.0.tgz", - "integrity": "sha1-V+tTR6qAXXTsaByyVknbo5yTNJk=", - "dev": true, - "optional": true, - "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1", - "http-proxy-agent": "1.0.0", - "https-proxy-agent": "1.0.0", - "lru-cache": "2.6.5", - "pac-proxy-agent": "1.1.0", - "socks-proxy-agent": "2.1.1" - }, - "dependencies": { - "lru-cache": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz", - "integrity": "sha1-5W1jVBSO3o13B7WNFDIg/QjfD9U=", - "dev": true, - "optional": true - } - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.6" - } - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - }, - "pumpify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", - "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", - "dev": true, - "requires": { - "duplexify": "3.5.3", - "inherits": "2.0.3", - "pump": "2.0.1" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - } - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qjobs": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", - "dev": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", - "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", - "dev": true, - "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.1" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - } - }, - "raw-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", - "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", - "dev": true - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", - "dev": true, - "requires": { - "pify": "2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - }, - "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } - } - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "redis": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", - "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", - "dev": true, - "optional": true, - "requires": { - "double-ended-queue": "2.1.0-0", - "redis-commands": "1.3.1", - "redis-parser": "2.6.0" - } - }, - "redis-commands": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.1.tgz", - "integrity": "sha1-gdgm9F+pyLIBH0zXoP5ZfSQdRCs=", - "dev": true, - "optional": true - }, - "redis-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", - "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", - "dev": true, - "optional": true - }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } - } - }, - "reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", - "dev": true, - "requires": { - "balanced-match": "0.4.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } - } - }, - "reflect-metadata": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", - "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==", - "dev": true - }, - "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "regex-not": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz", - "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1" - } - }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", - "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", - "dev": true, - "requires": { - "css-select": "1.2.0", - "dom-converter": "0.1.4", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.3.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } - } - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" - } - }, - "requestretry": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz", - "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==", - "dev": true, - "optional": true, - "requires": { - "extend": "3.0.1", - "lodash": "4.17.4", - "request": "2.81.0", - "when": "3.7.8" - }, - "dependencies": { - "when": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", - "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", - "dev": true, - "optional": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "7.1.2" - } - }, - "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true, - "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "1.2.0" - } - }, - "rxjs": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", - "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", - "requires": { - "symbol-observable": "1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" - } - }, - "sass-loader": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz", - "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==", - "dev": true, - "requires": { - "async": "2.6.0", - "clone-deep": "0.3.0", - "loader-utils": "1.1.0", - "lodash.tail": "4.1.1", - "pify": "3.0.0" - } - }, - "saucelabs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz", - "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=", - "dev": true, - "requires": { - "https-proxy-agent": "1.0.0" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", - "dev": true, - "requires": { - "ajv": "5.5.2" - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "requires": { - "js-base64": "2.4.3", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selenium-webdriver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", - "dev": true, - "requires": { - "jszip": "3.1.5", - "rimraf": "2.6.2", - "tmp": "0.0.30", - "xml2js": "0.4.19" - }, - "dependencies": { - "tmp": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", - "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - } - } - }, - "selfsigned": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.2.tgz", - "integrity": "sha1-tESVgNmZKbZbEKSDiTAaZZIIh1g=", - "dev": true, - "requires": { - "node-forge": "0.7.1" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - }, - "semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", - "dev": true, - "requires": { - "semver": "5.5.0" - } - }, - "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" - }, - "dependencies": { - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", - "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", - "dev": true - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.2", - "mime-types": "2.1.17", - "parseurl": "1.3.2" - } - }, - "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", - "dev": true, - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", - "dev": true, - "requires": { - "to-object-path": "0.3.0" - } - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "sha.js": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", - "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", - "dev": true, - "requires": { - "is-extendable": "0.1.1", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7", - "mixin-object": "2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dev": true, - "requires": { - "json-stable-stringify": "0.0.1", - "sha.js": "2.4.10" - }, - "dependencies": { - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "silent-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz", - "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", - "dev": true, - "requires": { - "debug": "2.6.9" - } - }, - "simple-line-icons": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/simple-line-icons/-/simple-line-icons-2.4.1.tgz", - "integrity": "sha1-t1vFoNh+UwkowszaVzUnS7JW8jQ=" - }, - "slack-node": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz", - "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=", - "dev": true, - "optional": true, - "requires": { - "requestretry": "1.13.0" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "smart-buffer": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", - "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", - "dev": true - }, - "smtp-connection": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", - "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", - "dev": true, - "requires": { - "httpntlm": "1.6.1", - "nodemailer-shared": "1.1.0" - } - }, - "snapdragon": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", - "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", - "dev": true, - "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "2.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.16.3" - } - }, - "socket.io": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", - "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "engine.io": "3.1.4", - "socket.io-adapter": "1.1.1", - "socket.io-client": "2.0.4", - "socket.io-parser": "3.1.2" - } - }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", - "dev": true - }, - "socket.io-client": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", - "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.6.9", - "engine.io-client": "3.1.4", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "3.1.2", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz", - "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "2.6.9", - "has-binary2": "1.0.2", - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "dev": true, - "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.2.1" - } - }, - "sockjs-client": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.2.0" - }, - "dependencies": { - "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - } - } - }, - "socks": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", - "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", - "dev": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "1.1.15" - } - }, - "socks-proxy-agent": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz", - "integrity": "sha512-sFtmYqdUK5dAMh85H0LEVFUCO7OhJJe1/z2x/Z6mxp3s7/QPf1RkZmpZy+BpuU0bEjcV9npqKjq9Y3kwFUjnxw==", - "dev": true, - "requires": { - "agent-base": "2.1.1", - "extend": "3.0.1", - "socks": "1.1.10" - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "1.1.0" - } - }, - "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", - "dev": true, - "requires": { - "atob": "2.0.3", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" - }, - "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", - "dev": true, - "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.1", - "select-hose": "2.0.0", - "spdy-transport": "2.0.20" - } - }, - "spdy-transport": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", - "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", - "dev": true, - "requires": { - "debug": "2.6.9", - "detect-node": "2.0.3", - "hpack.js": "2.1.6", - "obuf": "1.1.1", - "readable-stream": "2.3.3", - "safe-buffer": "5.1.1", - "wbuf": "1.7.2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "ssri": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.1.0.tgz", - "integrity": "sha512-TevC8fgxQKTfQ1nWtM9GNzr3q5rrHNntG9CDMH1k3QhSZI6Kb+NbjLRs8oPFZa2Hgo7zoekL+UTvoEk7tsbjQg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "requires": { - "readable-stream": "2.3.3" - } - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.3" - } - }, - "stream-each": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" - } - }, - "stream-http": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", - "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", - "dev": true, - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "streamroller": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", - "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", - "dev": true, - "requires": { - "date-format": "1.2.0", - "debug": "3.1.0", - "mkdirp": "0.5.1", - "readable-stream": "2.3.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "requires": { - "get-stdin": "4.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "style-loader": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", - "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", - "dev": true, - "requires": { - "loader-utils": "1.1.0" - } - }, - "stylus": { - "version": "0.54.5", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", - "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", - "dev": true, - "requires": { - "css-parse": "1.7.0", - "debug": "2.6.9", - "glob": "7.0.6", - "mkdirp": "0.5.1", - "sax": "0.5.8", - "source-map": "0.1.43" - }, - "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", - "dev": true - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "stylus-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.1.tgz", - "integrity": "sha1-d/SzT9Aw0lsmF7z1UT21sHMMQIk=", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "lodash.clonedeep": "4.5.0", - "when": "3.6.4" - } - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - }, - "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "dev": true, - "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" - } - }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" - }, - "syntax-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", - "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", - "dev": true, - "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "thunkify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", - "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=", - "dev": true, - "optional": true - }, - "thunky": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", - "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", - "dev": true - }, - "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", - "dev": true, - "requires": { - "setimmediate": "1.0.5" - } - }, - "timespan": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", - "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", - "dev": true, - "optional": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "to-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", - "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "regex-not": "1.0.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - } - } - }, - "toposort": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", - "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", - "dev": true - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "requires": { - "punycode": "1.4.1" - } - }, - "tree-kill": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", - "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "true-case-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", - "requires": { - "glob": "6.0.4" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "ts-helpers": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ts-helpers/-/ts-helpers-1.1.2.tgz", - "integrity": "sha1-/Gm+nx87rtAfsaDvjUz+dIgU2DU=" - }, - "ts-node": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-4.1.0.tgz", - "integrity": "sha512-xcZH12oVg9PShKhy3UHyDmuDLV3y7iKwX25aMVPt1SIXSuAfWkFiGPEkg+th8R4YKW/QCxDoW7lJdb15lx6QWg==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "chalk": "2.3.0", - "diff": "3.4.0", - "make-error": "1.3.2", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map-support": "0.5.3", - "tsconfig": "7.0.0", - "v8flags": "3.0.1", - "yn": "2.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.3.tgz", - "integrity": "sha512-eKkTgWYeBOQqFGXRfKabMFdnWepo51vWqEdoeikaEPFiJC7MCU5j2h4+6Q8npkZTeLGbSyecZvRxiSoWl3rh+w==", - "dev": true, - "requires": { - "source-map": "0.6.1" - } - } - } - }, - "tsconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", - "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", - "dev": true, - "requires": { - "@types/strip-bom": "3.0.0", - "@types/strip-json-comments": "0.0.30", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "tsickle": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.26.0.tgz", - "integrity": "sha512-eWJ2CUfttGK0LqF9iJ/Avnxbj4M+fCyJ50Zag3wm73Fut1hsasPRHKxKdrMWVj4BMHnQNx7TO+DdNmLmJTSuNw==", - "dev": true, - "requires": { - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map": "0.5.7", - "source-map-support": "0.4.18" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "tslib": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", - "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==" - }, - "tslint": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", - "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.3.0", - "commander": "2.12.2", - "diff": "3.4.0", - "glob": "7.1.2", - "js-yaml": "3.7.0", - "minimatch": "3.0.4", - "resolve": "1.5.0", - "semver": "5.5.0", - "tslib": "1.9.0", - "tsutils": "2.21.0" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - } - } - }, - "tsscmp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", - "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=", - "dev": true, - "optional": true - }, - "tsutils": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.21.0.tgz", - "integrity": "sha512-zlOHTYtTwvTiKxUyAU8wiKzPpAgwZrGjb7AY18VUlxuCgBiTMVorIl5HjrCT8V64Hm34RI1BZITJMVQpBLMxVg==", - "dev": true, - "requires": { - "tslib": "1.9.0" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.17" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", - "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", - "dev": true - }, - "uglify-js": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.9.tgz", - "integrity": "sha512-J2t8B5tj9JdPTW4+sNZXmiIWHzTvcoITkaqzTiilu/biZF/9crqf/Fi7k5hqbOmVRh9/hVNxAxBYIMF7N6SqMQ==", - "dev": true, - "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.8.tgz", - "integrity": "sha512-XG8/QmR1pyPeE1kj2aigo5kos8umefB31zW+PMvAAytHSB0T/vQvN6sqt8+Sh+y0b0A7zlmxNi2dzRnj0wcqGA==", - "dev": true, - "requires": { - "cacache": "10.0.2", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.3", - "serialize-javascript": "1.4.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.1.0", - "worker-farm": "1.5.2" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "schema-utils": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.3.tgz", - "integrity": "sha512-sgv/iF/T4/SewJkaVpldKC4WjSkz0JsOh2eKtxCPpCO1oR05+7MOF+H476HVRbLArkgA7j5TRJJ4p2jdFkUGQQ==", - "dev": true, - "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" - } - } - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "umd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", - "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", - "dev": true - }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" - }, - "dependencies": { - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" - } - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqid": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", - "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", - "dev": true, - "requires": { - "macaddress": "0.2.8" - } - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", - "dev": true, - "requires": { - "unique-slug": "2.0.0" - } - }, - "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", - "dev": true, - "requires": { - "imurmurhash": "0.1.4" - } - }, - "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-loader": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz", - "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "mime": "1.6.0", - "schema-utils": "0.3.0" - } - }, - "url-parse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", - "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", - "dev": true, - "requires": { - "querystringify": "1.0.0", - "requires-port": "1.0.0" - }, - "dependencies": { - "querystringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", - "dev": true - } - } - }, - "use": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", - "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "dev": true, - "requires": { - "set-getter": "0.1.0" - } - } - } - }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "tmp": "0.0.33" - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" - }, - "uws": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/uws/-/uws-0.14.5.tgz", - "integrity": "sha1-Z6rzPEaypYel9mZtAPdpEyjxSdw=", - "dev": true, - "optional": true - }, - "v8flags": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", - "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "watchpack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", - "dev": true, - "requires": { - "async": "2.6.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" - } - }, - "wbuf": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", - "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", - "dev": true, - "requires": { - "minimalistic-assert": "1.0.0" - } - }, - "webdriver-js-extender": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", - "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", - "dev": true, - "requires": { - "@types/selenium-webdriver": "2.53.43", - "selenium-webdriver": "2.53.3" - }, - "dependencies": { - "sax": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", - "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", - "dev": true - }, - "selenium-webdriver": { - "version": "2.53.3", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz", - "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", - "dev": true, - "requires": { - "adm-zip": "0.4.4", - "rimraf": "2.6.2", - "tmp": "0.0.24", - "ws": "1.1.5", - "xml2js": "0.4.4" - } - }, - "tmp": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", - "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", - "dev": true - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "dev": true, - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - }, - "xml2js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", - "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", - "dev": true, - "requires": { - "sax": "0.6.1", - "xmlbuilder": "9.0.4" - } - } - } - }, - "webpack": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz", - "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==", - "dev": true, - "requires": { - "acorn": "5.4.1", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - } - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - } - } - }, - "webpack-core": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", - "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", - "dev": true, - "requires": { - "source-list-map": "0.1.8", - "source-map": "0.4.4" - }, - "dependencies": { - "source-list-map": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", - "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "webpack-dev-middleware": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", - "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", - "dev": true, - "requires": { - "memory-fs": "0.4.1", - "mime": "1.6.0", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.0.0" - } - }, - "webpack-dev-server": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.1.tgz", - "integrity": "sha512-ombhu5KsO/85sVshIDTyQ5HF3xjZR3N0sf5Ao6h3vFwpNyzInEzA1GV3QPVjTMLTNckp8PjfG1PFGznzBwS5lg==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "array-includes": "3.0.3", - "bonjour": "3.5.0", - "chokidar": "2.0.0", - "compression": "1.7.1", - "connect-history-api-fallback": "1.5.0", - "debug": "3.1.0", - "del": "3.0.0", - "express": "4.16.2", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.17.4", - "import-local": "1.0.0", - "internal-ip": "1.2.0", - "ip": "1.1.5", - "killable": "1.0.0", - "loglevel": "1.6.1", - "opn": "5.1.0", - "portfinder": "1.0.13", - "selfsigned": "1.10.2", - "serve-index": "1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.1.4", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.1.0", - "webpack-dev-middleware": "1.12.2", - "yargs": "6.6.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "3.1.5", - "normalize-path": "2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz", - "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.1", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.1" - } - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "chokidar": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.0.tgz", - "integrity": "sha512-OgXCNv2U6TnG04D3tth0gsvdbV4zdbxFG3sYUqcoQMoEFVd1j1pZR6TZ8iknC45o9IJ6PeQI/J6wT/+cHcniAw==", - "dev": true, - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.0", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz", - "integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.0", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.7", - "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - } - }, - "supports-color": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", - "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - }, - "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" - } - }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - } - } - }, - "webpack-merge": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.1.tgz", - "integrity": "sha512-geQsZ86YkXOVOjvPC5yv3JSNnL6/X3Kzh935AQ/gJNEYXEfJDQFu/sdFuktS9OW2JcH/SJec8TGfRdrpHshH7A==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", - "dev": true, - "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "webpack-subresource-integrity": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.0.3.tgz", - "integrity": "sha1-wGBtQAkLBwzeQovsjfNgMhbkcus=", - "dev": true, - "requires": { - "webpack-core": "0.6.9" - } - }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": "0.4.9", - "websocket-extensions": "0.1.3" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true - }, - "when": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", - "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", - "dev": true - }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "requires": { - "string-width": "1.0.2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "worker-farm": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.2.tgz", - "integrity": "sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==", - "dev": true, - "requires": { - "errno": "0.1.6", - "xtend": "4.0.1" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" - } - }, - "xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": "1.2.4", - "xmlbuilder": "9.0.4" - } - }, - "xmlbuilder": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", - "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "dev": true, - "optional": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "requires": { - "cuint": "0.2.2" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "requires": { - "camelcase": "3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - } - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", - "dev": true - }, - "zone.js": { - "version": "0.8.20", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.20.tgz", - "integrity": "sha512-FXlA37ErSXCMy5RNBcGFgCI/Zivqzr0D19GuvDxhcYIJc7xkFp6c29DKyODJu0Zo+EMyur/WPPgcBh1EHjB9jA==" - } - } -} diff --git a/packages/openscore-ui/package.json b/packages/openscore-ui/packagen.json similarity index 100% rename from packages/openscore-ui/package.json rename to packages/openscore-ui/packagen.json diff --git a/packages/openscore-ui/src/app/views/pronosticos/pronostico/pronostico.component.html b/packages/openscore-ui/src/app/views/pronosticos/pronostico/pronostico.component.html index 5173a54..af60df6 100644 --- a/packages/openscore-ui/src/app/views/pronosticos/pronostico/pronostico.component.html +++ b/packages/openscore-ui/src/app/views/pronosticos/pronostico/pronostico.component.html @@ -3,27 +3,63 @@
                - - - + + - +
                -
                {{getResultado(partido)}}
                -
                {{partido.resultado.local}} - {{partido.resultado.visitante}}
                -
                {{partido.grupo.nombre}}
                -
                {{partido.fase.nombre}}
                -
                {{partido.lugar}}
                -
                {{partido.dia | date: 'dd/MM/yyyy HH:mm (O)'}}
                -
                Time until blocked: - {{timeToBlock}} +
                {{ getResultado(partido) }}
                +
                + {{ partido.resultado.local }} - {{ partido.resultado.visitante }} +
                +
                + {{ partido.grupo.nombre }} +
                +
                + {{ partido.fase.nombre }} +
                +
                {{ partido.lugar }}
                +
                {{ partido.dia | date: "dd/MM/yyyy HH:mm (O)" }}
                +
                + Time until blocked: + {{ timeToBlock }}
                diff --git a/packages/openscore-ui/src/app/views/pronosticos/pronosticos.component.html b/packages/openscore-ui/src/app/views/pronosticos/pronosticos.component.html index 1b55af8..36b994a 100644 --- a/packages/openscore-ui/src/app/views/pronosticos/pronosticos.component.html +++ b/packages/openscore-ui/src/app/views/pronosticos/pronosticos.component.html @@ -1,27 +1,55 @@
                -

                Predictions

                -
                -
                - +
                - +
                @@ -30,14 +58,21 @@

                Predictions

                - - +
                - +
                -
                - No matches for this stage yet
                +
                No matches for this stage yet
                @@ -48,12 +83,21 @@

                Predictions

                - +
                - +
                - No matches found for this date
                + No matches found for this date +
                diff --git a/packages/openscore-ui/yarn.lock b/packages/openscore-ui/yarn.lock deleted file mode 100644 index 6f18c03..0000000 --- a/packages/openscore-ui/yarn.lock +++ /dev/null @@ -1,9124 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@angular-devkit/build-optimizer@0.0.42": - version "0.0.42" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.0.42.tgz#402b0dda4883db91e2381c3ddc55888408a7894e" - integrity sha512-BAYCVZ10ro6mgZQDZiNiVbX8ppygw4q7z/stpwG8WjMswgMRIcxsxYoC1VFuWcUPAf4UyfTIav6e8UZWA5+xnQ== - dependencies: - loader-utils "^1.1.0" - source-map "^0.5.6" - typescript "~2.6.2" - webpack-sources "^1.0.1" - -"@angular-devkit/core@0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-0.0.29.tgz#6fb319b45a62eff172318cbe256fdb24ef20af2b" - integrity sha512-jtUBA0pIrkdXcVqDmDrGlniqwM7NFOKdo7vWFDmCVLBbC9rZHeYW5Xv/+4HyBhGLJ4wxsAkUjsHKWGJINPPpiw== - dependencies: - ajv "~5.5.1" - chokidar "^1.7.0" - rxjs "^5.5.6" - source-map "^0.5.6" - -"@angular-devkit/schematics@0.0.52": - version "0.0.52" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-0.0.52.tgz#cbd2f42778b50d6422a254ffaec05ad4ef3cb6c0" - integrity sha512-NtG8VB5aWtg0cw1Y7EJinJMuAnXsNdkQkkVe/i7CO6TPLyFQSFQCN1YojCr43l8jTWTRebRslrBawPCMOxsOgw== - dependencies: - "@ngtools/json-schema" "^1.1.0" - rxjs "^5.5.6" - -"@angular/animations@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-5.2.3.tgz#e0eb8d55f807e799df128af9150c075c9ab82adf" - integrity sha512-K9rOsRGwt7Zmp/rNdvBmgBKqvEdgCyZF0kvwxrmZfq1Zj0GAkfTAKPL007493O6XFd+icfu/+kmYeqXBGB4gKA== - dependencies: - tslib "^1.7.1" - -"@angular/cdk@^5.2.4": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-5.2.5.tgz#cae2b12e1990a692dd267a73fdb1d49db37f9604" - integrity sha512-GN8m1d+VcCE9+Bgwv06Y8YJKyZ0i9ZIq2ZPBcJYt+KVgnVVRg4JkyUNxud07LNsvzOX22DquHqmIZiC4hAG7Ag== - dependencies: - tslib "^1.7.1" - -"@angular/cli@1.6.7": - version "1.6.7" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-1.6.7.tgz#e2323753c144b5de6c699bbebee688105a394641" - integrity sha512-TprSjnQrEdrTsCAB5K/lCLuXZUH/y+l/BAR0aZLpubpZP8Ldgmq7q56trxL5wNSs3o6A8Vh43ZKNYOuKtnzlXQ== - dependencies: - "@angular-devkit/build-optimizer" "0.0.42" - "@angular-devkit/core" "0.0.29" - "@angular-devkit/schematics" "0.0.52" - "@ngtools/json-schema" "1.1.0" - "@ngtools/webpack" "1.9.7" - "@schematics/angular" "0.1.17" - autoprefixer "^7.2.3" - chalk "~2.2.0" - circular-dependency-plugin "^4.2.1" - common-tags "^1.3.1" - copy-webpack-plugin "^4.1.1" - core-object "^3.1.0" - css-loader "^0.28.1" - cssnano "^3.10.0" - denodeify "^1.2.1" - ember-cli-string-utils "^1.0.0" - exports-loader "^0.6.3" - extract-text-webpack-plugin "^3.0.2" - file-loader "^1.1.5" - fs-extra "^4.0.0" - glob "^7.0.3" - html-webpack-plugin "^2.29.0" - istanbul-instrumenter-loader "^3.0.0" - karma-source-map-support "^1.2.0" - less "^2.7.2" - less-loader "^4.0.5" - license-webpack-plugin "^1.0.0" - loader-utils "1.1.0" - lodash "^4.11.1" - memory-fs "^0.4.1" - minimatch "^3.0.4" - node-modules-path "^1.0.0" - nopt "^4.0.1" - opn "~5.1.0" - portfinder "~1.0.12" - postcss-import "^11.0.0" - postcss-loader "^2.0.10" - postcss-url "^7.1.2" - raw-loader "^0.5.1" - resolve "^1.1.7" - rxjs "^5.5.6" - sass-loader "^6.0.6" - semver "^5.1.0" - silent-error "^1.0.0" - source-map-support "^0.4.1" - style-loader "^0.13.1" - stylus "^0.54.5" - stylus-loader "^3.0.1" - uglifyjs-webpack-plugin "^1.1.5" - url-loader "^0.6.2" - webpack "~3.10.0" - webpack-dev-middleware "~1.12.0" - webpack-dev-server "~2.11.0" - webpack-merge "^4.1.0" - webpack-sources "^1.0.0" - webpack-subresource-integrity "^1.0.1" - optionalDependencies: - node-sass "^4.7.2" - -"@angular/common@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-5.2.3.tgz#f2a5c12ec44b73a248d8dcb2d37ac2749f091cf7" - integrity sha512-RwQ/IjmpDdMecTz/wwQlKpHgF4Crr8kyqV9FJ+c+cHR8Riqlu2DOXSU7LIfDdGoo6Mpixdxd1rtHYfs7l9YBSA== - dependencies: - tslib "^1.7.1" - -"@angular/compiler-cli@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-5.2.3.tgz#75b39a346f1b2a95ebc403016d19fc33d5315221" - integrity sha512-uoCxeyQSd8R/cwEbd0FIUXjnbPq0HXEsyu3WSu9Ek2jt52HL+x/gZQdFCRtjW/mvQNOqxrgrTtEkhJ398+VkXg== - dependencies: - chokidar "^1.4.2" - minimist "^1.2.0" - reflect-metadata "^0.1.2" - tsickle "^0.26.0" - -"@angular/compiler@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-5.2.3.tgz#49167adb35bdb5e7e915cce912c432300fc16816" - integrity sha512-OynSzUdEHwajQMoV2JuYq5IdiR2dlTCTAHhTLzrym85wOihvTvovEQwVhYYHyKERu85JIoaF1sXA42KIjMGfkw== - dependencies: - tslib "^1.7.1" - -"@angular/core@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-5.2.3.tgz#157dcb437d085b325513689e0e4ae70182f3f708" - integrity sha512-tL9O8KA6KGjnlxqjuTytpC2OeKbxe/yHev0kmwo5CK0lDZU4UFetcItAzUXU1dyRuILTcBkbnFt9+nr1SZs/cQ== - dependencies: - tslib "^1.7.1" - -"@angular/forms@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-5.2.3.tgz#4992419191a3800516085209be331fc0d63bd099" - integrity sha512-PsMGbj/Slvsxxyl61QSSSFDCGHN1XK6kNxVQTVmAlVhP1LlaYqBOIgQy4K9CYWUeHqU/YCdhVaFb5quzZLtPYA== - dependencies: - tslib "^1.7.1" - -"@angular/http@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/http/-/http-5.2.3.tgz#067945f6339619b0b3fd13e8af7b6a1301e69176" - integrity sha512-3kAj7YYws8J2zRu46fEXk6lYrgSK9s5YA6O4REZkLox/suK0wb6TsDIIhoMzScGctSzZESVyuWsvYMrDYCflPA== - dependencies: - tslib "^1.7.1" - -"@angular/language-service@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-5.2.3.tgz#b858c1cd3740b29de145a6d60b2562eef391d3b3" - integrity sha512-yBi8i2rUdq6WgYn2J+82QxqhKsl2ldH7/8Lk4ZQDbKgTBx5LmYLpNGg3TJGnZEUGtKhu8Rd1E3SBmc4qqrGXsQ== - -"@angular/material@^5.2.4": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@angular/material/-/material-5.2.5.tgz#287af95d234e0644244d9db565f7a05c10b737f8" - integrity sha512-IltfBeTJWnmZehOQNQ7KoFs7MGWuZTe0g21hIitGkusVNt1cIoTD24xKH5jwztjH19c04IgiwonpurMKM6pBCQ== - dependencies: - tslib "^1.7.1" - -"@angular/platform-browser-dynamic@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.3.tgz#87d5172da2c102c3cf48da29d39e9b4b9414b419" - integrity sha512-PheS+KJQJiyvQg1lr+eX0/1b/rjLnDjgI1qvzwikrvGYymb2JdZ+rjllHBs1iotzQ+tG+hRnlktvgdFN134x/g== - dependencies: - tslib "^1.7.1" - -"@angular/platform-browser@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-5.2.3.tgz#953df896839879e2b8ca89a364d66e3ac1dcd167" - integrity sha512-60LgA4KK3BufBR7vwwcn3zTYuLlfDG3jFip7bvdgsDpURrUB0j6/pL5cbGElww4jnnxZ72uJzJRzSiGEofjc3g== - dependencies: - tslib "^1.7.1" - -"@angular/router@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-5.2.3.tgz#c56bce42817c67aeb65291e5adf293300038069e" - integrity sha512-XVEpwNZta76FYas1gZSSGvkQoiGgQjvXfab6CwOh958d4c0C+9pJsykqsv6X/n8TSTShQt7wjs/vp/copXeuoA== - dependencies: - tslib "^1.7.1" - -"@angular/upgrade@5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@angular/upgrade/-/upgrade-5.2.3.tgz#714fd7824ed128cdea8962a8a4409e6348b6f840" - integrity sha512-w43Wi+IXLR9X011W32Yokh0JRCffwIha6vMe2bFLV/Q8DWt+58LAn4tYUYDNpVgiMyCKtLGZcn2ZS+cNd0Ebbw== - dependencies: - tslib "^1.7.1" - -"@fortawesome/fontawesome-free-webfonts@^1.0.6": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free-webfonts/-/fontawesome-free-webfonts-1.0.9.tgz#72f2c10453422aba0d338fa6a9cb761b50ba24d5" - integrity sha512-nLgl6b6a+tXaoJJnSRw0hjN8cWM/Q5DhxKAwI9Xr0AiC43lQ2F98vQ1KLA6kw5OoYeAyisGGqmlwtBj0WqOI5Q== - -"@ngtools/json-schema@1.1.0", "@ngtools/json-schema@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.1.0.tgz#c3a0c544d62392acc2813a42c8a0dc6f58f86922" - integrity sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI= - -"@ngtools/webpack@1.9.7": - version "1.9.7" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-1.9.7.tgz#ef15b90142ddf2a2c9072fe3d58c6bf500163fe5" - integrity sha512-D5QuaT9wENeM2j9g2qvW9Ls1tGqRz26Lp+jxwb2ZGFep7Ik1fFOX3ROLfgkxNlxZGVmbxJjsfrYUCyGlzj8gWg== - dependencies: - chalk "~2.2.0" - enhanced-resolve "^3.1.0" - loader-utils "^1.0.2" - magic-string "^0.22.3" - semver "^5.3.0" - source-map "^0.5.6" - tree-kill "^1.0.0" - webpack-sources "^1.1.0" - -"@schematics/angular@0.1.17": - version "0.1.17" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-0.1.17.tgz#084a7cbe2de6f94a856bd08d95c9d35ef8905e2b" - integrity sha512-PHE5gk/ogPY/aN94dbbtauHMCq+/7w4Kdcl7tGmSS8mPKEI0wa6XJi//Wq/tHi55lb2fP58oEZU6n6w/wQascw== - dependencies: - typescript "~2.6.2" - -"@types/jasmine@*": - version "3.3.12" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.3.12.tgz#bf282cb540e9ad7a0a04b742082c073b655eab39" - integrity sha512-lXvr2xFQEVQLkIhuGaR3GC1L9lMU1IxeWnAF/wNY5ZWpC4p9dgxkKkzMp7pntpAdv9pZSnYqgsBkCg32MXSZMg== - -"@types/jasmine@2.8.6": - version "2.8.6" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.8.6.tgz#14445b6a1613cf4e05dd61c3c3256d0e95c0421e" - integrity sha512-clg9raJTY0EOo5pVZKX3ZlMjlYzVU73L71q5OV1jhE2Uezb7oF94jh4CvwrW6wInquQAdhOxJz5VDF2TLUGmmA== - -"@types/jasminewd2@2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/jasminewd2/-/jasminewd2-2.0.3.tgz#0d2886b0cbdae4c0eeba55e30792f584bf040a95" - integrity sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg== - dependencies: - "@types/jasmine" "*" - -"@types/jwt-decode@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@types/jwt-decode/-/jwt-decode-2.2.1.tgz#afdf5c527fcfccbd4009b5fd02d1e18241f2d2f2" - integrity sha512-aWw2YTtAdT7CskFyxEX2K21/zSDStuf/ikI3yBqmwpwJF0pS+/IX5DWv+1UFffZIbruP6cnT9/LAJV1gFwAT1A== - -"@types/node@9.4.0": - version "9.4.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.0.tgz#b85a0bcf1e1cc84eb4901b7e96966aedc6f078d1" - integrity sha512-zkYho6/4wZyX6o9UQ8rd0ReEaiEYNNCqYFIAACe2Tf9DrYlgzWW27OigYHnnztnnZQwVRpwWmZKegFmDpinIsA== - -"@types/node@^6.0.46": - version "6.14.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.14.6.tgz#31df045b4c7618ff74d84f542fc3d29445dd566b" - integrity sha512-rFs9zCFtSHuseiNXxYxFlun8ibu+jtZPgRM+2ILCmeLiGeGLiIGxuOzD+cNyHegI1GD+da3R/cIbs9+xCLp13w== - -"@types/node@^8.0.7": - version "8.10.48" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.48.tgz#e385073561643a9ba6199a1985ffc03530f90781" - integrity sha512-c35YEBTkL4rzXY2ucpSKy+UYHjUBIIkuJbWYbsGIrKLEWU5dgJMmLkkIb3qeC3O3Tpb1ZQCwecscvJTDjDjkRw== - -"@types/q@^0.0.32": - version "0.0.32" - resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" - integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= - -"@types/selenium-webdriver@^2.53.35", "@types/selenium-webdriver@~2.53.39": - version "2.53.43" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz#2de3d718819bc20165754c4a59afb7e9833f6707" - integrity sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg== - -"@types/strip-bom@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" - integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= - -"@types/strip-json-comments@0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" - integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== - -JSONStream@^1.0.3: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-dynamic-import@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" - integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ= - dependencies: - acorn "^4.0.3" - -acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== - -acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.6.2.tgz#b7d7ceca6f22e6417af933a62cad4de01048d5d2" - integrity sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg== - dependencies: - acorn "^6.0.2" - acorn-dynamic-import "^4.0.0" - acorn-walk "^6.1.0" - xtend "^4.0.1" - -acorn-walk@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" - integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== - -acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= - -acorn@^5.0.0, acorn@^5.2.1: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - -acorn@^6.0.2: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" - integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== - -addressparser@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" - integrity sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y= - -adm-zip@0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736" - integrity sha1-ph7VrmkFw66lizplfSUDMJEFJzY= - -adm-zip@^0.4.9: - version "0.4.13" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a" - integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw== - -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= - -agent-base@2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7" - integrity sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc= - dependencies: - extend "~3.0.0" - semver "~5.0.1" - -agent-base@4, agent-base@^4.1.0, agent-base@^4.2.0, agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - -ajv-keywords@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= - -ajv-keywords@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" - integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== - -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ajv@^5.0.0, ajv@^5.1.5, ajv@~5.5.1: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.1.0, ajv@^6.5.5: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - -amqplib@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/amqplib/-/amqplib-0.5.3.tgz#7ccfc85d12ee7cd3c6dc861bb07f0648ec3d7193" - integrity sha512-ZOdUhMxcF+u62rPI+hMtU1NBXSDFQ3eCJJrenamtdQ7YYwh7RZJHOIM1gonVbZ5PyVdYH4xqBPje9OYqk7fnqw== - dependencies: - bitsyntax "~0.1.0" - bluebird "^3.5.2" - buffer-more-ints "~1.0.0" - readable-stream "1.x >=1.1.9" - safe-buffer "~5.1.2" - url-parse "~1.4.3" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.1.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -app-root-path@^2.0.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" - integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA== - -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - integrity sha1-126/jKlNJ24keja61EpLdKthGZE= - dependencies: - default-require-extensions "^1.0.0" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= - -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= - -assert@^1.1.1, assert@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types@0.x.x: - version "0.13.1" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.1.tgz#9461428a270c5a27fda44b738dd3bab2e9353003" - integrity sha512-b+EeK0WlzrSmpMw5jktWvQGxblpWnvMrV+vOp69RLjzGiHwWV0vgq75DPKtUjppKni3yWwSW8WLGV3Ch/XIWcQ== - -async-each@^1.0.0, async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== - -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -async@^2.1.2, async@^2.1.4, async@^2.4.1, async@~2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" - integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== - dependencies: - lodash "^4.17.11" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -autoprefixer@^7.2.3: - version "7.2.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.6.tgz#256672f86f7c735da849c4f07d008abb056067dc" - integrity sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ== - dependencies: - browserslist "^2.11.3" - caniuse-lite "^1.0.30000805" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^6.0.17" - postcss-value-parser "^3.2.3" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8= - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.2.1, aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== - -axios@^0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" - integrity sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM= - dependencies: - follow-redirects "1.0.0" - -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-generator@^6.18.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - dependencies: - babel-runtime "^6.22.0" - -babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.18.0, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.18.0, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= - -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= - -base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== - -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= - dependencies: - callsite "1.0.0" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -bitsyntax@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/bitsyntax/-/bitsyntax-0.1.0.tgz#b0c59acef03505de5a2ed62a2f763c56ae1d6205" - integrity sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== - dependencies: - buffer-more-ints "~1.0.0" - debug "~2.6.9" - safe-buffer "~5.1.2" - -bl@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" - integrity sha1-/cqHGplxOqANGeO7ukHER4emU5g= - dependencies: - readable-stream "~2.0.5" - -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - -blocking-proxy@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" - integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA== - dependencies: - minimist "^1.2.0" - -bluebird@^3.3.0, bluebird@^3.4.7, bluebird@^3.5.1, bluebird@^3.5.2: - version "3.5.4" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" - integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== - -body-parser@1.19.0, body-parser@^1.16.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8= - dependencies: - hoek "2.x.x" - -bootstrap@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.0.0.tgz#ceb03842c145fcc1b9b4e15da2a05656ba68469a" - integrity sha512-gulJE5dGFo6Q61V/whS6VM4WIyrlydXfCgkE+Gxe5hjrJ8rXLLZlALq7zq2RPhOc45PSwQpJkrTnc2KgD6cvmA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^0.1.2: - version "0.1.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" - integrity sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY= - dependencies: - expand-range "^0.1.0" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browser-pack@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" - integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== - dependencies: - JSONStream "^1.0.3" - combine-source-map "~0.8.0" - defined "^1.0.0" - safe-buffer "^5.1.1" - through2 "^2.0.0" - umd "^3.0.0" - -browser-resolve@^1.11.0, browser-resolve@^1.7.0: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@^0.2.0, browserify-zlib@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserify@^14.5.0: - version "14.5.0" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-14.5.0.tgz#0bbbce521acd6e4d1d54d8e9365008efb85a9cc5" - integrity sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g== - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.2.0" - buffer "^5.0.2" - cached-path-relative "^1.0.0" - concat-stream "~1.5.1" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "~1.1.0" - duplexer2 "~0.1.2" - events "~1.1.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - module-deps "^4.0.8" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^2.0.0" - string_decoder "~1.0.0" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "~0.0.0" - url "~0.11.0" - util "~0.10.1" - vm-browserify "~0.0.1" - xtend "^4.0.0" - -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - -browserslist@^2.11.3: - version "2.11.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" - integrity sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA== - dependencies: - caniuse-lite "^1.0.30000792" - electron-to-chromium "^1.3.30" - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-more-ints@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz#ef4f8e2dddbad429ed3828a9c55d44f05c611422" - integrity sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -buffer@^5.0.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" - integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -buildmail@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72" - integrity sha1-h393OLeHKYccmhBeO4N9K+EaenI= - dependencies: - addressparser "1.0.1" - libbase64 "0.1.0" - libmime "3.0.0" - libqp "1.1.0" - nodemailer-fetch "1.6.0" - nodemailer-shared "1.1.0" - punycode "1.4.1" - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA== - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cached-path-relative@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" - integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== - -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000971" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000971.tgz#5530250a146a8fec0fae3014c94c2aae040c6cbe" - integrity sha512-ubSZfYXO2KMYtCVmDez82mjodeZa+mBYWAnBMAmFBPAn4C2PY4SD0eC/diYQD4Rj1K+WNdp0vr0JDtm0SQ6GNg== - -caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: - version "1.0.30000971" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz#d1000e4546486a6977756547352bc96a4cfd2b13" - integrity sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g== - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c= - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@~2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.2.2.tgz#4403f5cf18f35c05f51fbdf152bf588f956cf7cb" - integrity sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw== - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -chart.js@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.7.1.tgz#ae90b4aa4ff1f02decd6b1a2a8dabfd73c9f9886" - integrity sha512-pX1oQAY86MiuyZ2hY593Acbl4MLHKrBBhhmZ1YqSadzQbbsBE2rnd6WISoHjIsdf0WDeC0hbePYCz2ZxkV8L+g== - dependencies: - chartjs-color "~2.2.0" - moment "~2.18.0" - -chart.js@^2.6.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.8.0.tgz#b703b10d0f4ec5079eaefdcd6ca32dc8f826e0e9" - integrity sha512-Di3wUL4BFvqI5FB5K26aQ+hvWh8wnP9A3DWGvXHVkO13D3DSnaSsdZx29cXlEsYKVkn1E2az+ZYFS4t0zi8x0w== - dependencies: - chartjs-color "^2.1.0" - moment "^2.10.2" - -chartjs-color-string@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.5.0.tgz#8d3752d8581d86687c35bfe2cb80ac5213ceb8c1" - integrity sha512-amWNvCOXlOUYxZVDSa0YOab5K/lmEhbFNKI55PWc4mlv28BDzA7zaoQTGxSBgJMHIW+hGX8YUrvw/FH4LyhwSQ== - dependencies: - color-name "^1.0.0" - -chartjs-color-string@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz#1df096621c0e70720a64f4135ea171d051402f71" - integrity sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A== - dependencies: - color-name "^1.0.0" - -chartjs-color@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.3.0.tgz#0e7e1e8dba37eae8415fd3db38bf572007dd958f" - integrity sha512-hEvVheqczsoHD+fZ+tfPUE+1+RbV6b+eksp2LwAhwRTVXEjCSEavvk+Hg3H6SZfGlPh/UfmWKGIvZbtobOEm3g== - dependencies: - chartjs-color-string "^0.6.0" - color-convert "^0.5.3" - -chartjs-color@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.2.0.tgz#84a2fb755787ed85c39dd6dd8c7b1d88429baeae" - integrity sha1-hKL7dVeH7YXDndbdjHsdiEKbrq4= - dependencies: - chartjs-color-string "^0.5.0" - color-convert "^0.5.3" - -chokidar@^1.4.1, chokidar@^1.4.2, chokidar@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chokidar@^2.0.2, chokidar@^2.1.2: - version "2.1.6" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" - integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chownr@^1.0.1, chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-dependency-plugin@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-4.4.0.tgz#f8a1a746a3f6c8e57f4dae9b54d991cd2a582f5d" - integrity sha512-yEFtUNUYT4jBykEX5ZOHw+5goA3glGZr9wAXIQqoyakjz5H5TeUmScnWRc52douAhb9eYzK3s7V6bXfNnjFdzg== - -circular-json@^0.5.4: - version "0.5.9" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d" - integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ== - -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== - dependencies: - chalk "^1.1.3" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@4.2.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== - dependencies: - source-map "~0.6.0" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -clone-deep@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" - integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ== - dependencies: - for-own "^1.0.0" - is-plain-object "^2.0.4" - kind-of "^6.0.0" - shallow-clone "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= - dependencies: - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -codelyzer@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-4.1.0.tgz#3117754538d8f5ffa36dff91d340573a836cf373" - integrity sha512-a3FCIAS3FNQIACvj7KA4iKvH3c6r7X6t6zXsrtV797QGYPQyCwD1fIEd9yV+ZDamijF3YaZ5fbB7QbUMOJGC/g== - dependencies: - app-root-path "^2.0.1" - css-selector-tokenizer "^0.7.0" - cssauron "^1.4.0" - semver-dsl "^1.0.1" - source-map "^0.5.6" - sprintf-js "^1.0.3" - -codemirror@^5.37.0: - version "5.47.0" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.47.0.tgz#c13a521ae5660d3acc655af252f4955065293789" - integrity sha512-kV49Fr+NGFHFc/Imsx6g180hSlkGhuHxTSDDmDHOuyln0MQYFLixDY4+bFkBVeCEiepYfDimAF/e++9jPJk4QA== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" - integrity sha1-vbbGnOZg+t/+CwAHzER+G59ygr0= - -color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= - dependencies: - color-name "^1.0.0" - -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@1.1.2, colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - -colors@^1.1.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== - -combine-lists@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" - integrity sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y= - dependencies: - lodash "^4.5.0" - -combine-source-map@^0.8.0, combine-source-map@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - -combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - -commander@^2.12.1, commander@^2.9.0, commander@~2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== - -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - -common-tags@^1.3.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" - integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= - -compressible@~2.0.16: - version "2.0.17" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" - integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== - dependencies: - mime-db ">= 1.40.0 < 2" - -compression@^1.7.3: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0, concat-stream@^1.6.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@~1.5.0, concat-stream@~1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" - integrity sha1-cIl4Yk2FavQaWnQd790mHadSwmY= - dependencies: - inherits "~2.0.1" - readable-stream "~2.0.0" - typedarray "~0.0.5" - -connect-history-api-fallback@^1.3.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -connect@^3.6.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -constants-browserify@^1.0.0, constants-browserify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -copy-webpack-plugin@^4.1.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz#e7f40dd8a68477d405dd1b7a854aae324b158bae" - integrity sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA== - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - globby "^7.1.1" - is-glob "^4.0.0" - loader-utils "^1.1.0" - minimatch "^3.0.4" - p-limit "^1.0.0" - serialize-javascript "^1.4.0" - -core-js@2.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" - integrity sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4= - -core-js@^2.2.0, core-js@^2.4.0: - version "2.6.8" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.8.tgz#dc3a1e633a04267944e0cb850d3880f340248139" - integrity sha512-RWlREFU74TEkdXzyl1bka66O3kYp8jeTXrvJZDzVVMH8AiHUSOFpL1yfhQJ+wHocAm1m+4971W1PPzfLuCv1vg== - -core-object@^3.1.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/core-object/-/core-object-3.1.5.tgz#fa627b87502adc98045e44678e9a8ec3b9c0d2a9" - integrity sha512-sA2/4+/PZ/KV6CKgjrVrrUVBKCkdDO02CUlQ0YKTQoYUwPYNOtOAcWlbYhd5v/1JqYaA6oZ4sDlOU4ppVw6Wbg== - dependencies: - chalk "^2.0.0" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ== - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g= - dependencies: - boom "2.x.x" - -crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-loader@^0.28.1: - version "0.28.11" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" - integrity sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg== - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - cssnano "^3.10.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.1.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-parse@1.7.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" - integrity sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs= - -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-selector-tokenizer@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -cssauron@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" - integrity sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg= - dependencies: - through X.X.X - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= - -cssnano@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -cuint@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" - integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= - -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= - -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8= - dependencies: - es5-ext "^0.10.9" - -dash-ast@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" - integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-uri-to-buffer@2: - version "2.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-2.0.1.tgz#ca8f56fe38b1fd329473e9d1b4a9afcd8ce1c045" - integrity sha512-OkVVLrerfAKZlW2ZZ3Ve2y65jgiWqBKsTfUIAFbn8nVbPcCZg6l6gikKlEYv0kXcmzqGm6mFq/Jf2vriuEkv8A== - dependencies: - "@types/node" "^8.0.7" - -date-format@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8" - integrity sha1-YV6CjiM90aubua4JUODOzPpuytg= - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= - -debug@*, debug@4, debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@~2.6.4, debug@~2.6.6, debug@~2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0, debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" - integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= - dependencies: - strip-bom "^2.0.0" - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - -degenerator@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= - dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" - -del@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -denodeify@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" - integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -deps-sort@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" - integrity sha1-CRckkC6EZYJg65EHSMzNGvbiH7U= - dependencies: - JSONStream "^1.0.3" - shasum "^1.0.0" - subarg "^1.0.0" - through2 "^2.0.0" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -detect-node@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== - -detective@^4.0.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" - integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== - dependencies: - acorn "^5.2.1" - defined "^1.0.0" - -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= - -diff@^3.1.0, diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" - -dom-converter@^0.2: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serialize@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" - -dom-serializer@0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domain-browser@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" - integrity sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw= - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -double-ended-queue@^2.1.0-0: - version "2.1.0-0" - resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" - integrity sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw= - -duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -ejs@^2.5.7: - version "2.6.1" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" - integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== - -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: - version "1.3.136" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.136.tgz#758a156109077536780cfa8207b1aeaa99843e33" - integrity sha512-xHkYkbEi4kI+2w5v6yBGCQTRXL7N0PWscygTFZu/1bArnPSo2WR9xjdw4m06RR4J5PncrWJcuOVv+MAG2mK5JQ== - -elliptic@^6.0.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" - integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -ember-cli-string-utils@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz#39b677fc2805f55173735376fcef278eaa4452a1" - integrity sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE= - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - -engine.io-client@~3.1.0: - version "3.1.6" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.6.tgz#5bdeb130f8b94a50ac5cbeb72583e7a4a063ddfd" - integrity sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg== - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" - integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.1.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.1.5.tgz#0e7ef9d690eb0b35597f1d4ad02a26ca2dba3845" - integrity sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA== - dependencies: - accepts "~1.3.4" - base64id "1.0.0" - cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" - optionalDependencies: - uws "~9.14.0" - -enhanced-resolve@^3.1.0, enhanced-resolve@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" - integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - object-assign "^4.0.1" - tapable "^0.2.7" - -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.50" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.50.tgz#6d0e23a0abdb27018e5ac4fd09b412bc5517a778" - integrity sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "^1.0.0" - -es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-promise@^4.0.3: - version "4.2.6" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" - integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - integrity sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8= - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escodegen@1.x.x: - version "1.11.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" - integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -esprima@3.x.x, esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= - dependencies: - d "1" - es5-ext "~0.10.14" - -eventemitter3@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - -events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== - -events@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= - -eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - integrity sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI= - dependencies: - original ">=0.0.5" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-braces@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" - integrity sha1-SIsdHSRRyz06axks/AMPRMWFX+o= - dependencies: - array-slice "^0.2.3" - array-unique "^0.2.1" - braces "^0.1.2" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" - integrity sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ= - dependencies: - is-number "^0.1.1" - repeat-string "^0.2.2" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - -exports-loader@^0.6.3: - version "0.6.4" - resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886" - integrity sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY= - dependencies: - loader-utils "^1.0.2" - source-map "0.5.x" - -express@^4.16.2: - version "4.17.0" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.0.tgz#288af62228a73f4c8ea2990ba3b791bb87cd4438" - integrity sha512-1Z7/t3Z5ZnBG252gKUPyItc4xdeaA0X934ca2ewckAsVsw9EG71i++ZHZPYnus8g/s5Bty8IMpSVEuRkmwwPRQ== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-text-webpack-plugin@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" - integrity sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ== - dependencies: - async "^2.4.1" - loader-utils "^1.1.0" - schema-utils "^0.3.0" - webpack-sources "^1.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastparse@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg= - dependencies: - websocket-driver ">=0.5.1" - -file-loader@^1.1.5: - version "1.1.11" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" - integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg== - dependencies: - loader-utils "^1.0.2" - schema-utils "^0.4.5" - -file-uri-to-path@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.2, finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -flag-icon-css@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/flag-icon-css/-/flag-icon-css-2.9.0.tgz#5793c15244e3c63ae36631478a758a3fc29c86be" - integrity sha512-SeHvGEB43XFPZiJz6lFFRGHfp+Db+s1qGiClW70cZauQVbPM42wImlNUEuXSXs94kPchz7xvoxP0QK1y6FxLfg== - -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37" - integrity sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc= - dependencies: - debug "^2.2.0" - -follow-redirects@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" - integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== - dependencies: - debug "^3.2.6" - -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" - integrity sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU= - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.11" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE= - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -form-data@~2.3.0, form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-access@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" - integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= - dependencies: - null-check "^1.0.0" - -fs-extra@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== - dependencies: - minipass "^2.2.1" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.0.0, fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.12.0" - -fstream@^1.0.0, fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - -generate-function@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" - integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== - dependencies: - is-property "^1.0.2" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA= - dependencies: - is-property "^1.0.0" - -get-assigned-identifiers@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" - integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-uri@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.3.tgz#fa13352269781d75162c6fc813c9e905323fbab5" - integrity sha512-x5j6Ks7FOgLD/GlvjKwgu7wdmMR55iuRHhn8hj/+gA+eSbxQvZ+AEomq+3MgVEZj1vpi738QahGbCCSIDtXtkw== - dependencies: - data-uri-to-buffer "2" - debug "4" - extend "~3.0.2" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "3" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob@7.0.x: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo= - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globule@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" - integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== - dependencies: - glob "~7.1.1" - lodash "~4.17.10" - minimatch "~3.0.2" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== - -handle-thing@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" - integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== - -handlebars@^4.0.3: - version "4.1.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" - integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4= - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0= - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio= - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ= - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -he@1.2.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hipchat-notifier@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e" - integrity sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4= - dependencies: - lodash "^4.0.0" - request "^2.0.0" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== - -html-entities@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= - -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-webpack-plugin@^2.29.0: - version "2.30.1" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5" - integrity sha1-f5xCG36pHsRg9WUn1430hO51N9U= - dependencies: - bluebird "^3.4.7" - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - toposort "^1.0.0" - -htmlescape@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" - integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= - -htmlparser2@^3.3.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2, http-errors@~1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.4.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" - integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - -http-proxy-middleware@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.13.0, http-proxy@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== - dependencies: - eventemitter3 "^3.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8= - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -httpntlm@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2" - integrity sha1-rQFScUOi6Hc8+uapb1hla7UqNLI= - dependencies: - httpreq ">=0.4.22" - underscore "~1.7.0" - -httpreq@>=0.4.22: - version "0.4.24" - resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f" - integrity sha1-QzX/2CzZaWaKOUZckprGHWOTYn8= - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -https-proxy-agent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" - integrity sha1-NffabEjOTdv6JkiRrFk+5f+GceY= - dependencies: - agent-base "2" - debug "2" - extend "3" - -https-proxy-agent@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - -iconv-lite@0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - integrity sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es= - -iconv-lite@0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= - dependencies: - postcss "^6.0.1" - -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" - -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -image-size@~0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" - integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - -inflection@~1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" - integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY= - -inflection@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.3.8.tgz#cbd160da9f75b14c3cc63578d4f396784bf3014e" - integrity sha1-y9Fg2p91sUw8xjV41POWeEvzAU4= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inline-source-map@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= - dependencies: - source-map "~0.5.3" - -insert-module-globals@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba" - integrity sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw== - dependencies: - JSONStream "^1.0.3" - acorn-node "^1.5.2" - combine-source-map "^0.8.0" - concat-stream "^1.6.1" - is-buffer "^1.1.0" - path-is-absolute "^1.0.1" - process "~0.11.0" - through2 "^2.0.0" - undeclared-identifiers "^1.1.2" - xtend "^4.0.0" - -internal-ip@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" - integrity sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w= - dependencies: - meow "^3.3.0" - -interpret@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== - -invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -ip@^1.1.0, ip@^1.1.2, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -ipaddr.js@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" - integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.0, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ== - -is-my-json-valid@^2.12.4: - version "2.20.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a" - integrity sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA== - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-number@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" - integrity sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY= - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - -is-property@^1.0.0, is-property@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= - -isarray@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" - integrity sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA== - -isbinaryfile@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" - integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== - dependencies: - buffer-alloc "^1.2.0" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-api@^1.1.14: - version "1.3.7" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" - integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA== - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.1" - istanbul-lib-hook "^1.2.2" - istanbul-lib-instrument "^1.10.2" - istanbul-lib-report "^1.1.5" - istanbul-lib-source-maps "^1.2.6" - istanbul-reports "^1.5.1" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-instrumenter-loader@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz#9957bd59252b373fae5c52b7b5188e6fde2a0949" - integrity sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w== - dependencies: - convert-source-map "^1.5.0" - istanbul-lib-instrument "^1.7.3" - loader-utils "^1.1.0" - schema-utils "^0.3.0" - -istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" - integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== - -istanbul-lib-hook@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" - integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.10.2, istanbul-lib-instrument@^1.7.3: - version "1.10.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" - integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.1" - semver "^5.3.0" - -istanbul-lib-report@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" - integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== - dependencies: - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" - integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" - integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== - dependencies: - handlebars "^4.0.3" - -jasmine-core@2.9.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.9.1.tgz#b6bbc1d8e65250d56f5888461705ebeeeb88f22f" - integrity sha1-trvB2OZSUNVvWIhGFwXr7uuI8i8= - -jasmine-core@~2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" - integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= - -jasmine-spec-reporter@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz#1d632aec0341670ad324f92ba84b4b32b35e9e22" - integrity sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg== - dependencies: - colors "1.1.2" - -jasmine@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" - integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= - dependencies: - exit "^0.1.2" - glob "^7.0.6" - jasmine-core "~2.8.0" - -jasminewd2@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" - integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= - -js-base64@^2.1.8, js-base64@^2.1.9: - version "2.5.1" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" - integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== - -"js-tokens@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-yaml@^3.7.0, js-yaml@^3.9.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-loader@^0.5.4: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" - integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - -json-stable-stringify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" - integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@5.0.x, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jszip@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.1.tgz#c5d32df7274042282b157efb16e522b43435e01a" - integrity sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - set-immediate-shim "~1.0.1" - -jwt-decode@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-2.2.0.tgz#7d86bd56679f58ce6a84704a657dd392bba81a79" - integrity sha1-fYa9VmefWM5qhHBKZX3TkruoGnk= - -karma-chrome-launcher@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" - integrity sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w== - dependencies: - fs-access "^1.0.0" - which "^1.2.1" - -karma-cli@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/karma-cli/-/karma-cli-1.0.1.tgz#ae6c3c58a313a1d00b45164c455b9b86ce17f960" - integrity sha1-rmw8WKMTodALRRZMRVubhs4X+WA= - dependencies: - resolve "^1.1.6" - -karma-coverage-istanbul-reporter@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.4.1.tgz#2b42d145ddbb4868d85d52888c495a21c61d873c" - integrity sha512-5og0toMjgLvsL9+TzGH4Rk1D0nr7pMIRJBg29xP4mHMKy/1KUJ12UzoqI6mBNCRFa4nDvZS2MRrN7p+RkZNWxQ== - dependencies: - istanbul-api "^1.1.14" - minimatch "^3.0.4" - -karma-jasmine-html-reporter@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz#48a8e5ef18807617ee2b5e33c1194c35b439524c" - integrity sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw= - dependencies: - karma-jasmine "^1.0.2" - -karma-jasmine@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.1.tgz#6fe840e75a11600c9d91e84b33c458e1c46a3529" - integrity sha1-b+hA51oRYAydkehLM8RY4cRqNSk= - -karma-jasmine@^1.0.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.2.tgz#394f2b25ffb4a644b9ada6f22d443e2fd08886c3" - integrity sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM= - -karma-source-map-support@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz#58526ceccf7e8730e56effd97a4de8d712ac0d6b" - integrity sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A== - dependencies: - source-map-support "^0.5.5" - -karma@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/karma/-/karma-2.0.0.tgz#a02698dd7f0f05ff5eb66ab8f65582490b512e58" - integrity sha512-K9Kjp8CldLyL9ANSUctDyxC7zH3hpqXj/K09qVf06K3T/kXaHtFZ5tQciK7OzQu68FLvI89Na510kqQ2LCbpIw== - dependencies: - bluebird "^3.3.0" - body-parser "^1.16.1" - browserify "^14.5.0" - chokidar "^1.4.1" - colors "^1.1.0" - combine-lists "^1.0.0" - connect "^3.6.0" - core-js "^2.2.0" - di "^0.0.1" - dom-serialize "^2.2.0" - expand-braces "^0.1.1" - glob "^7.1.1" - graceful-fs "^4.1.2" - http-proxy "^1.13.0" - isbinaryfile "^3.0.0" - lodash "^4.17.4" - log4js "^2.3.9" - mime "^1.3.4" - minimatch "^3.0.2" - optimist "^0.6.1" - qjobs "^1.1.4" - range-parser "^1.2.0" - rimraf "^2.6.0" - safe-buffer "^5.0.1" - socket.io "2.0.4" - source-map "^0.6.1" - tmp "0.0.33" - useragent "^2.1.12" - -killable@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -labeled-stream-splicer@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz#9cffa32fd99e1612fd1d86a8db962416d5292926" - integrity sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg== - dependencies: - inherits "^2.0.1" - isarray "^2.0.4" - stream-splicer "^2.0.0" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -less-loader@^4.0.5: - version "4.1.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e" - integrity sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg== - dependencies: - clone "^2.1.1" - loader-utils "^1.1.0" - pify "^3.0.0" - -less@^2.7.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b" - integrity sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ== - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - mime "^1.2.11" - mkdirp "^0.5.0" - promise "^7.1.1" - request "2.81.0" - source-map "^0.5.3" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -libbase64@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6" - integrity sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY= - -libmime@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/libmime/-/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6" - integrity sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY= - dependencies: - iconv-lite "0.4.15" - libbase64 "0.1.0" - libqp "1.1.0" - -libqp@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" - integrity sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g= - -license-webpack-plugin@^1.0.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-1.5.0.tgz#22ca0f12a884aee35bb61dfd8eab45fe36a04523" - integrity sha512-Of/H79rZqm2aeg4RnP9SMSh19qkKemoLT5VaJV58uH5AxeYWEcBgGFs753JEJ/Hm6BPvQVfIlrrjoBwYj8p7Tw== - dependencies: - ejs "^2.5.7" - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -load-awesome@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-awesome/-/load-awesome-1.1.0.tgz#5b99cabb28dfaa55bf4446f658c1badcb68eca98" - integrity sha1-W5nKuyjfqlW/REb2WMG63LaOypg= - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -loader-runner@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.memoize@~3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= - -lodash.tail@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" - integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.0.0, lodash@^4.11.1, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.5.0, lodash@~4.17.10: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== - -log4js@^2.3.9: - version "2.11.0" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-2.11.0.tgz#bf3902eff65c6923d9ce9cfbd2db54160e34005a" - integrity sha512-z1XdwyGFg8/WGkOyF6DPJjivCWNLKrklGdViywdYnSKOvgtEBo2UyEMZS5sD2mZrQlU3TvO8wDWLc8mzE1ncBQ== - dependencies: - circular-json "^0.5.4" - date-format "^1.2.0" - debug "^3.1.0" - semver "^5.5.0" - streamroller "0.7.0" - optionalDependencies: - amqplib "^0.5.2" - axios "^0.15.3" - hipchat-notifier "^1.1.0" - loggly "^1.1.0" - mailgun-js "^0.18.0" - nodemailer "^2.5.0" - redis "^2.7.1" - slack-node "~0.2.0" - -loggly@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/loggly/-/loggly-1.1.1.tgz#0a0fc1d3fa3a5ec44fdc7b897beba2a4695cebee" - integrity sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4= - dependencies: - json-stringify-safe "5.0.x" - request "2.75.x" - timespan "2.3.x" - -loglevel@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" - integrity sha1-4PyVEztu8nbNyIh82vJKpvFW+Po= - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lru-cache@4.1.x, lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -magic-string@^0.22.3: - version "0.22.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" - integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== - dependencies: - vlq "^0.2.2" - -mailcomposer@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-4.0.1.tgz#0e1c44b2a07cf740ee17dc149ba009f19cadfeb4" - integrity sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ= - dependencies: - buildmail "4.0.1" - libmime "3.0.0" - -mailgun-js@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/mailgun-js/-/mailgun-js-0.18.1.tgz#ee39aa18d7bb598a5ce9ede84afb681defc8a6b0" - integrity sha512-lvuMP14u24HS2uBsJEnzSyPMxzU2b99tQsIx1o6QNjqxjk8b3WvR+vq5oG1mjqz/IBYo+5gF+uSoDS0RkMVHmg== - dependencies: - async "~2.6.0" - debug "~3.1.0" - form-data "~2.3.0" - inflection "~1.12.0" - is-stream "^1.1.0" - path-proxy "~1.0.0" - promisify-call "^2.0.2" - proxy-agent "~3.0.0" - tsscmp "~1.0.0" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-error@^1.1.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" - integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= - -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - -memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^3.3.0, meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.40.0, "mime-db@>= 1.40.0 < 2": - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.7: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== - dependencies: - mime-db "1.40.0" - -mime@1.6.0, mime@^1.2.11, mime@^1.3.4, mime@^1.4.1, mime@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -minipass@^2.2.1, minipass@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" - -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -module-deps@^4.0.8: - version "4.1.1" - resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd" - integrity sha1-IyFYM/HaE/1gbMuAh7RIUty4If0= - dependencies: - JSONStream "^1.0.3" - browser-resolve "^1.7.0" - cached-path-relative "^1.0.0" - concat-stream "~1.5.0" - defined "^1.0.0" - detective "^4.0.0" - duplexer2 "^0.1.2" - inherits "^2.0.1" - parents "^1.0.0" - readable-stream "^2.0.2" - resolve "^1.1.3" - stream-combiner2 "^1.1.1" - subarg "^1.0.0" - through2 "^2.0.0" - xtend "^4.0.0" - -moment@2.20.1: - version "2.20.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" - integrity sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg== - -moment@^2.10.2: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== - -moment@~2.18.0: - version "2.18.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" - integrity sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8= - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1, ms@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -nan@^2.12.1, nan@^2.13.2: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - -netmask@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= - -next-tick@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - -ng2-charts@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ng2-charts/-/ng2-charts-1.6.0.tgz#108a2133ff62a8623895240fadbddbea2951f29d" - integrity sha512-9w0WH69x5/nuqC1og2WaY39NbaBqTGIP1+5gZaH7/KPN6UEPonNg/pYnsIVklLj1DWPWXKa8+XXIJZ1jy5nLxg== - dependencies: - chart.js "^2.6.0" - -ng2-toastr@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/ng2-toastr/-/ng2-toastr-4.1.2.tgz#1b452f07139961c38f866c6e24a06247efa21b11" - integrity sha1-G0UvBxOZYcOPhmxuJKBiR++iGxE= - -ngx-bootstrap@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/ngx-bootstrap/-/ngx-bootstrap-2.0.5.tgz#83aab39d1e4fe811fad2b34f7927f9ce19d68daa" - integrity sha512-IduTVb78RDVlrz2+bn6GXK/REfM/RsRnz/AENwmrgTOg1AtvahJ9qANxXRNn33Kv9GJmkOYy/MhD3DyzeMb16w== - -ngx-editor@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ngx-editor/-/ngx-editor-3.3.0.tgz#f0223b647b79825dec083c0232b0d3cea06daecf" - integrity sha512-JWbsuhtmpAezpgCtau6sG40wh6DPqPQrRRXi1sWO7bowgAvTsY3pA/OFjveUpKRsLLv14wECFwap73tttj0zaQ== - dependencies: - tslib "^1.7.1" - -ngx-spinner@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ngx-spinner/-/ngx-spinner-1.2.0.tgz#1836edee824b747db8ade339723c5d7d21228daa" - integrity sha512-SpJurRVmjnQhwnouv9uoqrfGSj43naZMFXBCgCWCy2jBsxbEqLP/y4Oy5wbJfDXLzLCu/xycdOonND1eSd8ByA== - -ngx-toastr@^8.5.0: - version "8.10.2" - resolved "https://registry.yarnpkg.com/ngx-toastr/-/ngx-toastr-8.10.2.tgz#08f7d392a76d3d5c87cde92f55c81d51ced64e74" - integrity sha512-sH1/CWRJgiMu+092ml+rLKhMi0YqCJfQ25ZLoT8YyNI614Dgo8YRI6hrm0JtMyVaOKZipX1xwPRM/S39aqSQPw== - dependencies: - tslib "^1.9.0" - -ngx-twitter-timeline@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ngx-twitter-timeline/-/ngx-twitter-timeline-0.1.3.tgz#f38e5aaf39db0a4ab7fe22858d15f25045fe1d1c" - integrity sha1-845arznbCkq3/iKFjRXyUEX+HRw= - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-forge@0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" - integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== - -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - -node-libs-browser@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" - integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.0" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "0.0.4" - -node-modules-path@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/node-modules-path/-/node-modules-path-1.0.2.tgz#e3acede9b7baf4bc336e3496b58e5b40d517056e" - integrity sha512-6Gbjq+d7uhkO7epaKi5DNgUJn7H0gEyA4Jg0Mo1uQOi3Rk50G83LtmhhFyw0LxnAFhtlspkiiw52ISP13qzcBg== - -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-sass@^4.7.2, node-sass@^4.9.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" - integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash "^4.17.11" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.13.2" - node-gyp "^3.8.0" - npmlog "^4.0.0" - request "^2.88.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -node-uuid@~1.4.7: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - integrity sha1-sEDrCSOWivq/jTL7HxfxFn/auQc= - -nodemailer-direct-transport@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86" - integrity sha1-6W+vuQNYVglH5WkBfZfmBzilCoY= - dependencies: - nodemailer-shared "1.1.0" - smtp-connection "2.12.0" - -nodemailer-fetch@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4" - integrity sha1-ecSQihwPXzdbc/6IjamCj23JY6Q= - -nodemailer-shared@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0" - integrity sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA= - dependencies: - nodemailer-fetch "1.6.0" - -nodemailer-smtp-pool@2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72" - integrity sha1-LrlNbPhXgLG0clzoU7nL1ejajHI= - dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" - -nodemailer-smtp-transport@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77" - integrity sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c= - dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" - -nodemailer-wellknown@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5" - integrity sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U= - -nodemailer@^2.5.0: - version "2.7.2" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-2.7.2.tgz#f242e649aeeae39b6c7ed740ef7b061c404d30f9" - integrity sha1-8kLmSa7q45tsftdA73sGHEBNMPk= - dependencies: - libmime "3.0.0" - mailcomposer "4.0.1" - nodemailer-direct-transport "3.3.2" - nodemailer-shared "1.1.0" - nodemailer-smtp-pool "2.8.2" - nodemailer-smtp-transport "2.7.2" - socks "1.1.9" - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-packlist@^1.1.6: - version "1.4.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -null-check@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" - integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -opn@^5.1.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -opn@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" - integrity sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg== - dependencies: - is-wsl "^1.1.0" - -optimist@^0.6.1, optimist@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -options@>=0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" - integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8= - -original@>=0.0.5: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0, os-browserify@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@0, osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^1.0.0, p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -pac-proxy-agent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.0.tgz#11d578b72a164ad74bf9d5bac9ff462a38282432" - integrity sha512-AOUX9jES/EkQX2zRz0AW7lSx9jD//hQS8wFXBvcnd/J2Py9KaMJMqV/LPqJssj1tgGufotb2mmopGPR15ODv1Q== - dependencies: - agent-base "^4.2.0" - debug "^3.1.0" - get-uri "^2.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - pac-resolver "^3.0.0" - raw-body "^2.2.0" - socks-proxy-agent "^4.0.1" - -pac-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" - integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA== - dependencies: - co "^4.6.0" - degenerator "^1.0.4" - ip "^1.1.5" - netmask "^1.0.6" - thunkify "^2.1.2" - -pako@~1.0.2, pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== - -parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - -parents@^1.0.0, parents@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= - dependencies: - path-platform "~0.11.15" - -parse-asn1@^5.0.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" - integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= - dependencies: - better-assert "~1.0.0" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= - -path-browserify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.5, path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= - -path-proxy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-proxy/-/path-proxy-1.0.0.tgz#18e8a36859fc9d2f1a53b48dee138543c020de5e" - integrity sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4= - dependencies: - inflection "~1.3.0" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -portfinder@^1.0.9, portfinder@~1.0.12: - version "1.0.20" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" - integrity sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw== - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= - dependencies: - postcss "^5.0.4" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= - dependencies: - postcss "^5.0.14" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= - dependencies: - postcss "^5.0.16" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" - integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== - dependencies: - postcss "^5.0.4" - -postcss-import@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-11.1.0.tgz#55c9362c9192994ec68865d224419df1db2981f0" - integrity sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw== - dependencies: - postcss "^6.0.1" - postcss-value-parser "^3.2.3" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-load-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" - integrity sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ== - dependencies: - cosmiconfig "^4.0.0" - import-cwd "^2.0.0" - -postcss-loader@^2.0.10: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.6.tgz#1d7dd7b17c6ba234b9bed5af13e0bea40a42d740" - integrity sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg== - dependencies: - loader-utils "^1.1.0" - postcss "^6.0.0" - postcss-load-config "^2.0.0" - schema-utils "^0.4.0" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= - dependencies: - postcss "^5.0.4" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-modules-extract-imports@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" - integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= - dependencies: - postcss "^5.0.5" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= - dependencies: - postcss "^5.0.4" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-url@^7.1.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-7.3.2.tgz#5fea273807fb84b38c461c3c9a9e8abd235f7120" - integrity sha512-QMV5mA+pCYZQcUEPQkmor9vcPQ2MT+Ipuu8qdi1gVxbNiIiErEGft+eny1ak19qALoBkccS5AHaCaCDzh7b9MA== - dependencies: - mime "^1.4.1" - minimatch "^3.0.4" - mkdirp "^0.5.0" - postcss "^6.0.1" - xxhashjs "^0.2.1" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.17: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - -pretty-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= - dependencies: - renderkid "^2.0.1" - utila "~0.4" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== - -process@^0.11.10, process@~0.11.0: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -promisify-call@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/promisify-call/-/promisify-call-2.0.4.tgz#d48c2d45652ccccd52801ddecbd533a6d4bd5fba" - integrity sha1-1IwtRWUszM1SgB3ey9UzptS9X7o= - dependencies: - with-callback "^1.0.2" - -protractor@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.3.0.tgz#5df98201cbdaeb50826af6d05630ef1945bf9c32" - integrity sha512-8z1TWtc/I9Kn4fkfg87DhkSAi0arul7DHBEeJ70sy66teQAeffjQED1s0Gduigme7hxHRYdYEKbhHYz28fpv5w== - dependencies: - "@types/node" "^6.0.46" - "@types/q" "^0.0.32" - "@types/selenium-webdriver" "~2.53.39" - blocking-proxy "^1.0.0" - chalk "^1.1.3" - glob "^7.0.3" - jasmine "2.8.0" - jasminewd2 "^2.1.0" - optimist "~0.6.0" - q "1.4.1" - saucelabs "~1.3.0" - selenium-webdriver "3.6.0" - source-map-support "~0.4.0" - webdriver-js-extender "^1.0.0" - webdriver-manager "^12.0.6" - -proxy-addr@~2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" - integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.0" - -proxy-agent@~3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.0.3.tgz#1c1a33db60ef5f2e9e35b876fd63c2bc681c611d" - integrity sha512-PXVVVuH9tiQuxQltFJVSnXWuDtNr+8aNBP6XVDDCDiUuDN8eRCm+ii4/mFWmXWEA0w8jjJSlePa4LXlM4jIzNA== - dependencies: - agent-base "^4.2.0" - debug "^3.1.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - lru-cache "^4.1.2" - pac-proxy-agent "^3.0.0" - proxy-from-env "^1.0.0" - socks-proxy-agent "^4.0.1" - -proxy-from-env@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.24: - version "1.1.31" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@1.4.1, punycode@^1.2.4, punycode@^1.3.2, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" - integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= - -q@^1.1.2, q@^1.4.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qjobs@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@~6.2.0: - version "6.2.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - integrity sha1-HPyyXBCpsrSDBT/zn138kjOQjP4= - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0, querystring-es3@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" - integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.0.3, range-parser@^1.2.0, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0, raw-body@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-loader@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" - integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= - dependencies: - pify "^2.3.0" - -read-only-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" - integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= - dependencies: - readable-stream "^2.0.2" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@1.1.x, "readable-stream@1.x >=1.1.9": - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@3, readable-stream@^3.0.6, readable-stream@^3.1.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9" - integrity sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~2.0.0, readable-stream@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readdirp@^2.0.0, readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redis-commands@^1.2.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.5.0.tgz#80d2e20698fe688f227127ff9e5164a7dd17e785" - integrity sha512-6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg== - -redis-parser@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b" - integrity sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs= - -redis@^2.7.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" - integrity sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A== - dependencies: - double-ended-queue "^2.1.0-0" - redis-commands "^1.2.0" - redis-parser "^2.6.0" - -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" - integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= - dependencies: - balanced-match "^0.4.2" - -reflect-metadata@^0.1.2: - version "0.1.13" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - -regenerate@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" - integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== - dependencies: - css-select "^1.1.0" - dom-converter "^0.2" - htmlparser2 "^3.3.0" - strip-ansi "^3.0.0" - utila "^0.4.0" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" - integrity sha1-x6jTI2BoNiBZp+RlH8aITosftK4= - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request@2.75.x: - version "2.75.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" - integrity sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM= - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.0.0" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA= - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -request@^2.0.0, request@^2.74.0, request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -requestretry@^1.2.2: - version "1.13.0" - resolved "https://registry.yarnpkg.com/requestretry/-/requestretry-1.13.0.tgz#213ec1006eeb750e8b8ce54176283d15a8d55d94" - integrity sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg== - dependencies: - extend "^3.0.0" - lodash "^4.15.0" - request "^2.74.0" - when "^3.7.7" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2: - version "1.11.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" - integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw== - dependencies: - path-parse "^1.0.6" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= - dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@5.5.6: - version "5.5.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02" - integrity sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg== - dependencies: - symbol-observable "1.0.1" - -rxjs@^5.5.6: - version "5.5.12" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" - integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== - dependencies: - symbol-observable "1.0.1" - -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" - -sass-loader@^6.0.6: - version "6.0.7" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.7.tgz#dd2fdb3e7eeff4a53f35ba6ac408715488353d00" - integrity sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA== - dependencies: - clone-deep "^2.0.1" - loader-utils "^1.0.1" - lodash.tail "^4.1.1" - neo-async "^2.5.0" - pify "^3.0.0" - -saucelabs@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.3.0.tgz#d240e8009df7fa87306ec4578a69ba3b5c424fee" - integrity sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4= - dependencies: - https-proxy-agent "^1.0.0" - -sax@0.5.x: - version "0.5.8" - resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" - integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE= - -sax@0.6.x: - version "0.6.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" - integrity sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk= - -sax@>=0.6.0, sax@^1.2.4, sax@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -schema-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" - integrity sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8= - dependencies: - ajv "^5.0.0" - -schema-utils@^0.4.0, schema-utils@^0.4.5: - version "0.4.7" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" - integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selenium-webdriver@3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" - integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q== - dependencies: - jszip "^3.1.3" - rimraf "^2.5.4" - tmp "0.0.30" - xml2js "^0.4.17" - -selenium-webdriver@^2.53.2: - version "2.53.3" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz#d29ff5a957dff1a1b49dc457756e4e4bfbdce085" - integrity sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU= - dependencies: - adm-zip "0.4.4" - rimraf "^2.2.8" - tmp "0.0.24" - ws "^1.0.1" - xml2js "0.4.4" - -selfsigned@^1.9.1: - version "1.10.4" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" - integrity sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw== - dependencies: - node-forge "0.7.5" - -semver-dsl@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" - integrity sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA= - dependencies: - semver "^5.3.0" - -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.5.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - -semver@~5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" - integrity sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no= - -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serialize-javascript@^1.4.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" - integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-immediate-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" - integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA== - dependencies: - is-extendable "^0.1.1" - kind-of "^5.0.0" - mixin-object "^2.0.1" - -shasum@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" - integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= - dependencies: - json-stable-stringify "~0.0.0" - sha.js "~2.4.4" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -silent-error@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.1.1.tgz#f72af5b0d73682a2ba1778b7e32cd8aa7c2d8662" - integrity sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw== - dependencies: - debug "^2.2.0" - -simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= - -simple-line-icons@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/simple-line-icons/-/simple-line-icons-2.4.1.tgz#b75bc5a0d87e530928c2ccda5735274bb256f234" - integrity sha1-t1vFoNh+UwkowszaVzUnS7JW8jQ= - -slack-node@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30" - integrity sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA= - dependencies: - requestretry "^1.2.2" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - -smart-buffer@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d" - integrity sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw== - -smart-buffer@^1.0.4: - version "1.1.15" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" - integrity sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY= - -smtp-connection@2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1" - integrity sha1-1275EnyyPCJZ7bHoNJwujV4tdME= - dependencies: - httpntlm "1.6.1" - nodemailer-shared "1.1.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg= - dependencies: - hoek "2.x.x" - -socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= - -socket.io-client@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" - integrity sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44= - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~2.6.4" - engine.io-client "~3.1.0" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.1.1" - to-array "0.1.4" - -socket.io-parser@~3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e" - integrity sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g== - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - has-binary2 "~1.0.2" - isarray "2.0.1" - -socket.io@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014" - integrity sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ= - dependencies: - debug "~2.6.6" - engine.io "~3.1.0" - socket.io-adapter "~1.1.0" - socket.io-client "2.0.4" - socket.io-parser "~3.1.1" - -sockjs-client@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" - integrity sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM= - dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.8" - -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== - dependencies: - faye-websocket "^0.10.0" - uuid "^3.0.1" - -socks-proxy-agent@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691" - integrity sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE= - dependencies: - ip "^1.1.2" - smart-buffer "^1.0.4" - -socks@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e" - integrity sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ== - dependencies: - ip "^1.1.5" - smart-buffer "4.0.2" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.1, source-map-support@^0.4.2, source-map-support@~0.4.0: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.0, source-map-support@^0.5.5: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@0.1.x: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= - dependencies: - amdefine ">=0.0.4" - -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" - integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.0.tgz#81f222b5a743a329aa12cea6a390e60e9b613c52" - integrity sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ== - dependencies: - safe-buffer "^5.1.1" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" - integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== - dependencies: - readable-stream "^2.0.1" - -stream-browserify@^2.0.0, stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-combiner2@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.0.0, stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= - -stream-splicer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" - integrity sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.2" - -streamroller@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b" - integrity sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ== - dependencies: - date-format "^1.2.0" - debug "^3.1.0" - mkdirp "^0.5.1" - readable-stream "^2.3.0" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringstream@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" - integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -style-loader@^0.13.1: - version "0.13.2" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" - integrity sha1-dFMzhM9pjHEEx5URULSXF63C87s= - dependencies: - loader-utils "^1.0.2" - -stylus-loader@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6" - integrity sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA== - dependencies: - loader-utils "^1.0.2" - lodash.clonedeep "^4.5.0" - when "~3.6.x" - -stylus@^0.54.5: - version "0.54.5" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" - integrity sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk= - dependencies: - css-parse "1.7.x" - debug "*" - glob "7.0.x" - mkdirp "0.5.x" - sax "0.5.x" - source-map "0.1.x" - -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= - dependencies: - minimist "^1.1.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^3.1.2, supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - -supports-color@^4.0.0, supports-color@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= - dependencies: - has-flag "^2.0.0" - -supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= - -syntax-error@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" - integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== - dependencies: - acorn-node "^1.2.0" - -tapable@^0.2.7: - version "0.2.9" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" - integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== - -tar@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" - integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== - dependencies: - block-stream "*" - fstream "^1.0.12" - inherits "2" - -tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -"through@>=2.2.7 <3", through@X.X.X: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunkify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= - -thunky@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" - integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow== - -time-stamp@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.2.0.tgz#917e0a66905688790ec7bbbde04046259af83f57" - integrity sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA== - -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= - dependencies: - process "~0.11.0" - -timers-browserify@^2.0.4: - version "2.0.10" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" - integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== - dependencies: - setimmediate "^1.0.4" - -timespan@2.3.x: - version "2.3.0" - resolved "https://registry.yarnpkg.com/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" - integrity sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk= - -tmp@0.0.24: - version "0.0.24" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12" - integrity sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI= - -tmp@0.0.30: - version "0.0.30" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" - integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= - dependencies: - os-tmpdir "~1.0.1" - -tmp@0.0.33, tmp@0.0.x: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -toposort@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= - -tough-cookie@~2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA== - dependencies: - punycode "^1.4.1" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tree-kill@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" - integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -"true-case-path@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" - integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== - dependencies: - glob "^7.1.2" - -ts-helpers@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ts-helpers/-/ts-helpers-1.1.2.tgz#fc69be9f1f3baed01fb1a0ef8d4cfe748814d835" - integrity sha1-/Gm+nx87rtAfsaDvjUz+dIgU2DU= - -ts-node@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-4.1.0.tgz#36d9529c7b90bb993306c408cd07f7743de20712" - integrity sha512-xcZH12oVg9PShKhy3UHyDmuDLV3y7iKwX25aMVPt1SIXSuAfWkFiGPEkg+th8R4YKW/QCxDoW7lJdb15lx6QWg== - dependencies: - arrify "^1.0.0" - chalk "^2.3.0" - diff "^3.1.0" - make-error "^1.1.1" - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map-support "^0.5.0" - tsconfig "^7.0.0" - v8flags "^3.0.0" - yn "^2.0.0" - -tsconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" - integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== - dependencies: - "@types/strip-bom" "^3.0.0" - "@types/strip-json-comments" "0.0.30" - strip-bom "^3.0.0" - strip-json-comments "^2.0.0" - -tsickle@^0.26.0: - version "0.26.0" - resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.26.0.tgz#40b30a2dd6abcb33b182e37596674bd1cfe4039c" - integrity sha512-eWJ2CUfttGK0LqF9iJ/Avnxbj4M+fCyJ50Zag3wm73Fut1hsasPRHKxKdrMWVj4BMHnQNx7TO+DdNmLmJTSuNw== - dependencies: - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map "^0.5.6" - source-map-support "^0.4.2" - -tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== - -tslint@5.9.1: - version "5.9.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.9.1.tgz#1255f87a3ff57eb0b0e1f0e610a8b4748046c9ae" - integrity sha1-ElX4ej/1frCw4fDmEKi0dIBGya4= - dependencies: - babel-code-frame "^6.22.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.7.0" - minimatch "^3.0.4" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.12.1" - -tsscmp@~1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" - integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== - -tsutils@^2.12.1: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -tty-browserify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us= - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray@^0.0.6, typedarray@~0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@2.6.2, typescript@~2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" - integrity sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q= - -uglify-es@^3.3.4: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== - dependencies: - commander "~2.13.0" - source-map "~0.6.1" - -uglify-js@3.4.x: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - -uglify-js@^2.8.29: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-js@^3.1.4: - version "3.5.15" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.15.tgz#fe2b5378fd0b09e116864041437bff889105ce24" - integrity sha512-fe7aYFotptIddkwcm6YuA0HmknBZ52ZzOsUxZEdhhkSsz7RfjHDX2QDxwKTiv4JQ5t5NhfmpgAK+J7LiDhKSqg== - dependencies: - commander "~2.20.0" - source-map "~0.6.1" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= - -uglifyjs-webpack-plugin@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" - integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk= - dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" - webpack-sources "^1.0.1" - -uglifyjs-webpack-plugin@^1.1.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de" - integrity sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw== - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - schema-utils "^0.4.5" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - uglify-es "^3.3.4" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -ultron@1.0.x: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" - integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - -umd@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" - integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== - -undeclared-identifiers@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" - integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== - dependencies: - acorn-node "^1.3.0" - dash-ast "^1.0.0" - get-assigned-identifiers "^1.2.0" - simple-concat "^1.0.0" - xtend "^4.0.1" - -underscore@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" - integrity sha1-a7rwh3UA02vjTsqlhODbn+8DUgk= - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" - integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== - dependencies: - imurmurhash "^0.1.4" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" - integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-loader@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" - integrity sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q== - dependencies: - loader-utils "^1.0.2" - mime "^1.4.1" - schema-utils "^0.3.0" - -url-parse@^1.1.8, url-parse@^1.4.3, url-parse@~1.4.3: - version "1.4.7" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" - integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0, url@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -useragent@^2.1.12: - version "2.3.0" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" - integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== - dependencies: - lru-cache "4.1.x" - tmp "0.0.x" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -util@~0.10.1: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - -utila@^0.4.0, utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -uws@~9.14.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/uws/-/uws-9.14.0.tgz#fac8386befc33a7a3705cbd58dc47b430ca4dd95" - integrity sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg== - -v8flags@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" - integrity sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w== - dependencies: - homedir-polyfill "^1.0.1" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vendors@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0" - integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vlq@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" - integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== - -vm-browserify@0.0.4, vm-browserify@~0.0.1: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= - dependencies: - indexof "0.0.1" - -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - -watchpack@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== - dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -webdriver-js-extender@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz#81c533a9e33d5bfb597b4e63e2cdb25b54777515" - integrity sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU= - dependencies: - "@types/selenium-webdriver" "^2.53.35" - selenium-webdriver "^2.53.2" - -webdriver-manager@^12.0.6: - version "12.1.4" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.4.tgz#d737ab845fb131e4d66c0eaf8ac374c2bc3bfe22" - integrity sha512-aNUzdimlHSl3EotUTdE2QwP9sBUjZgWPCy8C+m1wMmF9jBDKuO/24nnpr2O25Db8dYtsjvj9drPTpSIGqRrNnQ== - dependencies: - adm-zip "^0.4.9" - chalk "^1.1.1" - del "^2.2.0" - glob "^7.0.3" - ini "^1.3.4" - minimist "^1.2.0" - q "^1.4.1" - request "^2.87.0" - rimraf "^2.5.2" - semver "^5.3.0" - xml2js "^0.4.17" - -webpack-dev-middleware@1.12.2, webpack-dev-middleware@~1.12.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" - integrity sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A== - dependencies: - memory-fs "~0.4.1" - mime "^1.5.0" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - time-stamp "^2.0.0" - -webpack-dev-server@~2.11.0: - version "2.11.5" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.5.tgz#416fbdea0e04eebe44a626e791d5a2eb37fe8c48" - integrity sha512-7TdOKKt7G3sWEhPKV0zP+nD0c4V9YKUJ3wDdBwQsZNo58oZIRoVIu66pg7PYkBW8A74msP9C2kLwmxGHndz/pw== - dependencies: - ansi-html "0.0.7" - array-includes "^3.0.3" - bonjour "^3.5.0" - chokidar "^2.1.2" - compression "^1.7.3" - connect-history-api-fallback "^1.3.0" - debug "^3.1.0" - del "^3.0.0" - express "^4.16.2" - html-entities "^1.2.0" - http-proxy-middleware "^0.19.1" - import-local "^1.0.0" - internal-ip "1.2.0" - ip "^1.1.5" - killable "^1.0.0" - loglevel "^1.4.1" - opn "^5.1.0" - portfinder "^1.0.9" - selfsigned "^1.9.1" - serve-index "^1.9.1" - sockjs "0.3.19" - sockjs-client "1.1.5" - spdy "^4.0.0" - strip-ansi "^3.0.0" - supports-color "^5.1.0" - webpack-dev-middleware "1.12.2" - yargs "6.6.0" - -webpack-merge@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.1.tgz#5e923cf802ea2ace4fd5af1d3247368a633489b4" - integrity sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw== - dependencies: - lodash "^4.17.5" - -webpack-sources@^1.0.0, webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" - integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-subresource-integrity@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-1.3.2.tgz#38fdcbdd9b90b224500626efa1e6d17fc650800f" - integrity sha512-VpBtk0Ha1W0GebTzPj3Y8UqbmPDp+HqGlegRv+hS8g8/x818dw9NuEfJEOp5CF6zTPs3KF6aqknVu52Bh5h1eQ== - dependencies: - webpack-sources "^1.3.0" - -webpack@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.10.0.tgz#5291b875078cf2abf42bdd23afe3f8f96c17d725" - integrity sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA== - dependencies: - acorn "^5.0.0" - acorn-dynamic-import "^2.0.0" - ajv "^5.1.5" - ajv-keywords "^2.0.0" - async "^2.1.2" - enhanced-resolve "^3.4.0" - escope "^3.6.0" - interpret "^1.0.0" - json-loader "^0.5.4" - json5 "^0.5.1" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - mkdirp "~0.5.0" - node-libs-browser "^2.0.0" - source-map "^0.5.3" - supports-color "^4.2.1" - tapable "^0.2.7" - uglifyjs-webpack-plugin "^0.4.6" - watchpack "^1.4.0" - webpack-sources "^1.0.1" - yargs "^8.0.2" - -websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= - dependencies: - http-parser-js ">=0.4.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== - -when@^3.7.7: - version "3.7.8" - resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" - integrity sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I= - -when@~3.6.x: - version "3.6.4" - resolved "https://registry.yarnpkg.com/when/-/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e" - integrity sha1-RztRfsFZ4rhQBUl6E5g/CVQS404= - -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@1, which@^1.2.1, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= - -with-callback@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/with-callback/-/with-callback-1.0.2.tgz#a09629b9a920028d721404fb435bdcff5c91bc21" - integrity sha1-oJYpuakgAo1yFAT7Q1vc/1yRvCE= - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -worker-farm@^1.5.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" - integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== - dependencies: - options ">=0.0.5" - ultron "1.0.x" - -ws@~3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -xml2js@0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d" - integrity sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0= - dependencies: - sax "0.6.x" - xmlbuilder ">=1.0.0" - -xml2js@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - -xmlbuilder@>=1.0.0: - version "13.0.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-13.0.2.tgz#02ae33614b6a047d1c32b5389c1fdacb2bce47a7" - integrity sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ== - -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= - -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= - -xxhashjs@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" - integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== - dependencies: - cuint "^0.2.2" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== - -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - integrity sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw= - dependencies: - camelcase "^3.0.0" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= - dependencies: - camelcase "^3.0.0" - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= - dependencies: - camelcase "^4.1.0" - -yargs@6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - integrity sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg= - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" - -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= - -yn@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" - integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= - -zone.js@0.8.20: - version "0.8.20" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.20.tgz#a218c48db09464b19ff6fc8f0d4bb5b1046e185d" - integrity sha512-FXlA37ErSXCMy5RNBcGFgCI/Zivqzr0D19GuvDxhcYIJc7xkFp6c29DKyODJu0Zo+EMyur/WPPgcBh1EHjB9jA== diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..ba172f9 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1962 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime-corejs3@^7.10.2": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz#7bacecd1cb2dd694eacd32a91fcf7021c20770ae" + integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A== + dependencies: + core-js-pure "^3.20.2" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== + dependencies: + regenerator-runtime "^0.13.4" + +"@eslint/eslintrc@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.1.tgz#de0807bfeffc37b964a7d0400e0c348ce5a2543d" + integrity sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@next/env@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.2.5.tgz#d908c57b35262b94db3e431e869b72ac3e1ad3e3" + integrity sha512-vLPLV3cpPGjUPT3PjgRj7e3nio9t6USkuew3JE/jMeon/9Mvp1WyR18v3iwnCuX7eUAm1HmAbJHHLAbcu/EJcw== + +"@next/eslint-plugin-next@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.5.tgz#4f3acccd2ed4f9300fbf9fd480cc8a0b261889a8" + integrity sha512-VBjVbmqEzGiOTBq4+wpeVXt/KgknnGB6ahvC/AxiIGnN93/RCSyXhFRI4uSfftM2Ba3w7ZO7076bfKasZsA0fw== + dependencies: + glob "7.1.7" + +"@next/swc-android-arm-eabi@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.5.tgz#903a5479ab4c2705d9c08d080907475f7bacf94d" + integrity sha512-cPWClKxGhgn2dLWnspW+7psl3MoLQUcNqJqOHk2BhNcou9ARDtC0IjQkKe5qcn9qg7I7U83Gp1yh2aesZfZJMA== + +"@next/swc-android-arm64@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.2.5.tgz#2f9a98ec4166c7860510963b31bda1f57a77c792" + integrity sha512-vMj0efliXmC5b7p+wfcQCX0AfU8IypjkzT64GiKJD9PgiA3IILNiGJr1fw2lyUDHkjeWx/5HMlMEpLnTsQslwg== + +"@next/swc-darwin-arm64@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.5.tgz#31b1c3c659d54be546120c488a1e1bad21c24a1d" + integrity sha512-VOPWbO5EFr6snla/WcxUKtvzGVShfs302TEMOtzYyWni6f9zuOetijJvVh9CCTzInnXAZMtHyNhefijA4HMYLg== + +"@next/swc-darwin-x64@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.5.tgz#2e44dd82b2b7fef88238d1bc4d3bead5884cedfd" + integrity sha512-5o8bTCgAmtYOgauO/Xd27vW52G2/m3i5PX7MUYePquxXAnX73AAtqA3WgPXBRitEB60plSKZgOTkcpqrsh546A== + +"@next/swc-freebsd-x64@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.5.tgz#e24e75d8c2581bfebc75e4f08f6ddbd116ce9dbd" + integrity sha512-yYUbyup1JnznMtEBRkK4LT56N0lfK5qNTzr6/DEyDw5TbFVwnuy2hhLBzwCBkScFVjpFdfiC6SQAX3FrAZzuuw== + +"@next/swc-linux-arm-gnueabihf@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.5.tgz#46d8c514d834d2b5f67086013f0bd5e3081e10b9" + integrity sha512-2ZE2/G921Acks7UopJZVMgKLdm4vN4U0yuzvAMJ6KBavPzqESA2yHJlm85TV/K9gIjKhSk5BVtauIUntFRP8cg== + +"@next/swc-linux-arm64-gnu@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.5.tgz#91f725ac217d3a1f4f9f53b553615ba582fd3d9f" + integrity sha512-/I6+PWVlz2wkTdWqhlSYYJ1pWWgUVva6SgX353oqTh8njNQp1SdFQuWDqk8LnM6ulheVfSsgkDzxrDaAQZnzjQ== + +"@next/swc-linux-arm64-musl@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.5.tgz#e627e8c867920995810250303cd9b8e963598383" + integrity sha512-LPQRelfX6asXyVr59p5sTpx5l+0yh2Vjp/R8Wi4X9pnqcayqT4CUJLiHqCvZuLin3IsFdisJL0rKHMoaZLRfmg== + +"@next/swc-linux-x64-gnu@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.5.tgz#83a5e224fbc4d119ef2e0f29d0d79c40cc43887e" + integrity sha512-0szyAo8jMCClkjNK0hknjhmAngUppoRekW6OAezbEYwHXN/VNtsXbfzgYOqjKWxEx3OoAzrT3jLwAF0HdX2MEw== + +"@next/swc-linux-x64-musl@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.5.tgz#be700d48471baac1ec2e9539396625584a317e95" + integrity sha512-zg/Y6oBar1yVnW6Il1I/08/2ukWtOG6s3acdJdEyIdsCzyQi4RLxbbhkD/EGQyhqBvd3QrC6ZXQEXighQUAZ0g== + +"@next/swc-win32-arm64-msvc@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.5.tgz#a93e958133ad3310373fda33a79aa10af2a0aa97" + integrity sha512-3/90DRNSqeeSRMMEhj4gHHQlLhhKg5SCCoYfE3kBjGpE63EfnblYUqsszGGZ9ekpKL/R4/SGB40iCQr8tR5Jiw== + +"@next/swc-win32-ia32-msvc@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.5.tgz#4f5f7ba0a98ff89a883625d4af0125baed8b2e19" + integrity sha512-hGLc0ZRAwnaPL4ulwpp4D2RxmkHQLuI8CFOEEHdzZpS63/hMVzv81g8jzYA0UXbb9pus/iTc3VRbVbAM03SRrw== + +"@next/swc-win32-x64-msvc@12.2.5": + version "12.2.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.5.tgz#20fed129b04a0d3f632c6d0de135345bb623b1e4" + integrity sha512-7h5/ahY7NeaO2xygqVrSG/Y8Vs4cdjxIjowTZ5W6CKoTKn7tmnuxlUc2h74x06FKmbhAd9agOjr/AOKyxYYm9Q== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@rushstack/eslint-patch@^1.1.3": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz#0c8b74c50f29ee44f423f7416829c0bf8bb5eb27" + integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== + +"@swc/helpers@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.3.tgz#16593dfc248c53b699d4b5026040f88ddb497012" + integrity sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA== + dependencies: + tslib "^2.4.0" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/node@18.7.14": + version "18.7.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.14.tgz#0fe081752a3333392d00586d815485a17c2cf3c9" + integrity sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react-dom@18.0.6": + version "18.0.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" + integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@18.0.18": + version "18.0.18" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.18.tgz#9f16f33d57bc5d9dca848d12c3572110ff9429ac" + integrity sha512-6hI08umYs6NaiHFEEGioXnxJ+oEhY3eRz8VCUaudZmGdtvPviCJB8mgaMxaDWAdPSYd4eFavrPk2QIolwbLYrg== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@typescript-eslint/parser@^5.21.0": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.36.1.tgz#931c22c7bacefd17e29734628cdec8b2acdcf1ce" + integrity sha512-/IsgNGOkBi7CuDfUbwt1eOqUXF9WGVBW9dwEe1pi+L32XrTsZIgmDFIi2RxjzsvB/8i+MIf5JIoTEH8LOZ368A== + dependencies: + "@typescript-eslint/scope-manager" "5.36.1" + "@typescript-eslint/types" "5.36.1" + "@typescript-eslint/typescript-estree" "5.36.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.36.1.tgz#23c49b7ddbcffbe09082e6694c2524950766513f" + integrity sha512-pGC2SH3/tXdu9IH3ItoqciD3f3RRGCh7hb9zPdN2Drsr341zgd6VbhP5OHQO/reUqihNltfPpMpTNihFMarP2w== + dependencies: + "@typescript-eslint/types" "5.36.1" + "@typescript-eslint/visitor-keys" "5.36.1" + +"@typescript-eslint/types@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.36.1.tgz#1cf0e28aed1cb3ee676917966eb23c2f8334ce2c" + integrity sha512-jd93ShpsIk1KgBTx9E+hCSEuLCUFwi9V/urhjOWnOaksGZFbTOxAT47OH2d4NLJnLhkVD+wDbB48BuaycZPLBg== + +"@typescript-eslint/typescript-estree@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.1.tgz#b857f38d6200f7f3f4c65cd0a5afd5ae723f2adb" + integrity sha512-ih7V52zvHdiX6WcPjsOdmADhYMDN15SylWRZrT2OMy80wzKbc79n8wFW0xpWpU0x3VpBz/oDgTm2xwDAnFTl+g== + dependencies: + "@typescript-eslint/types" "5.36.1" + "@typescript-eslint/visitor-keys" "5.36.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.1.tgz#7731175312d65738e501780f923896d200ad1615" + integrity sha512-ojB9aRyRFzVMN3b5joSYni6FAS10BBSCAfKJhjJAV08t/a95aM6tAhz+O1jF+EtgxktuSO3wJysp2R+Def/IWQ== + dependencies: + "@typescript-eslint/types" "5.36.1" + eslint-visitor-keys "^3.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +array-includes@^3.1.4, array-includes@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.2.5: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" + integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +axe-core@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" + integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bootstrap@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.2.0.tgz#838727fb60f1630db370fe57c63cbcf2962bb3d3" + integrity sha512-qlnS9GL6YZE6Wnef46GxGv1UpGGzAwO0aPL1yOjzDIJpeApeMvqV24iL+pjr2kU4dduoBA9fINKWKgMToobx9A== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001332: + version "1.0.30001387" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001387.tgz#90d2b9bdfcc3ab9a5b9addee00a25ef86c9e2e1e" + integrity sha512-fKDH0F1KOJvR+mWSOvhj8lVRr/Q/mc5u5nabU2vi1/sgvlSqEsE8dOq0Hy/BqVbDkCYQPRRHB1WRjW6PGB/7PA== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +"chokidar@>=3.0.0 <4.0.0": + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +core-js-pure@^3.20.2: + version "3.25.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.25.0.tgz#f8d1f176ff29abbfeb610110de891d5ae5a361d4" + integrity sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: + version "1.20.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-next@12.2.5: + version "12.2.5" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.2.5.tgz#76ce83f18cc02f6f42ed407a127f83db54fabd3c" + integrity sha512-SOowilkqPzW6DxKp3a3SYlrfPi5Ajs9MIzp9gVfUDxxH9QFM5ElkR1hX5m/iICJuvCbWgQqFBiA3mCMozluniw== + dependencies: + "@next/eslint-plugin-next" "12.2.5" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.21.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^2.7.1" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.29.4" + eslint-plugin-react-hooks "^4.5.0" + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-typescript@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" + integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== + dependencies: + debug "^4.3.4" + glob "^7.2.0" + is-glob "^4.0.3" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-module-utils@^2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== + dependencies: + "@babel/runtime" "^7.18.9" + aria-query "^4.2.2" + array-includes "^3.1.5" + ast-types-flow "^0.0.7" + axe-core "^4.4.3" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.2" + language-tags "^1.0.5" + minimatch "^3.1.2" + semver "^6.3.0" + +eslint-plugin-react-hooks@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.29.4: + version "7.31.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.1.tgz#d29793ed27743f3ed8a473c347b1bf5a0a8fb9af" + integrity sha512-j4/2xWqt/R7AZzG8CakGHA6Xa/u7iR8Q3xCxY+AUghdT92bnIDOBEefV456OeH0QvBcroVc0eyvrrLSyQGYIfg== + dependencies: + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@8.23.0: + version "8.23.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.0.tgz#a184918d288820179c6041bb3ddcc99ce6eea040" + integrity sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA== + dependencies: + "@eslint/eslintrc" "^1.3.1" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@humanwhocodes/module-importer" "^1.0.1" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +formik@^2.2.9: + version "2.2.9" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" + integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== + dependencies: + deepmerge "^2.1.1" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.21" + lodash-es "^4.17.21" + react-fast-compare "^2.0.1" + tiny-warning "^1.0.2" + tslib "^1.10.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +hamt_plus@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hamt_plus/-/hamt_plus-1.0.2.tgz#e21c252968c7e33b20f6a1b094cd85787a265601" + integrity sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +immutable@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +next@12.2.5: + version "12.2.5" + resolved "https://registry.yarnpkg.com/next/-/next-12.2.5.tgz#14fb5975e8841fad09553b8ef41fe1393602b717" + integrity sha512-tBdjqX5XC/oFs/6gxrZhjmiq90YWizUYU6qOWAfat7zJwrwapJ+BYgX2PmiacunXMaRpeVT4vz5MSPSLgNkrpA== + dependencies: + "@next/env" "12.2.5" + "@swc/helpers" "0.4.3" + caniuse-lite "^1.0.30001332" + postcss "8.4.14" + styled-jsx "5.0.4" + use-sync-external-store "1.2.0" + optionalDependencies: + "@next/swc-android-arm-eabi" "12.2.5" + "@next/swc-android-arm64" "12.2.5" + "@next/swc-darwin-arm64" "12.2.5" + "@next/swc-darwin-x64" "12.2.5" + "@next/swc-freebsd-x64" "12.2.5" + "@next/swc-linux-arm-gnueabihf" "12.2.5" + "@next/swc-linux-arm64-gnu" "12.2.5" + "@next/swc-linux-arm64-musl" "12.2.5" + "@next/swc-linux-x64-gnu" "12.2.5" + "@next/swc-linux-x64-musl" "12.2.5" + "@next/swc-win32-arm64-msvc" "12.2.5" + "@next/swc-win32-ia32-msvc" "12.2.5" + "@next/swc-win32-x64-msvc" "12.2.5" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.0, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2, object.assign@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.hasown@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" + integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.19.5" + +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-fast-compare@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + +react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +recoil@^0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/recoil/-/recoil-0.7.5.tgz#9a33a03350cfd99e08bdd5b73bfc8b8b9ee751b9" + integrity sha512-GVShsj5+M/2GULWBs5WBJGcsNis/d3YvDiaKjYh3mLKXftjtmk9kfaQ8jwjoIXySCwn8/RhgJ4Sshwgzj2UpFA== + dependencies: + hamt_plus "1.0.2" + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.3: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +sass@^1.54.8: + version "1.54.8" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.8.tgz#4adef0dd86ea2b1e4074f551eeda4fc5f812a996" + integrity sha512-ib4JhLRRgbg6QVy6bsv5uJxnJMTS2soVcCp9Y88Extyy13A8vV0G1fAwujOzmNkFQbR3LvedudAMbtuNRPbQww== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +string.prototype.matchall@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.1" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +styled-jsx@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.4.tgz#5b1bd0b9ab44caae3dd1361295559706e044aa53" + integrity sha512-sDFWLbg4zR+UkNzfk5lPilyIgtpddfxXEULxhujorr5jtePTUqiPDc5BC0v1NRqTr/WaFBGQQUoYToGlF4B2KQ== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.10.0, tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +turbo-android-arm64@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-android-arm64/-/turbo-android-arm64-1.4.3.tgz#d531c6935134d8cae9f31f61db47d13bd227bb93" + integrity sha512-ZUvdoEHJkTkOFOO9PKWYrdONDBVqkNsvwEMufTVf07RXgqmbXDPkznzT4hcQm6xXyqWqJdjgSAMdlm+2nNE1Og== + +turbo-darwin-64@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.4.3.tgz#123e214d9070ec6ac81468dc7a1cb02a459fafd7" + integrity sha512-gapoVm5qbu2TJS4lJ6fM3o2eAkLyXSxHihw/4NRAYmwHCH3at1/cIAnRcctB/HLL3ZaB/p3HKb8mnI7k6xNHOw== + +turbo-darwin-arm64@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-1.4.3.tgz#9fa062c3ffa9208d0e2fa0155dcb48a290e7c109" + integrity sha512-XUe6FTsHamEH7FfNslYYO04yecAaguhZuwW4kE9B/BAP8MUYsmVqONauLPyE/YqM6pf2K0xwVe+RlEGf53CWbg== + +turbo-freebsd-64@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-freebsd-64/-/turbo-freebsd-64-1.4.3.tgz#ffb4a939ca0000ec91114d2bbddc491c4835e862" + integrity sha512-1CAjXmDClgMXdWZXreUfAbGBB2WB9TZHfJIdsgnDqt4fIcFGChknzYqc+Fj3tGHAczMpinGjBbWIzFuxOq/ofQ== + +turbo-freebsd-arm64@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-freebsd-arm64/-/turbo-freebsd-arm64-1.4.3.tgz#0bab3e2ccfac1ecc9ed9a30b0ab80f379fe3a788" + integrity sha512-j5C7j/vwabPKpr5d6YlLgHGHBZCOcXj3HdkBshDHTQ0wghH0NuCUUaesYxI3wva/4/Ec0dhIrb20Laa/HMxXLA== + +turbo-linux-32@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-linux-32/-/turbo-linux-32-1.4.3.tgz#96deb5ebedfe6b97fd8ecc0fa40ff1c891c4c04f" + integrity sha512-vnc+StXIoQEnxIU43j7rEz/J+v+RV4dbUdUolBq0k9gkUV8KMCcqPkIa753K47E2KLNGKXMaYDI6AHQX1GAQZg== + +turbo-linux-64@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-1.4.3.tgz#ed0152e724c78dea090b2d60d29258110bdfb14a" + integrity sha512-KAUeIa8Ejt6BLrBGbVurlrjDxqh62tu75D4cqKqKfzWspcbEtmdqlV6qthXfm8SlzGSNuQXX0+qXEWds2FIZXg== + +turbo-linux-arm64@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-1.4.3.tgz#74fac47575e6b5af5830d26a56493859d09e4c7c" + integrity sha512-rzB7w+RHCQkKr8aDxxozv/IzdN976CYyBiRocSf9QGU73uyAg8pCo3i0MiENSRjDC+tUbdbu2lEUwGXf9ziB9Q== + +turbo-linux-arm@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-linux-arm/-/turbo-linux-arm-1.4.3.tgz#ac42b3c5918fe06270cb8dfbe31442a48cc38fc3" + integrity sha512-zZNoHUK5ioFyxAngh8tHe763Dzb22ne3LJkaZn0ExkFHJtWClWv536lPcDuQPpIH9W9iz5OwPKtN32DNpNwk8A== + +turbo-linux-mips64le@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-linux-mips64le/-/turbo-linux-mips64le-1.4.3.tgz#d796261795e4fc29935cbffdadfbc11d83cbe616" + integrity sha512-Ztr1BM5NiUsHWjB7zpkP2RpRDA/fjbLaCbkyfyGlLmVkrSkh05NFBD03IWs2LSLy/wb6vRpL3MQ4FKcb97Tn8w== + +turbo-linux-ppc64le@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-linux-ppc64le/-/turbo-linux-ppc64le-1.4.3.tgz#b7d043efa27290e074b7aba45bb298fc86bd8cfe" + integrity sha512-tJaFJWxwfy/iLd69VHZj6JcXy9hO8LQ+ZUOna/p/wiy5WrFVgEYlD+4gfECfRZ+52EIelMgXl97vACaN1WMhLw== + +turbo-windows-32@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-windows-32/-/turbo-windows-32-1.4.3.tgz#3dac4678f1d74ccf0ac187e738d30a557932fbad" + integrity sha512-w9LyYd+DW3PYFXu9vQiie5lfdqmVIKLV0h181C49hempkIXfgQAosXfaugYWDwBc0GEBoBIQB0vGQKE7gt5nzA== + +turbo-windows-64@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-1.4.3.tgz#b493ab62db70c4c147cf0dc56dc812ea2e15cf3c" + integrity sha512-qPCqemxxOrXyqqig3fVQozRkOwo5oJSsQ3FTZE5YlNu2NwwWvY1mC0X4WTZIDsbj4oHqr0riqC7RGKbjQm1IIQ== + +turbo-windows-arm64@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-1.4.3.tgz#be4b38994cb3f1ceb36940ff6d6b227fa2ba53bf" + integrity sha512-djnOOBjw33AnUx2SR6TMOpDr3nKLnVD+HcZvnQz70HyE331AKWjBoEE4rtUOteLAfViWAp3afbiljFSOnbU00Q== + +turbo@^1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/turbo/-/turbo-1.4.3.tgz#7221972f47a28bfcb53609e97db9810d2c3a265b" + integrity sha512-g08eD2HdO/XW5xGHnXr0cXGiWnrgFBI6pN/3u0EOTeerKAsWIZU0ZrpSnl3whRtImeBB/gQu7Eu1waM2VOxzgw== + optionalDependencies: + turbo-android-arm64 "1.4.3" + turbo-darwin-64 "1.4.3" + turbo-darwin-arm64 "1.4.3" + turbo-freebsd-64 "1.4.3" + turbo-freebsd-arm64 "1.4.3" + turbo-linux-32 "1.4.3" + turbo-linux-64 "1.4.3" + turbo-linux-arm "1.4.3" + turbo-linux-arm64 "1.4.3" + turbo-linux-mips64le "1.4.3" + turbo-linux-ppc64le "1.4.3" + turbo-windows-32 "1.4.3" + turbo-windows-64 "1.4.3" + turbo-windows-arm64 "1.4.3" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typescript@4.8.2: + version "4.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" + integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From ce3f50f8a65c24e1f27fe47e0e859f254c901624 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Fri, 30 Sep 2022 15:39:50 -0300 Subject: [PATCH 03/28] Se agrega el package.json para ejeutar el profile de dev en el core --- packages/openscore-core-quarkus/package.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/openscore-core-quarkus/package.json diff --git a/packages/openscore-core-quarkus/package.json b/packages/openscore-core-quarkus/package.json new file mode 100644 index 0000000..156d65e --- /dev/null +++ b/packages/openscore-core-quarkus/package.json @@ -0,0 +1,13 @@ +{ + "name": "@openscore/core", + "version": "1.0.0", + "main": "index.js", + "repository": "", + "author": "Adriel Paredes , Leandro Beretta Date: Sun, 2 Oct 2022 15:25:53 -0300 Subject: [PATCH 04/28] =?UTF-8?q?Se=20agrega=20el=20login=20y=20la=20redir?= =?UTF-8?q?ecci=C3=B3n=20al=20home,=20falta=20guardar=20el=20token=20y=20m?= =?UTF-8?q?ostrar=20los=20errores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/services/api/PartidosService.java | 27 ++++--- .../core/services/api/PronosticosService.java | 12 +-- .../openscore-nextjs/model/ApiResponse.ts | 5 ++ .../openscore-nextjs/model/CrearEquipo.ts | 6 ++ packages/openscore-nextjs/model/CrearFase.ts | 2 + .../openscore-nextjs/model/CrearNoticia.ts | 6 ++ packages/openscore-nextjs/model/CrearPais.ts | 2 + .../openscore-nextjs/model/CrearPartido.ts | 9 +++ .../openscore-nextjs/model/CrearUsuario.ts | 11 +++ .../model/DefinicionCompeticion.ts | 8 ++ packages/openscore-nextjs/model/Entity.ts | 3 + packages/openscore-nextjs/model/Equipo.ts | 8 ++ packages/openscore-nextjs/model/Fase.ts | 4 + packages/openscore-nextjs/model/Grupo.ts | 4 + .../openscore-nextjs/model/LoginUsuario.ts | 5 ++ packages/openscore-nextjs/model/Noticia.ts | 9 +++ packages/openscore-nextjs/model/Page.ts | 4 + packages/openscore-nextjs/model/Pais.ts | 4 + packages/openscore-nextjs/model/Partido.ts | 19 +++++ .../openscore-nextjs/model/PreguntaSecreta.ts | 4 + packages/openscore-nextjs/model/Pronostico.ts | 5 ++ packages/openscore-nextjs/model/Ranking.ts | 7 ++ packages/openscore-nextjs/model/Resultado.ts | 4 + packages/openscore-nextjs/model/Token.ts | 4 + .../openscore-nextjs/model/UpdateUsuario.ts | 5 ++ packages/openscore-nextjs/model/Usuario.ts | 8 ++ .../openscore-nextjs/model/UsuarioCompleto.ts | 12 +++ packages/openscore-nextjs/package.json | 3 + .../openscore-nextjs/pages/forecast/index.tsx | 7 ++ packages/openscore-nextjs/pages/login.tsx | 20 +++-- .../openscore-nextjs/services/AuthGuard.ts | 33 +++++++++ .../openscore-nextjs/services/AuthService.ts | 49 +++++++++++++ .../DefinicionCompeticionesService.ts | 12 +++ .../services/EquiposService.ts | 9 +++ .../openscore-nextjs/services/FaseService.ts | 9 +++ .../services/GruposService.ts | 9 +++ .../openscore-nextjs/services/InfoService.ts | 13 ++++ .../services/NoticiasService.ts | 29 ++++++++ .../services/PaisesService.ts | 9 +++ .../services/PartidosService.ts | 29 ++++++++ .../services/PreguntaSecretaService.ts | 12 +++ .../services/PronosticoService.ts | 37 ++++++++++ .../services/RankingService.ts | 12 +++ packages/openscore-nextjs/services/Rest.ts | 13 ++++ packages/openscore-nextjs/services/Service.ts | 28 +++++++ .../services/UsuarioService.ts | 73 +++++++++++++++++++ yarn.lock | 63 ++++++++++++++++ 47 files changed, 645 insertions(+), 21 deletions(-) create mode 100644 packages/openscore-nextjs/model/ApiResponse.ts create mode 100644 packages/openscore-nextjs/model/CrearEquipo.ts create mode 100644 packages/openscore-nextjs/model/CrearFase.ts create mode 100644 packages/openscore-nextjs/model/CrearNoticia.ts create mode 100644 packages/openscore-nextjs/model/CrearPais.ts create mode 100644 packages/openscore-nextjs/model/CrearPartido.ts create mode 100644 packages/openscore-nextjs/model/CrearUsuario.ts create mode 100644 packages/openscore-nextjs/model/DefinicionCompeticion.ts create mode 100644 packages/openscore-nextjs/model/Entity.ts create mode 100644 packages/openscore-nextjs/model/Equipo.ts create mode 100644 packages/openscore-nextjs/model/Fase.ts create mode 100644 packages/openscore-nextjs/model/Grupo.ts create mode 100644 packages/openscore-nextjs/model/LoginUsuario.ts create mode 100644 packages/openscore-nextjs/model/Noticia.ts create mode 100644 packages/openscore-nextjs/model/Page.ts create mode 100644 packages/openscore-nextjs/model/Pais.ts create mode 100644 packages/openscore-nextjs/model/Partido.ts create mode 100644 packages/openscore-nextjs/model/PreguntaSecreta.ts create mode 100644 packages/openscore-nextjs/model/Pronostico.ts create mode 100644 packages/openscore-nextjs/model/Ranking.ts create mode 100644 packages/openscore-nextjs/model/Resultado.ts create mode 100644 packages/openscore-nextjs/model/Token.ts create mode 100644 packages/openscore-nextjs/model/UpdateUsuario.ts create mode 100644 packages/openscore-nextjs/model/Usuario.ts create mode 100644 packages/openscore-nextjs/model/UsuarioCompleto.ts create mode 100644 packages/openscore-nextjs/services/AuthGuard.ts create mode 100644 packages/openscore-nextjs/services/AuthService.ts create mode 100644 packages/openscore-nextjs/services/DefinicionCompeticionesService.ts create mode 100644 packages/openscore-nextjs/services/EquiposService.ts create mode 100644 packages/openscore-nextjs/services/FaseService.ts create mode 100644 packages/openscore-nextjs/services/GruposService.ts create mode 100644 packages/openscore-nextjs/services/InfoService.ts create mode 100644 packages/openscore-nextjs/services/NoticiasService.ts create mode 100644 packages/openscore-nextjs/services/PaisesService.ts create mode 100644 packages/openscore-nextjs/services/PartidosService.ts create mode 100644 packages/openscore-nextjs/services/PreguntaSecretaService.ts create mode 100644 packages/openscore-nextjs/services/PronosticoService.ts create mode 100644 packages/openscore-nextjs/services/RankingService.ts create mode 100644 packages/openscore-nextjs/services/Rest.ts create mode 100644 packages/openscore-nextjs/services/Service.ts create mode 100644 packages/openscore-nextjs/services/UsuarioService.ts diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java index 456ef2c..f73cdc2 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java @@ -1,14 +1,22 @@ package io.semantic.openscore.core.services.api; +import java.util.List; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + import io.semantic.openscore.core.api.ApiResponse; import io.semantic.openscore.core.api.partidos.CrearOUpdatePartidoDTO; import io.semantic.openscore.core.api.partidos.PartidoDTO; import io.semantic.openscore.core.api.partidos.ResultadoDTO; -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import java.util.List; - @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Path("partidos") @@ -17,11 +25,11 @@ public interface PartidosService { @GET @Path("/") ApiResponse> getAll(@QueryParam("page") int page, - @QueryParam("pageSize") int pageSize, - @QueryParam("grupo") String grupo, - @QueryParam("fase") String fase, - @QueryParam("fecha") long fecha, - @QueryParam("equipo") String equipo); + @QueryParam("size") int pageSize, + @QueryParam("grupo") String grupo, + @QueryParam("fase") String fase, + @QueryParam("fecha") long fecha, + @QueryParam("equipo") String equipo); @GET @Path("/{id}") @@ -47,4 +55,3 @@ ApiResponse> getAll(@QueryParam("page") int page, @Path("{id}/resultado") ApiResponse setResultado(@PathParam("id") long id, ResultadoDTO resultado); } - diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java index 814c4e4..9ec71f2 100644 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java +++ b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java @@ -20,11 +20,11 @@ public interface PronosticosService { @GET @Secure ApiResponse> getAll(@QueryParam("page") int page, - @QueryParam("pageSize") int pageSize, - @QueryParam("grupo") String grupo, - @QueryParam("fase") String fase, - @QueryParam("dia") long dia, - @QueryParam("fecha") int fecha); + @QueryParam("size") int pageSize, + @QueryParam("grupo") String grupo, + @QueryParam("fase") String fase, + @QueryParam("dia") long dia, + @QueryParam("fecha") int fecha); @Path("/{id}") @GET @@ -45,7 +45,7 @@ ApiResponse> getAll(@QueryParam("page") int page, @POST @Secure ApiResponse update(@PathParam("id") long id, - CrearPronosticoDTO entity); + CrearPronosticoDTO entity); @Path("/{id}/local") @POST diff --git a/packages/openscore-nextjs/model/ApiResponse.ts b/packages/openscore-nextjs/model/ApiResponse.ts new file mode 100644 index 0000000..8bd23cf --- /dev/null +++ b/packages/openscore-nextjs/model/ApiResponse.ts @@ -0,0 +1,5 @@ +export interface ApiResponse { + error: string; + description: string; + data: T; +} diff --git a/packages/openscore-nextjs/model/CrearEquipo.ts b/packages/openscore-nextjs/model/CrearEquipo.ts new file mode 100644 index 0000000..a0a6fc6 --- /dev/null +++ b/packages/openscore-nextjs/model/CrearEquipo.ts @@ -0,0 +1,6 @@ +export interface CrearEquipo { + codigo: string; + nombre: string; + codigoPais: string; + logo: string; +} diff --git a/packages/openscore-nextjs/model/CrearFase.ts b/packages/openscore-nextjs/model/CrearFase.ts new file mode 100644 index 0000000..c49505e --- /dev/null +++ b/packages/openscore-nextjs/model/CrearFase.ts @@ -0,0 +1,2 @@ +export interface CrearFase { +} diff --git a/packages/openscore-nextjs/model/CrearNoticia.ts b/packages/openscore-nextjs/model/CrearNoticia.ts new file mode 100644 index 0000000..6145aff --- /dev/null +++ b/packages/openscore-nextjs/model/CrearNoticia.ts @@ -0,0 +1,6 @@ +export interface CrearNoticia { + id: number; + titulo: string; + contenido: string; + autor: string; +} diff --git a/packages/openscore-nextjs/model/CrearPais.ts b/packages/openscore-nextjs/model/CrearPais.ts new file mode 100644 index 0000000..4c12464 --- /dev/null +++ b/packages/openscore-nextjs/model/CrearPais.ts @@ -0,0 +1,2 @@ +export interface CrearPais { +} diff --git a/packages/openscore-nextjs/model/CrearPartido.ts b/packages/openscore-nextjs/model/CrearPartido.ts new file mode 100644 index 0000000..7df54e4 --- /dev/null +++ b/packages/openscore-nextjs/model/CrearPartido.ts @@ -0,0 +1,9 @@ +export interface CrearPartido { + local: string; + visitante: string; + dia: Date; + fecha: number; + lugar: string; + grupo: string; + fase: string; +} diff --git a/packages/openscore-nextjs/model/CrearUsuario.ts b/packages/openscore-nextjs/model/CrearUsuario.ts new file mode 100644 index 0000000..4ff604f --- /dev/null +++ b/packages/openscore-nextjs/model/CrearUsuario.ts @@ -0,0 +1,11 @@ +export interface CrearUsuario { + + nombre: string; + apellido: string; + email: string; + confirmacionEmail: string; + password: string; + confirmacionPassword: string; + pais: string; + +} diff --git a/packages/openscore-nextjs/model/DefinicionCompeticion.ts b/packages/openscore-nextjs/model/DefinicionCompeticion.ts new file mode 100644 index 0000000..c679e67 --- /dev/null +++ b/packages/openscore-nextjs/model/DefinicionCompeticion.ts @@ -0,0 +1,8 @@ +export interface DefinicionCompeticion { + + id: number; + nombre: string; + descripcion: string; + logo: string; + deleted: boolean; +} diff --git a/packages/openscore-nextjs/model/Entity.ts b/packages/openscore-nextjs/model/Entity.ts new file mode 100644 index 0000000..7109acc --- /dev/null +++ b/packages/openscore-nextjs/model/Entity.ts @@ -0,0 +1,3 @@ +export default interface Entity { + id: number; +} diff --git a/packages/openscore-nextjs/model/Equipo.ts b/packages/openscore-nextjs/model/Equipo.ts new file mode 100644 index 0000000..31ec266 --- /dev/null +++ b/packages/openscore-nextjs/model/Equipo.ts @@ -0,0 +1,8 @@ +export interface Equipo { + id: number; + codigo: string; + nombre: string; + deleted: boolean; + pais: string; + logo: string; +} diff --git a/packages/openscore-nextjs/model/Fase.ts b/packages/openscore-nextjs/model/Fase.ts new file mode 100644 index 0000000..e8cff7c --- /dev/null +++ b/packages/openscore-nextjs/model/Fase.ts @@ -0,0 +1,4 @@ +export interface Fase { + codigo: string; + nombre: string; +} diff --git a/packages/openscore-nextjs/model/Grupo.ts b/packages/openscore-nextjs/model/Grupo.ts new file mode 100644 index 0000000..97a4c02 --- /dev/null +++ b/packages/openscore-nextjs/model/Grupo.ts @@ -0,0 +1,4 @@ +export interface Grupo { + codigo: string; + nombre: string; +} diff --git a/packages/openscore-nextjs/model/LoginUsuario.ts b/packages/openscore-nextjs/model/LoginUsuario.ts new file mode 100644 index 0000000..5af1e93 --- /dev/null +++ b/packages/openscore-nextjs/model/LoginUsuario.ts @@ -0,0 +1,5 @@ +export interface LoginUsuario { + + email: string; + password: string; +} diff --git a/packages/openscore-nextjs/model/Noticia.ts b/packages/openscore-nextjs/model/Noticia.ts new file mode 100644 index 0000000..aac780b --- /dev/null +++ b/packages/openscore-nextjs/model/Noticia.ts @@ -0,0 +1,9 @@ +export interface Noticia { + id: number; + titulo: string; + contenido: string; + autor: string; + status: string; + creationDate: Date; + modificationDate: Date; +} diff --git a/packages/openscore-nextjs/model/Page.ts b/packages/openscore-nextjs/model/Page.ts new file mode 100644 index 0000000..ed40a94 --- /dev/null +++ b/packages/openscore-nextjs/model/Page.ts @@ -0,0 +1,4 @@ +export default interface Page { + page: number; + size: number; +} diff --git a/packages/openscore-nextjs/model/Pais.ts b/packages/openscore-nextjs/model/Pais.ts new file mode 100644 index 0000000..c6baff3 --- /dev/null +++ b/packages/openscore-nextjs/model/Pais.ts @@ -0,0 +1,4 @@ +export interface Pais { + nombre: string; + codigo: string; +} diff --git a/packages/openscore-nextjs/model/Partido.ts b/packages/openscore-nextjs/model/Partido.ts new file mode 100644 index 0000000..4d0660f --- /dev/null +++ b/packages/openscore-nextjs/model/Partido.ts @@ -0,0 +1,19 @@ +import { Equipo } from "./Equipo"; +import { Fase } from "./Fase"; +import { Grupo } from "./Grupo"; +import { Pronostico } from "./Pronostico"; +import { Resultado } from "./Resultado"; + +export interface Partido { + id: number; + local: Equipo; + visitante: Equipo; + dia: Date; + fecha: number; + lugar: string; + resultado: Resultado; + grupo: Grupo; + fase: Fase; + status: string; + pronostico: Pronostico; +} diff --git a/packages/openscore-nextjs/model/PreguntaSecreta.ts b/packages/openscore-nextjs/model/PreguntaSecreta.ts new file mode 100644 index 0000000..fa6e52d --- /dev/null +++ b/packages/openscore-nextjs/model/PreguntaSecreta.ts @@ -0,0 +1,4 @@ +export interface PreguntaSecreta { + codigo: string; + pregunta: string; +} diff --git a/packages/openscore-nextjs/model/Pronostico.ts b/packages/openscore-nextjs/model/Pronostico.ts new file mode 100644 index 0000000..c81a778 --- /dev/null +++ b/packages/openscore-nextjs/model/Pronostico.ts @@ -0,0 +1,5 @@ +export interface Pronostico { + local: boolean; + empate: boolean; + visitante: boolean; +} diff --git a/packages/openscore-nextjs/model/Ranking.ts b/packages/openscore-nextjs/model/Ranking.ts new file mode 100644 index 0000000..a33afdf --- /dev/null +++ b/packages/openscore-nextjs/model/Ranking.ts @@ -0,0 +1,7 @@ +export interface Ranking { + ranking: number; + puntos: number; + nombre: string; + pais: string; + usuario: number; +} diff --git a/packages/openscore-nextjs/model/Resultado.ts b/packages/openscore-nextjs/model/Resultado.ts new file mode 100644 index 0000000..5ab5632 --- /dev/null +++ b/packages/openscore-nextjs/model/Resultado.ts @@ -0,0 +1,4 @@ +export interface Resultado { + local: number; + visitante: number; +} diff --git a/packages/openscore-nextjs/model/Token.ts b/packages/openscore-nextjs/model/Token.ts new file mode 100644 index 0000000..19d1920 --- /dev/null +++ b/packages/openscore-nextjs/model/Token.ts @@ -0,0 +1,4 @@ +export interface Token { + + token: string; +} diff --git a/packages/openscore-nextjs/model/UpdateUsuario.ts b/packages/openscore-nextjs/model/UpdateUsuario.ts new file mode 100644 index 0000000..57e1ca2 --- /dev/null +++ b/packages/openscore-nextjs/model/UpdateUsuario.ts @@ -0,0 +1,5 @@ +export interface UpdateUsuario { + nombre: string; + apellido: string; + pais: string; +} diff --git a/packages/openscore-nextjs/model/Usuario.ts b/packages/openscore-nextjs/model/Usuario.ts new file mode 100644 index 0000000..688d4d4 --- /dev/null +++ b/packages/openscore-nextjs/model/Usuario.ts @@ -0,0 +1,8 @@ +import { Pais } from "./Pais"; +export interface Usuario { + id: number; + nombre: string; + apellido: string; + email: string; + pais: Pais; +} diff --git a/packages/openscore-nextjs/model/UsuarioCompleto.ts b/packages/openscore-nextjs/model/UsuarioCompleto.ts new file mode 100644 index 0000000..dedea3b --- /dev/null +++ b/packages/openscore-nextjs/model/UsuarioCompleto.ts @@ -0,0 +1,12 @@ +import { Pais } from "./Pais"; +export interface UsuarioCompleto { + id: number; + nombre: string; + apellido: string; + pais: Pais; + email: string; + deleted: boolean; + creationDate: Date; + deletionDate: Date; + modificationDate: Date; +} diff --git a/packages/openscore-nextjs/package.json b/packages/openscore-nextjs/package.json index c263609..ef50e53 100644 --- a/packages/openscore-nextjs/package.json +++ b/packages/openscore-nextjs/package.json @@ -9,8 +9,11 @@ "lint": "next lint" }, "dependencies": { + "@types/jwt-decode": "^3.1.0", + "axios": "^0.27.2", "bootstrap": "^5.2.0", "formik": "^2.2.9", + "jwt-decode": "^3.1.2", "next": "12.2.5", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx index d56f33f..0893f18 100644 --- a/packages/openscore-nextjs/pages/forecast/index.tsx +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -1,8 +1,10 @@ import Link from "next/link"; import { useRouter } from "next/router"; +import { useEffect } from "react"; import { layout } from "../../components/layout/MainLayout"; import LoadingScreen from "../../components/LoadingScreen"; import MatchCard from "../../components/MatchCard"; +import { PronosticoService } from "../../services/PronosticoService"; import { NextPageWithLayout } from "../_app"; const filters = [ @@ -23,6 +25,11 @@ const Forecasts: NextPageWithLayout = () => { const { filter } = router.query; const path = router.asPath; + useEffect(() => { + const pronostico = new PronosticoService(); + pronostico.getAll(1, 1).then((res) => console.log(res)); + }); + return (

                Forecast

                diff --git a/packages/openscore-nextjs/pages/login.tsx b/packages/openscore-nextjs/pages/login.tsx index b9abba4..4d87341 100644 --- a/packages/openscore-nextjs/pages/login.tsx +++ b/packages/openscore-nextjs/pages/login.tsx @@ -1,10 +1,12 @@ import { Formik } from "formik"; import type { NextPage } from "next"; import Image from "next/image"; +import { useRouter } from "next/router"; import messi from "../images/messi.webp"; -import logo from "../images/logo-black.png"; +import { UsuarioService } from "../services/UsuarioService"; const Login: NextPage = () => { + const router = useRouter(); return (
                @@ -27,10 +29,18 @@ const Login: NextPage = () => { return errors; }} onSubmit={(values, { setSubmitting }) => { - setTimeout(() => { - alert(JSON.stringify(values, null, 2)); - setSubmitting(false); - }, 400); + setSubmitting(true); + + new UsuarioService() + .login(values) + .then((res) => { + router.push("/"); + setSubmitting(false); + }) + .catch((err) => { + alert(err); + setSubmitting(false); + }); }} > {({ diff --git a/packages/openscore-nextjs/services/AuthGuard.ts b/packages/openscore-nextjs/services/AuthGuard.ts new file mode 100644 index 0000000..09b4018 --- /dev/null +++ b/packages/openscore-nextjs/services/AuthGuard.ts @@ -0,0 +1,33 @@ +import { AuthService } from "./AuthService"; + +export class AuthGuard implements CanActivateChild, CanActivate { + constructor( + private authService: AuthService, + private toastr: ToastrService, + public router: Router + ) {} + + canActivateChild( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): boolean { + return this.activation(); + } + + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): boolean { + return this.activation(); + } + + activation() { + if (!this.authService.isLoggedIn()) { + this.toastr.info("You are not logged in, please login first to play!"); + this.router.navigate(["/pages/login"]); + return false; + } else { + return true; + } + } +} diff --git a/packages/openscore-nextjs/services/AuthService.ts b/packages/openscore-nextjs/services/AuthService.ts new file mode 100644 index 0000000..94d8d8a --- /dev/null +++ b/packages/openscore-nextjs/services/AuthService.ts @@ -0,0 +1,49 @@ +import jwtDecode, { JwtPayload } from "jwt-decode"; + +export class AuthService { + token: ""; + + private TOKEN = "openscore-token"; + + constructor() { + // Que esto quede vacio asi se puede crear con un new en caso extremo + this.token = this.getLocalStorageToken(); + } + + isLoggedIn() { + const t = this.getLocalStorageToken(); + return t !== undefined && t !== null && t.length > 0; + } + + public getToken() { + return this.token.asObservable(); + } + + public getLocalStorageToken() { + return localStorage.getItem(this.TOKEN); + } + + public setToken(token: string) { + localStorage.setItem(this.TOKEN, token); + this.token.next(token); + } + + public logout() { + return localStorage.removeItem(this.TOKEN); + } + + public isAdmin() { + return this.containsRole("ADMIN"); + } + + public containsRole(role: string) { + try { + const decoded = jwtDecode( + this.getLocalStorageToken() || "" + ); + return decoded.roles.includes(role.toUpperCase()); + } catch (e) { + return false; + } + } +} diff --git a/packages/openscore-nextjs/services/DefinicionCompeticionesService.ts b/packages/openscore-nextjs/services/DefinicionCompeticionesService.ts new file mode 100644 index 0000000..99640af --- /dev/null +++ b/packages/openscore-nextjs/services/DefinicionCompeticionesService.ts @@ -0,0 +1,12 @@ +import { DefinicionCompeticion } from "./../model/DefinicionCompeticion"; +import Service from "./Service"; + +export class DefinicionCompeticionesService extends Service< + DefinicionCompeticion, + DefinicionCompeticion, + DefinicionCompeticion +> { + constructor() { + super("competciones"); + } +} diff --git a/packages/openscore-nextjs/services/EquiposService.ts b/packages/openscore-nextjs/services/EquiposService.ts new file mode 100644 index 0000000..cb57180 --- /dev/null +++ b/packages/openscore-nextjs/services/EquiposService.ts @@ -0,0 +1,9 @@ +import { CrearEquipo } from "../model/CrearEquipo"; +import { Equipo } from "./../model/Equipo"; +import Service from "./Service"; + +export class EquiposService extends Service { + constructor() { + super("equipos"); + } +} diff --git a/packages/openscore-nextjs/services/FaseService.ts b/packages/openscore-nextjs/services/FaseService.ts new file mode 100644 index 0000000..c627964 --- /dev/null +++ b/packages/openscore-nextjs/services/FaseService.ts @@ -0,0 +1,9 @@ +import { Fase } from "../model/Fase"; +import { CrearFase } from "./../model/CrearFase"; +import Service from "./Service"; + +export class FaseService extends Service { + constructor() { + super("fases"); + } +} diff --git a/packages/openscore-nextjs/services/GruposService.ts b/packages/openscore-nextjs/services/GruposService.ts new file mode 100644 index 0000000..b8fbf5f --- /dev/null +++ b/packages/openscore-nextjs/services/GruposService.ts @@ -0,0 +1,9 @@ +import { CrearPartido } from "./../model/CrearPartido"; +import { Grupo } from "./../model/Grupo"; +import Service from "./Service"; + +export class GruposService extends Service { + constructor() { + super("grupos"); + } +} diff --git a/packages/openscore-nextjs/services/InfoService.ts b/packages/openscore-nextjs/services/InfoService.ts new file mode 100644 index 0000000..8f9335b --- /dev/null +++ b/packages/openscore-nextjs/services/InfoService.ts @@ -0,0 +1,13 @@ +import { ApiResponse } from "./../model/ApiResponse"; +import rest from "./Rest"; +import Service from "./Service"; + +export class InfoService extends Service { + constructor() { + super("info"); + } + + public securePing() { + return rest.get>(`${this.serviceUrl}/ping/secure`); + } +} diff --git a/packages/openscore-nextjs/services/NoticiasService.ts b/packages/openscore-nextjs/services/NoticiasService.ts new file mode 100644 index 0000000..9422d5f --- /dev/null +++ b/packages/openscore-nextjs/services/NoticiasService.ts @@ -0,0 +1,29 @@ +import { ApiResponse } from "../model/ApiResponse"; +import { CrearNoticia } from "../model/CrearNoticia"; +import { Noticia } from "../model/Noticia"; +import rest from "./Rest"; +import Service from "./Service"; + +export class NoticiasService extends Service< + Noticia, + CrearNoticia, + CrearNoticia +> { + constructor() { + super("posts"); + } + + publicar(id: number) { + return rest.post>( + `${this.serviceUrl}/${id}/publicar`, + {} + ); + } + + retirar(id: number) { + return rest.post>( + `${this.serviceUrl}/${id}/retirar`, + {} + ); + } +} diff --git a/packages/openscore-nextjs/services/PaisesService.ts b/packages/openscore-nextjs/services/PaisesService.ts new file mode 100644 index 0000000..b327414 --- /dev/null +++ b/packages/openscore-nextjs/services/PaisesService.ts @@ -0,0 +1,9 @@ +import { CrearPais } from "../model/CrearPais"; +import { Pais } from "../model/Pais"; +import Service from "./Service"; + +export class PaisesService extends Service { + constructor() { + super("paises"); + } +} diff --git a/packages/openscore-nextjs/services/PartidosService.ts b/packages/openscore-nextjs/services/PartidosService.ts new file mode 100644 index 0000000..1a9faa0 --- /dev/null +++ b/packages/openscore-nextjs/services/PartidosService.ts @@ -0,0 +1,29 @@ +import { ApiResponse } from "../model/ApiResponse"; +import { CrearPartido } from "../model/CrearPartido"; +import { Partido } from "../model/Partido"; +import rest from "./Rest"; +import Service from "./Service"; + +export class PartidosService extends Service< + Partido, + CrearPartido, + CrearPartido +> { + constructor() { + super("partidos"); + } + + getFechas() { + return rest.get>(`${this.serviceUrl}/fechas`); + } + + resultado(partidoId: number, local: number, visitante: number) { + return rest.post>( + `${this.serviceUrl}/${partidoId}/resultado`, + { + local: local, + visitante: visitante, + } + ); + } +} diff --git a/packages/openscore-nextjs/services/PreguntaSecretaService.ts b/packages/openscore-nextjs/services/PreguntaSecretaService.ts new file mode 100644 index 0000000..9a111c1 --- /dev/null +++ b/packages/openscore-nextjs/services/PreguntaSecretaService.ts @@ -0,0 +1,12 @@ +import { PreguntaSecreta } from "../model/PreguntaSecreta"; +import Service from "./Service"; + +export class PreguntaSecretaService extends Service< + PreguntaSecreta, + PreguntaSecreta, + PreguntaSecreta +> { + constructor() { + super("preguntas"); + } +} diff --git a/packages/openscore-nextjs/services/PronosticoService.ts b/packages/openscore-nextjs/services/PronosticoService.ts new file mode 100644 index 0000000..943600e --- /dev/null +++ b/packages/openscore-nextjs/services/PronosticoService.ts @@ -0,0 +1,37 @@ +import { ApiResponse } from "../model/ApiResponse"; +import { CrearPartido } from "../model/CrearPartido"; +import { Partido } from "../model/Partido"; +import { Pronostico } from "../model/Pronostico"; +import rest from "./Rest"; +import Service from "./Service"; + +export class PronosticoService extends Service< + Partido, + CrearPartido, + CrearPartido +> { + constructor() { + super("pronosticos"); + } + + local(id: number) { + return rest.post>( + `${this.serviceUrl}/${id}/local`, + {} + ); + } + + empate(id: number) { + return rest.post>( + `${this.serviceUrl}/${id}/empate`, + {} + ); + } + + visitante(id: number) { + return rest.post>( + `${this.serviceUrl}/${id}/visitante`, + {} + ); + } +} diff --git a/packages/openscore-nextjs/services/RankingService.ts b/packages/openscore-nextjs/services/RankingService.ts new file mode 100644 index 0000000..8c57c32 --- /dev/null +++ b/packages/openscore-nextjs/services/RankingService.ts @@ -0,0 +1,12 @@ +import { ApiResponse } from "../model/ApiResponse"; +import { Ranking } from "../model/Ranking"; +import rest from "./Rest"; + +export class RankingService { + public getAll(pais: string, size: number) { + const params = { pais: pais, size: size.toString() }; + return rest.get>("ranking", { + params: params, + }); + } +} diff --git a/packages/openscore-nextjs/services/Rest.ts b/packages/openscore-nextjs/services/Rest.ts new file mode 100644 index 0000000..c403ac1 --- /dev/null +++ b/packages/openscore-nextjs/services/Rest.ts @@ -0,0 +1,13 @@ +import axios from "axios"; + +// Set config defaults when creating the instance +const rest = axios.create({ + baseURL: "http://localhost:8080/api/rest", +}); + +rest.defaults.headers.common["Content-Type"] = "application/json"; + +// Alter defaults after instance has been created +// instance.defaults.headers.common["Authorization"] = AUTH_TOKEN; + +export default rest; diff --git a/packages/openscore-nextjs/services/Service.ts b/packages/openscore-nextjs/services/Service.ts new file mode 100644 index 0000000..66c482c --- /dev/null +++ b/packages/openscore-nextjs/services/Service.ts @@ -0,0 +1,28 @@ +import { ApiResponse } from "../model/ApiResponse"; +import rest from "./Rest"; + +export default abstract class Service { + constructor(protected serviceUrl: string) {} + + public getAll(page: number, pageSize: number, parameters?: any) { + return rest.get>(this.serviceUrl, { + params: parameters, + }); + } + + public get(id: number) { + return rest.get>(`${this.serviceUrl}/${id}`); + } + + public delete(id: number) { + return rest.delete>(`${this.serviceUrl}/${id}`); + } + + public add(storable: Y) { + return rest.post>(`${this.serviceUrl}`, storable); + } + + public update(id: number, storable: Z) { + return rest.post>(`${this.serviceUrl}/${id}`, storable); + } +} diff --git a/packages/openscore-nextjs/services/UsuarioService.ts b/packages/openscore-nextjs/services/UsuarioService.ts new file mode 100644 index 0000000..48db351 --- /dev/null +++ b/packages/openscore-nextjs/services/UsuarioService.ts @@ -0,0 +1,73 @@ +import { UsuarioCompleto } from "..//model/UsuarioCompleto"; +import { Token } from "../model/Token"; +import { Usuario } from "../model/Usuario"; +import { ApiResponse } from "./../model/ApiResponse"; +import { CrearUsuario } from "./../model/CrearUsuario"; +import { LoginUsuario } from "./../model/LoginUsuario"; +import { UpdateUsuario } from "./../model/UpdateUsuario"; +import rest from "./Rest"; +import Service from "./Service"; + +export class UsuarioService extends Service< + Usuario, + CrearUsuario, + UpdateUsuario +> { + private getAllAdminUrl = "/admin"; + private registrarUrl = "registrar"; + private loginUrl = "login"; + private updatePasswordUrl = "password"; + private recoverPasswordUrl = "recover"; + private sendRecoverEmailUrl = "token"; + + constructor() { + super("usuarios"); + } + + public allAdmin(page: number, pageSize: number) { + return rest.get>(this.getAllAdminUrl); + } + + public updateUser(id: number, storable: UpdateUsuario) { + return rest.post>( + `${this.serviceUrl}/update/${id}`, + storable + ); + } + + public getMyUser() { + return rest.get>(`${this.serviceUrl}/myself`); + } + + public registrar(usuario: CrearUsuario) { + return rest.post(`${this.serviceUrl}/${this.registrarUrl}`, usuario); + } + + public login(usuario: LoginUsuario) { + return rest.post>( + `${this.serviceUrl}/${this.loginUrl}`, + usuario + ); + } + + public recoverPassword(recoverPassword: any) { + return rest.post>( + `${this.serviceUrl}/${this.recoverPasswordUrl}`, + recoverPassword + ); + } + + public updatePassword(updatePassword: any) { + return rest.post>( + `${this.serviceUrl}/${this.updatePasswordUrl}`, + updatePassword + ); + } + + public sendRecoverEmail(email: string) { + return rest.get>( + `${this.serviceUrl}/${this.sendRecoverEmailUrl}/email`, + {} + ); + } +} diff --git a/yarn.lock b/yarn.lock index ba172f9..0021522 100644 --- a/yarn.lock +++ b/yarn.lock @@ -171,6 +171,13 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/jwt-decode@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/jwt-decode/-/jwt-decode-3.1.0.tgz#eb1b24f436962b8857beaf8addfd542de56670a2" + integrity sha512-tthwik7TKkou3mVnBnvVuHnHElbjtdbM63pdBCbZTirCt3WAdM73Y79mOri7+ljsS99ZVwUFZHLMxJuJnv/z1w== + dependencies: + jwt-decode "*" + "@types/node@18.7.14": version "18.7.14" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.14.tgz#0fe081752a3333392d00586d815485a17c2cf3c9" @@ -340,11 +347,24 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + axe-core@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -433,6 +453,13 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -501,6 +528,11 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -852,6 +884,20 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +follow-redirects@^1.14.9: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + formik@^2.2.9: version "2.2.9" resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" @@ -1220,6 +1266,11 @@ json5@^1.0.1: array-includes "^3.1.5" object.assign "^4.1.3" +jwt-decode@*, jwt-decode@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" + integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== + language-subtag-registry@~0.3.2: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" @@ -1289,6 +1340,18 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" From d69e485d01b5969157de0dfbc76aae7baa95ead6 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Sun, 2 Oct 2022 16:01:23 -0300 Subject: [PATCH 05/28] Se agrega el guardado del token --- 2022-10-02.md | 1 + packages/openscore-nextjs/pages/_app.tsx | 23 +++++++-- packages/openscore-nextjs/pages/login.tsx | 16 ++++++ .../openscore-nextjs/states/SecurityState.ts | 51 +++++++++++++++++++ 4 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 2022-10-02.md create mode 100644 packages/openscore-nextjs/states/SecurityState.ts diff --git a/2022-10-02.md b/2022-10-02.md new file mode 100644 index 0000000..b3bed36 --- /dev/null +++ b/2022-10-02.md @@ -0,0 +1 @@ +# 2022-10-02 diff --git a/packages/openscore-nextjs/pages/_app.tsx b/packages/openscore-nextjs/pages/_app.tsx index 535333b..0303d17 100644 --- a/packages/openscore-nextjs/pages/_app.tsx +++ b/packages/openscore-nextjs/pages/_app.tsx @@ -1,8 +1,9 @@ +import { NextPage } from "next"; import type { AppProps } from "next/app"; +import { ReactElement, ReactNode, useEffect } from "react"; +import { RecoilRoot, useSetRecoilState } from "recoil"; +import { tokenState, TOKEN_KEY } from "../states/SecurityState"; import "../styles/main.scss"; -import { NextPage } from "next"; -import { ReactElement, ReactNode } from "react"; -import { useEffect } from "react"; export type NextPageWithLayout

                = NextPage & { getLayout?: (page: ReactElement) => ReactNode; @@ -12,6 +13,15 @@ type AppPropsWithLayout = AppProps & { Component: NextPageWithLayout; }; +const SecurityContext = () => { + const setToken = useSetRecoilState(tokenState); + useEffect(() => { + const token = localStorage.getItem(TOKEN_KEY); + setToken(token || ""); + }); + return <>; +}; + export default function MyApp({ Component, pageProps }: AppPropsWithLayout) { useEffect(() => { require("bootstrap/dist/js/bootstrap.bundle.min.js"); @@ -19,5 +29,10 @@ export default function MyApp({ Component, pageProps }: AppPropsWithLayout) { // Use the layout defined at the page level, if available const getLayout = Component.getLayout ?? ((page) => page); - return getLayout(); + return getLayout( + + + + + ); } diff --git a/packages/openscore-nextjs/pages/login.tsx b/packages/openscore-nextjs/pages/login.tsx index 4d87341..0a40a19 100644 --- a/packages/openscore-nextjs/pages/login.tsx +++ b/packages/openscore-nextjs/pages/login.tsx @@ -2,11 +2,24 @@ import { Formik } from "formik"; import type { NextPage } from "next"; import Image from "next/image"; import { useRouter } from "next/router"; +import { useRecoilState, useRecoilValue } from "recoil"; import messi from "../images/messi.webp"; import { UsuarioService } from "../services/UsuarioService"; +import { + isLoggerInState, + tokenState, + TOKEN_KEY, +} from "../states/SecurityState"; const Login: NextPage = () => { const router = useRouter(); + const [token, setToken] = useRecoilState(tokenState); + const isLoggedIn = useRecoilValue(isLoggerInState); + + if (isLoggedIn) { + router.push("/"); + } + return (

                @@ -34,6 +47,9 @@ const Login: NextPage = () => { new UsuarioService() .login(values) .then((res) => { + const token = res.data.data.token; + setToken(token); + localStorage.setItem(TOKEN_KEY, token); router.push("/"); setSubmitting(false); }) diff --git a/packages/openscore-nextjs/states/SecurityState.ts b/packages/openscore-nextjs/states/SecurityState.ts new file mode 100644 index 0000000..697c725 --- /dev/null +++ b/packages/openscore-nextjs/states/SecurityState.ts @@ -0,0 +1,51 @@ +import jwtDecode, { JwtPayload } from "jwt-decode"; +import { atom, selector } from "recoil"; + +const isRoleIncluded = (token: string, role: string) => { + try { + const decoded = jwtDecode(token); + return decoded.roles.includes(role.toUpperCase()); + } catch (e) { + return false; + } +}; + +const isValid = (token: string) => { + try { + const decoded = jwtDecode(token); + return (decoded.exp || 0) > 0; + } catch (e) { + return false; + } +}; + +export const TOKEN_KEY = "openscore-token"; + +export const tokenState = atom({ + key: "Token", + default: "", +}); + +export const isLoggerInState = selector({ + key: "IsLoggedIn", + get: ({ get }) => { + const token = get(tokenState); + + return ( + token !== undefined && + token !== null && + token.length > 0 && + isValid(token) + ); + + return false; + }, +}); + +export const isAdminState = selector({ + key: "isAdmin", + get: ({ get }) => { + const token = get(tokenState); + return isRoleIncluded(token, "admin"); + }, +}); From 64e92ab267c6123f984f5e6b5b3d8956a9a313dd Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Sun, 2 Oct 2022 18:08:42 -0300 Subject: [PATCH 06/28] Se agrega una primera pantalla de pronosticos con los servicios incluidos --- .../openscore-nextjs/components/MatchCard.tsx | 23 ++++++--- packages/openscore-nextjs/pages/_app.tsx | 10 ++-- .../openscore-nextjs/pages/forecast/index.tsx | 15 +++--- .../openscore-nextjs/services/AuthGuard.ts | 33 ------------- .../openscore-nextjs/services/AuthService.ts | 49 ------------------- packages/openscore-nextjs/services/Rest.ts | 5 +- .../openscore-nextjs/states/ForecastState.ts | 7 +++ 7 files changed, 42 insertions(+), 100 deletions(-) delete mode 100644 packages/openscore-nextjs/services/AuthGuard.ts delete mode 100644 packages/openscore-nextjs/services/AuthService.ts create mode 100644 packages/openscore-nextjs/states/ForecastState.ts diff --git a/packages/openscore-nextjs/components/MatchCard.tsx b/packages/openscore-nextjs/components/MatchCard.tsx index bc7f9f4..bd44122 100644 --- a/packages/openscore-nextjs/components/MatchCard.tsx +++ b/packages/openscore-nextjs/components/MatchCard.tsx @@ -1,22 +1,31 @@ +import { Partido } from "../model/Partido"; + const TeamFlag = ({ src }: { src: string }) => (
                ); -const MatchCard = () => ( +interface MatchCardProps { + partido: Partido; +} + +const MatchCard = ({ partido }: MatchCardProps) => (
                FIFA World Cup - Qatar 2022
                -
                Round Robin 1 of 3
                +
                Round Robin 0 of 3
                - -
                3 : 1
                - -
                Argentina
                + +
                + {partido.resultado?.local || "-"} :{" "} + {partido.resultado?.visitante || "-"} +
                + +
                {partido.local.nombre}
                36'
                -
                Brasil
                +
                {partido.visitante.nombre}
                • diff --git a/packages/openscore-nextjs/pages/_app.tsx b/packages/openscore-nextjs/pages/_app.tsx index 0303d17..f39550c 100644 --- a/packages/openscore-nextjs/pages/_app.tsx +++ b/packages/openscore-nextjs/pages/_app.tsx @@ -1,7 +1,8 @@ import { NextPage } from "next"; import type { AppProps } from "next/app"; import { ReactElement, ReactNode, useEffect } from "react"; -import { RecoilRoot, useSetRecoilState } from "recoil"; +import { RecoilRoot, useRecoilState } from "recoil"; +import rest from "../services/Rest"; import { tokenState, TOKEN_KEY } from "../states/SecurityState"; import "../styles/main.scss"; @@ -14,11 +15,14 @@ type AppPropsWithLayout = AppProps & { }; const SecurityContext = () => { - const setToken = useSetRecoilState(tokenState); + const [token, setToken] = useRecoilState(tokenState); useEffect(() => { const token = localStorage.getItem(TOKEN_KEY); setToken(token || ""); - }); + }, []); + useEffect(() => { + rest.defaults.headers.common["Authorization"] = `Bearer ${token}`; + }, [token]); return <>; }; diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx index 0893f18..e8aa25b 100644 --- a/packages/openscore-nextjs/pages/forecast/index.tsx +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -1,10 +1,12 @@ import Link from "next/link"; import { useRouter } from "next/router"; import { useEffect } from "react"; +import { useRecoilState } from "recoil"; import { layout } from "../../components/layout/MainLayout"; import LoadingScreen from "../../components/LoadingScreen"; import MatchCard from "../../components/MatchCard"; import { PronosticoService } from "../../services/PronosticoService"; +import { forecastListState } from "../../states/ForecastState"; import { NextPageWithLayout } from "../_app"; const filters = [ @@ -22,13 +24,14 @@ const getLink = (link: string) => `/forecast?filter=${link}`; const Forecasts: NextPageWithLayout = () => { const router = useRouter(); + const [forecast, setForecast] = useRecoilState(forecastListState); const { filter } = router.query; const path = router.asPath; useEffect(() => { const pronostico = new PronosticoService(); - pronostico.getAll(1, 1).then((res) => console.log(res)); - }); + pronostico.getAll(1, 1).then((res) => setForecast(res.data.data)); + }, []); return (
                  @@ -55,11 +58,9 @@ const Forecasts: NextPageWithLayout = () => {
                  - - - - - + {forecast.map((f) => ( + + ))}
                diff --git a/packages/openscore-nextjs/services/AuthGuard.ts b/packages/openscore-nextjs/services/AuthGuard.ts deleted file mode 100644 index 09b4018..0000000 --- a/packages/openscore-nextjs/services/AuthGuard.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { AuthService } from "./AuthService"; - -export class AuthGuard implements CanActivateChild, CanActivate { - constructor( - private authService: AuthService, - private toastr: ToastrService, - public router: Router - ) {} - - canActivateChild( - route: ActivatedRouteSnapshot, - state: RouterStateSnapshot - ): boolean { - return this.activation(); - } - - canActivate( - route: ActivatedRouteSnapshot, - state: RouterStateSnapshot - ): boolean { - return this.activation(); - } - - activation() { - if (!this.authService.isLoggedIn()) { - this.toastr.info("You are not logged in, please login first to play!"); - this.router.navigate(["/pages/login"]); - return false; - } else { - return true; - } - } -} diff --git a/packages/openscore-nextjs/services/AuthService.ts b/packages/openscore-nextjs/services/AuthService.ts deleted file mode 100644 index 94d8d8a..0000000 --- a/packages/openscore-nextjs/services/AuthService.ts +++ /dev/null @@ -1,49 +0,0 @@ -import jwtDecode, { JwtPayload } from "jwt-decode"; - -export class AuthService { - token: ""; - - private TOKEN = "openscore-token"; - - constructor() { - // Que esto quede vacio asi se puede crear con un new en caso extremo - this.token = this.getLocalStorageToken(); - } - - isLoggedIn() { - const t = this.getLocalStorageToken(); - return t !== undefined && t !== null && t.length > 0; - } - - public getToken() { - return this.token.asObservable(); - } - - public getLocalStorageToken() { - return localStorage.getItem(this.TOKEN); - } - - public setToken(token: string) { - localStorage.setItem(this.TOKEN, token); - this.token.next(token); - } - - public logout() { - return localStorage.removeItem(this.TOKEN); - } - - public isAdmin() { - return this.containsRole("ADMIN"); - } - - public containsRole(role: string) { - try { - const decoded = jwtDecode( - this.getLocalStorageToken() || "" - ); - return decoded.roles.includes(role.toUpperCase()); - } catch (e) { - return false; - } - } -} diff --git a/packages/openscore-nextjs/services/Rest.ts b/packages/openscore-nextjs/services/Rest.ts index c403ac1..97db5b9 100644 --- a/packages/openscore-nextjs/services/Rest.ts +++ b/packages/openscore-nextjs/services/Rest.ts @@ -1,4 +1,5 @@ import axios from "axios"; +import { TOKEN_KEY } from "../states/SecurityState"; // Set config defaults when creating the instance const rest = axios.create({ @@ -6,8 +7,10 @@ const rest = axios.create({ }); rest.defaults.headers.common["Content-Type"] = "application/json"; +// rest.defaults.headers.common["Authorization"] = `Bearer ${localStorage.getItem( +// TOKEN_KEY +// )}`; // Alter defaults after instance has been created -// instance.defaults.headers.common["Authorization"] = AUTH_TOKEN; export default rest; diff --git a/packages/openscore-nextjs/states/ForecastState.ts b/packages/openscore-nextjs/states/ForecastState.ts new file mode 100644 index 0000000..7b082d2 --- /dev/null +++ b/packages/openscore-nextjs/states/ForecastState.ts @@ -0,0 +1,7 @@ +import { atom } from "recoil"; +import { Partido } from "../model/Partido"; + +export const forecastListState = atom({ + key: "ForecastList", + default: [], +}); From eb18c0dd2684bc7ea826601d39b7f78f9aca3f60 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Mon, 3 Oct 2022 09:57:41 -0300 Subject: [PATCH 07/28] Se acomodan los eventos del useEffect --- .../openscore-nextjs/components/MatchCard.tsx | 16 +++++++++++----- .../openscore-nextjs/pages/forecast/index.tsx | 13 +++++++++---- .../styles/components/_match.scss | 7 +++++++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/packages/openscore-nextjs/components/MatchCard.tsx b/packages/openscore-nextjs/components/MatchCard.tsx index bd44122..09eda2f 100644 --- a/packages/openscore-nextjs/components/MatchCard.tsx +++ b/packages/openscore-nextjs/components/MatchCard.tsx @@ -15,7 +15,9 @@ const MatchCard = ({ partido }: MatchCardProps) => (
                FIFA World Cup - Qatar 2022
                -
                Round Robin 0 of 3
                +
                + {partido.fase.nombre} Phase {partido.fecha} of 3 +
                @@ -24,22 +26,26 @@ const MatchCard = ({ partido }: MatchCardProps) => (
                {partido.local.nombre}
                -
                36'
                +
                {partido.status}
                {partido.visitante.nombre}
                • - + {}} + > Home
                • - + {}}> Draw
                • - + {}}> Away
                • diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx index e8aa25b..7fa199f 100644 --- a/packages/openscore-nextjs/pages/forecast/index.tsx +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -1,10 +1,11 @@ import Link from "next/link"; import { useRouter } from "next/router"; import { useEffect } from "react"; -import { useRecoilState } from "recoil"; +import { SetterOrUpdater, useRecoilState } from "recoil"; import { layout } from "../../components/layout/MainLayout"; import LoadingScreen from "../../components/LoadingScreen"; import MatchCard from "../../components/MatchCard"; +import { Partido } from "../../model/Partido"; import { PronosticoService } from "../../services/PronosticoService"; import { forecastListState } from "../../states/ForecastState"; import { NextPageWithLayout } from "../_app"; @@ -20,6 +21,11 @@ const filters = [ }, ]; +const refresh = (setForecast: SetterOrUpdater) => { + const pronostico = new PronosticoService(); + pronostico.getAll(1, 1).then((res) => setForecast(res.data.data)); +}; + const getLink = (link: string) => `/forecast?filter=${link}`; const Forecasts: NextPageWithLayout = () => { @@ -29,9 +35,8 @@ const Forecasts: NextPageWithLayout = () => { const path = router.asPath; useEffect(() => { - const pronostico = new PronosticoService(); - pronostico.getAll(1, 1).then((res) => setForecast(res.data.data)); - }, []); + refresh(setForecast); + }, [filter, setForecast]); return (
                  diff --git a/packages/openscore-nextjs/styles/components/_match.scss b/packages/openscore-nextjs/styles/components/_match.scss index 9355de9..e99f970 100644 --- a/packages/openscore-nextjs/styles/components/_match.scss +++ b/packages/openscore-nextjs/styles/components/_match.scss @@ -31,4 +31,11 @@ display: grid; grid-template-columns: 1fr 1fr 1fr; } + + .nav-link { + cursor: pointer; + &:hover { + background-color: $info; + } + } } From a5965d50ac9b1302af1e775f4b582e965fa29ec8 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Mon, 3 Oct 2022 10:06:07 -0300 Subject: [PATCH 08/28] Se agrega una pagina para cuando no hay contenido --- .../components/EmptyScreen.tsx | 26 +++++++++++++------ .../openscore-nextjs/pages/forecast/index.tsx | 13 ++++++---- packages/openscore-nextjs/pages/index.tsx | 2 +- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/packages/openscore-nextjs/components/EmptyScreen.tsx b/packages/openscore-nextjs/components/EmptyScreen.tsx index 9e448de..e0fa5a8 100644 --- a/packages/openscore-nextjs/components/EmptyScreen.tsx +++ b/packages/openscore-nextjs/components/EmptyScreen.tsx @@ -1,9 +1,11 @@ import Image from "next/image"; +import { PropsWithChildren } from "react"; import soccer from "./soccer.svg"; -export interface EmptyScreenProps { +export interface EmptyScreenProps extends PropsWithChildren { title?: string; description?: string; + isEmpty: boolean; } const getDefaultTitle = (title?: string) => @@ -13,12 +15,20 @@ const getDefaultDescription = (description?: string) => ? description : "Don't worry we will check if VAR is working correctly"; -const EmptyScreen = ({ title, description }: EmptyScreenProps) => ( -
                  -

                  {getDefaultTitle(title)}

                  -

                  {getDefaultDescription(description)}

                  - -
                  -); +const EmptyScreen = ({ + title, + description, + isEmpty, + children, +}: EmptyScreenProps) => + isEmpty ? ( +
                  +

                  {getDefaultTitle(title)}

                  +

                  {getDefaultDescription(description)}

                  + +
                  + ) : ( + <>{children} + ); export default EmptyScreen; diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx index 7fa199f..7d3844a 100644 --- a/packages/openscore-nextjs/pages/forecast/index.tsx +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -2,6 +2,7 @@ import Link from "next/link"; import { useRouter } from "next/router"; import { useEffect } from "react"; import { SetterOrUpdater, useRecoilState } from "recoil"; +import EmptyScreen from "../../components/EmptyScreen"; import { layout } from "../../components/layout/MainLayout"; import LoadingScreen from "../../components/LoadingScreen"; import MatchCard from "../../components/MatchCard"; @@ -62,11 +63,13 @@ const Forecasts: NextPageWithLayout = () => {
                -
                - {forecast.map((f) => ( - - ))} -
                + +
                + {forecast.map((f) => ( + + ))} +
                +
                diff --git a/packages/openscore-nextjs/pages/index.tsx b/packages/openscore-nextjs/pages/index.tsx index b51e5b3..47a5420 100644 --- a/packages/openscore-nextjs/pages/index.tsx +++ b/packages/openscore-nextjs/pages/index.tsx @@ -6,7 +6,7 @@ const Home: NextPageWithLayout = () => { return (

                Home

                - +
                ); }; From 927d62a3cda194af202cf85fb69db6540c31d757 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Mon, 3 Oct 2022 11:46:17 -0300 Subject: [PATCH 09/28] Se agregan los toasts para mostrar informacion --- .../openscore-nextjs/components/MatchCard.tsx | 56 ++++++++++++++++--- packages/openscore-nextjs/package.json | 1 + packages/openscore-nextjs/pages/_app.tsx | 14 +++++ .../openscore-nextjs/pages/forecast/index.tsx | 3 +- yarn.lock | 12 ++++ 5 files changed, 76 insertions(+), 10 deletions(-) diff --git a/packages/openscore-nextjs/components/MatchCard.tsx b/packages/openscore-nextjs/components/MatchCard.tsx index 09eda2f..c5b480d 100644 --- a/packages/openscore-nextjs/components/MatchCard.tsx +++ b/packages/openscore-nextjs/components/MatchCard.tsx @@ -1,4 +1,11 @@ +import { AxiosError } from "axios"; +import { PropsWithChildren } from "react"; +import { toast } from "react-toastify"; +import { ApiResponse } from "../model/ApiResponse"; import { Partido } from "../model/Partido"; +import { PronosticoService } from "../services/PronosticoService"; + +const pronostico = new PronosticoService(); const TeamFlag = ({ src }: { src: string }) => (
                @@ -10,6 +17,32 @@ interface MatchCardProps { partido: Partido; } +const ActiveNavLink = ({ + id, + active, + children, +}: { active: boolean; id: number } & PropsWithChildren) => ( + { + console.log(id); + pronostico + .local(id) + .then((res) => { + console.log(res); + toast.success(res.data.description); + }) + .catch((err: AxiosError>) => { + console.log(err); + toast.error(err.response?.data.description || ""); + }); + }} + > + {children} + +); + const MatchCard = ({ partido }: MatchCardProps) => (
                @@ -31,23 +64,28 @@ const MatchCard = ({ partido }: MatchCardProps) => (
                diff --git a/packages/openscore-nextjs/package.json b/packages/openscore-nextjs/package.json index ef50e53..4daa48c 100644 --- a/packages/openscore-nextjs/package.json +++ b/packages/openscore-nextjs/package.json @@ -17,6 +17,7 @@ "next": "12.2.5", "react": "18.2.0", "react-dom": "18.2.0", + "react-toastify": "^9.0.8", "recoil": "^0.7.5", "sass": "^1.54.8" }, diff --git a/packages/openscore-nextjs/pages/_app.tsx b/packages/openscore-nextjs/pages/_app.tsx index f39550c..f5837f5 100644 --- a/packages/openscore-nextjs/pages/_app.tsx +++ b/packages/openscore-nextjs/pages/_app.tsx @@ -1,6 +1,8 @@ import { NextPage } from "next"; import type { AppProps } from "next/app"; import { ReactElement, ReactNode, useEffect } from "react"; +import { toast, ToastContainer } from "react-toastify"; +import "react-toastify/dist/ReactToastify.css"; import { RecoilRoot, useRecoilState } from "recoil"; import rest from "../services/Rest"; import { tokenState, TOKEN_KEY } from "../states/SecurityState"; @@ -37,6 +39,18 @@ export default function MyApp({ Component, pageProps }: AppPropsWithLayout) { + ); } diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx index 7d3844a..17aae44 100644 --- a/packages/openscore-nextjs/pages/forecast/index.tsx +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -22,8 +22,9 @@ const filters = [ }, ]; +const pronostico = new PronosticoService(); + const refresh = (setForecast: SetterOrUpdater) => { - const pronostico = new PronosticoService(); pronostico.getAll(1, 1).then((res) => setForecast(res.data.data)); }; diff --git a/yarn.lock b/yarn.lock index 0021522..199c1d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -441,6 +441,11 @@ chalk@^4.0.0: optionalDependencies: fsevents "~2.3.2" +clsx@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1606,6 +1611,13 @@ react-is@^16.13.1, react-is@^16.7.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-toastify@^9.0.8: + version "9.0.8" + resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.0.8.tgz#3876c89fc6211a29027b3075010b5ec39ebe4f7e" + integrity sha512-EwM+teWt49HSHx+67qI08yLAW1zAsBxCXLCsUfxHYv1W7/R3ZLhrqKalh7j+kjgPna1h5LQMSMwns4tB4ww2yQ== + dependencies: + clsx "^1.1.1" + react@18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" From 3b746ceea28e5bfe918cb1f7f21db6605201b1f0 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Tue, 4 Oct 2022 11:39:44 -0300 Subject: [PATCH 10/28] Se agregan las fechas de los partidos, falta mejorar --- .../src/main/resources/data/partidos.yml | 2 +- .../openscore-nextjs/components/MatchCard.tsx | 162 +++++++++++------- .../openscore-nextjs/pages/forecast/index.tsx | 8 +- .../services/PronosticoService.ts | 4 + .../styles/components/_match.scss | 17 +- 5 files changed, 125 insertions(+), 68 deletions(-) diff --git a/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml b/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml index 19ef219..20db0d9 100644 --- a/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml +++ b/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml @@ -3,7 +3,7 @@ visitante: VEN grupo: GRUPO_A lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 13-06-2021T18:00-0300 + dia: 13-06-2023T18:00-0300 fecha: "1" fase: GRUPO - local: COL diff --git a/packages/openscore-nextjs/components/MatchCard.tsx b/packages/openscore-nextjs/components/MatchCard.tsx index c5b480d..7c47d08 100644 --- a/packages/openscore-nextjs/components/MatchCard.tsx +++ b/packages/openscore-nextjs/components/MatchCard.tsx @@ -1,11 +1,11 @@ -import { AxiosError } from "axios"; -import { PropsWithChildren } from "react"; +import { AxiosError, AxiosPromise } from "axios"; +import { PropsWithChildren, useState } from "react"; import { toast } from "react-toastify"; import { ApiResponse } from "../model/ApiResponse"; import { Partido } from "../model/Partido"; import { PronosticoService } from "../services/PronosticoService"; -const pronostico = new PronosticoService(); +const pronosticoService = new PronosticoService(); const TeamFlag = ({ src }: { src: string }) => (
                @@ -15,80 +15,112 @@ const TeamFlag = ({ src }: { src: string }) => ( interface MatchCardProps { partido: Partido; + onUpdate: () => void; } const ActiveNavLink = ({ id, active, children, -}: { active: boolean; id: number } & PropsWithChildren) => ( - { - console.log(id); - pronostico - .local(id) - .then((res) => { - console.log(res); - toast.success(res.data.description); - }) - .catch((err: AxiosError>) => { - console.log(err); - toast.error(err.response?.data.description || ""); - }); - }} + select, + onUpdate, +}: { + active: boolean; + id: number; + select: (id: number) => AxiosPromise; + onUpdate: () => void; +} & PropsWithChildren) => { + const [busy, setBusy] = useState(false); + return ( +
              1. + { + setBusy(true); + select(id) + .then((res) => { + toast.success(res.data.description); + setBusy(false); + onUpdate(); + }) + .catch((err: AxiosError>) => { + toast.error(err.response?.data.description || ""); + setBusy(false); + }); + }} + > + {busy ? ( + + ) : ( + <> + )} + {children} + +
              2. + ); +}; + +const StatusIndicator = ({ children }: PropsWithChildren) => ( +
                {children} - +
                ); -const MatchCard = ({ partido }: MatchCardProps) => ( -
                -
                -
                -
                FIFA World Cup - Qatar 2022
                -
                - {partido.fase.nombre} Phase {partido.fecha} of 3 -
                -
                - -
                - {partido.resultado?.local || "-"} :{" "} - {partido.resultado?.visitante || "-"} -
                - -
                {partido.local.nombre}
                -
                {partido.status}
                -
                {partido.visitante.nombre}
                +const MatchCard = ({ partido, onUpdate }: MatchCardProps) => ( +
                +
                +
                FIFA World Cup - Qatar 2022
                +
                + {partido.fase.nombre} Phase {partido.fecha} of 3 - {partido.dia} +
                +
                + +
                + {partido.resultado?.local || "-"} :{" "} + {partido.resultado?.visitante || "-"}
                -
                  -
                • - - Home - -
                • -
                • - - Draw - -
                • -
                • - - Away - -
                • -
                + +
                {partido.local.nombre}
                + {partido.status} +
                {partido.visitante.nombre}
                +
                  + pronosticoService.local(id)} + onUpdate={onUpdate} + > + Home + + pronosticoService.empate(id)} + onUpdate={onUpdate} + > + Draw + + pronosticoService.visitante(id)} + onUpdate={onUpdate} + > + Away + +
                ); diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx index 17aae44..af98b9a 100644 --- a/packages/openscore-nextjs/pages/forecast/index.tsx +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -67,7 +67,13 @@ const Forecasts: NextPageWithLayout = () => {
                {forecast.map((f) => ( - + { + refresh(setForecast); + }} + > ))}
                diff --git a/packages/openscore-nextjs/services/PronosticoService.ts b/packages/openscore-nextjs/services/PronosticoService.ts index 943600e..49919c9 100644 --- a/packages/openscore-nextjs/services/PronosticoService.ts +++ b/packages/openscore-nextjs/services/PronosticoService.ts @@ -12,9 +12,11 @@ export class PronosticoService extends Service< > { constructor() { super("pronosticos"); + console.log(this.serviceUrl); } local(id: number) { + console.log(this.serviceUrl); return rest.post>( `${this.serviceUrl}/${id}/local`, {} @@ -22,6 +24,7 @@ export class PronosticoService extends Service< } empate(id: number) { + console.log(this.serviceUrl); return rest.post>( `${this.serviceUrl}/${id}/empate`, {} @@ -29,6 +32,7 @@ export class PronosticoService extends Service< } visitante(id: number) { + console.log(this.serviceUrl); return rest.post>( `${this.serviceUrl}/${id}/visitante`, {} diff --git a/packages/openscore-nextjs/styles/components/_match.scss b/packages/openscore-nextjs/styles/components/_match.scss index e99f970..46bfbe8 100644 --- a/packages/openscore-nextjs/styles/components/_match.scss +++ b/packages/openscore-nextjs/styles/components/_match.scss @@ -10,6 +10,15 @@ margin-bottom: 1rem; } + &--blocked { + pointer-events: none; + background-color: $gray-200; + } + + &--blocked &__flag { + filter: grayscale(100%); + } + &__flag { border-radius: 50%; overflow: hidden; @@ -35,7 +44,13 @@ .nav-link { cursor: pointer; &:hover { - background-color: $info; + background-color: $secondary; + } + transition: all 0.5s; + + & span { + margin-right: 0.5rem; + transition: all 0.5s; } } } From d2af9e25e29e77492cef5cf3fabd16bfe65a0ee4 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Wed, 5 Oct 2022 22:42:36 -0300 Subject: [PATCH 11/28] Se agrega un estado de carga para los pronosticos --- .../openscore-nextjs/pages/forecast/index.tsx | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx index af98b9a..64263e0 100644 --- a/packages/openscore-nextjs/pages/forecast/index.tsx +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -1,6 +1,6 @@ import Link from "next/link"; import { useRouter } from "next/router"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { SetterOrUpdater, useRecoilState } from "recoil"; import EmptyScreen from "../../components/EmptyScreen"; import { layout } from "../../components/layout/MainLayout"; @@ -24,8 +24,21 @@ const filters = [ const pronostico = new PronosticoService(); -const refresh = (setForecast: SetterOrUpdater) => { - pronostico.getAll(1, 1).then((res) => setForecast(res.data.data)); +const refresh = ( + setForecast: SetterOrUpdater, + setBusy: SetterOrUpdater +) => { + setBusy(true); + pronostico + .getAll(1, 1) + .then((res) => { + setForecast(res.data.data); + setBusy(false); + }) + .catch((err) => { + setForecast([]); + setBusy(false); + }); }; const getLink = (link: string) => `/forecast?filter=${link}`; @@ -33,11 +46,12 @@ const getLink = (link: string) => `/forecast?filter=${link}`; const Forecasts: NextPageWithLayout = () => { const router = useRouter(); const [forecast, setForecast] = useRecoilState(forecastListState); + const [busy, setBusy] = useState(false); const { filter } = router.query; const path = router.asPath; useEffect(() => { - refresh(setForecast); + refresh(setForecast, setBusy); }, [filter, setForecast]); return ( @@ -63,7 +77,7 @@ const Forecasts: NextPageWithLayout = () => { ))}
                - +
                {forecast.map((f) => ( @@ -71,7 +85,7 @@ const Forecasts: NextPageWithLayout = () => { key={f.id} partido={f} onUpdate={() => { - refresh(setForecast); + refresh(setForecast, setBusy); }} > ))} From dc5ac74c9854bad69b6b26908b0c602b1245f9fd Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Thu, 6 Oct 2022 12:11:49 -0300 Subject: [PATCH 12/28] Se acomodan las fechas entre el servidor y el cliente --- .../core/api/partidos/PartidoDTO.java | 6 +- .../openscore/core/mapping/DateMapper.java | 17 ++++ .../openscore/core/mapping/PartidoMapper.java | 10 +- .../core/mapping/PronosticoMapper.java | 40 ++++---- .../openscore-nextjs/components/MatchCard.tsx | 95 ++++++++++--------- packages/openscore-nextjs/model/Partido.ts | 2 +- 6 files changed, 95 insertions(+), 75 deletions(-) create mode 100644 packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/DateMapper.java diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java index efb89eb..75c26fe 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java @@ -11,7 +11,7 @@ public class PartidoDTO { private long id; private EquipoDTO local; private EquipoDTO visitante; - private Date dia; + private Long dia; private int fecha; private GrupoDTO grupo; private FaseDTO fase; @@ -43,11 +43,11 @@ public void setVisitante(EquipoDTO visitante) { this.visitante = visitante; } - public Date getDia() { + public Long getDia() { return dia; } - public void setDia(Date dia) { + public void setDia(Long dia) { this.dia = dia; } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/DateMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/DateMapper.java new file mode 100644 index 0000000..bf6dfb5 --- /dev/null +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/DateMapper.java @@ -0,0 +1,17 @@ +package io.semantic.openscore.core.mapping; + +import java.sql.Date; + +import org.mapstruct.Mapper; + +@Mapper(componentModel = "cdi") +public class DateMapper { + + public Long asNumber(Date date) { + return date.getTime(); + } + + public Date asDate(Long date) { + return new Date(date); + } +} \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java index 7f73bac..99b2f31 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java @@ -1,15 +1,15 @@ package io.semantic.openscore.core.mapping; -import io.semantic.openscore.core.api.partidos.CrearOUpdatePartidoDTO; +import java.util.List; + +import org.mapstruct.Mapper; + import io.semantic.openscore.core.api.partidos.PartidoDTO; import io.semantic.openscore.core.api.partidos.ResultadoDTO; import io.semantic.openscore.core.model.Partido; import io.semantic.openscore.core.model.Resultado; -import org.mapstruct.Mapper; - -import java.util.List; -@Mapper(componentModel = "cdi") +@Mapper(componentModel = "cdi", uses = DateMapper.class) public interface PartidoMapper { PartidoDTO asApi(Partido partido); diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java index a33e405..1dcaa91 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java @@ -1,36 +1,36 @@ package io.semantic.openscore.core.mapping; -import io.semantic.openscore.core.api.pronosticos.CrearPronosticoDTO; -import io.semantic.openscore.core.api.pronosticos.PartidoPronosticoDTO; -import io.semantic.openscore.core.api.pronosticos.PronosticoDTO; -import io.semantic.openscore.core.model.Partido; -import io.semantic.openscore.core.model.Pronostico; +import java.util.List; + import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.MappingTarget; import org.mapstruct.Mappings; -import java.util.List; +import io.semantic.openscore.core.api.pronosticos.CrearPronosticoDTO; +import io.semantic.openscore.core.api.pronosticos.PartidoPronosticoDTO; +import io.semantic.openscore.core.api.pronosticos.PronosticoDTO; +import io.semantic.openscore.core.model.Partido; +import io.semantic.openscore.core.model.Pronostico; -@Mapper(componentModel = "cdi") +@Mapper(componentModel = "cdi", uses = DateMapper.class) public interface PronosticoMapper { + PronosticoDTO asApi(Pronostico pronostico); - PronosticoDTO asApi(Pronostico pronostico); - - List asApi(List pronosticos); + List asApi(List pronosticos); - @Mappings({ - @Mapping(source = "partido", target = "partido", ignore = true) - }) - Pronostico asPronostico(CrearPronosticoDTO crearPronostico); + @Mappings({ + @Mapping(source = "partido", target = "partido", ignore = true) + }) + Pronostico asPronostico(CrearPronosticoDTO crearPronostico); - PartidoPronosticoDTO asApiPronostico(Partido partido); + PartidoPronosticoDTO asApiPronostico(Partido partido); - List asApiPronostico(List partido); + List asApiPronostico(List partido); - @Mappings({ - @Mapping(source = "partido", target = "partido", ignore = true) - }) - void updatePronostico(CrearPronosticoDTO crearPronostico, @MappingTarget Pronostico pronostico); + @Mappings({ + @Mapping(source = "partido", target = "partido", ignore = true) + }) + void updatePronostico(CrearPronosticoDTO crearPronostico, @MappingTarget Pronostico pronostico); } diff --git a/packages/openscore-nextjs/components/MatchCard.tsx b/packages/openscore-nextjs/components/MatchCard.tsx index 7c47d08..956d205 100644 --- a/packages/openscore-nextjs/components/MatchCard.tsx +++ b/packages/openscore-nextjs/components/MatchCard.tsx @@ -75,54 +75,57 @@ const StatusIndicator = ({ children }: PropsWithChildren) => (
                ); -const MatchCard = ({ partido, onUpdate }: MatchCardProps) => ( -
                -
                -
                FIFA World Cup - Qatar 2022
                -
                - {partido.fase.nombre} Phase {partido.fecha} of 3 - {partido.dia} -
                -
                - -
                - {partido.resultado?.local || "-"} :{" "} - {partido.resultado?.visitante || "-"} +const MatchCard = ({ partido, onUpdate }: MatchCardProps) => { + return ( +
                +
                +
                FIFA World Cup - Qatar 2022
                +
                + {partido.fase.nombre} Phase {partido.fecha} of 3 -{" "} + {new Date(partido.dia).toLocaleString()} +
                +
                + +
                + {partido.resultado?.local || "-"} :{" "} + {partido.resultado?.visitante || "-"} +
                + +
                {partido.local.nombre}
                + {partido.status} +
                {partido.visitante.nombre}
                - -
                {partido.local.nombre}
                - {partido.status} -
                {partido.visitante.nombre}
                +
                  + pronosticoService.local(id)} + onUpdate={onUpdate} + > + Home + + pronosticoService.empate(id)} + onUpdate={onUpdate} + > + Draw + + pronosticoService.visitante(id)} + onUpdate={onUpdate} + > + Away + +
                -
                  - pronosticoService.local(id)} - onUpdate={onUpdate} - > - Home - - pronosticoService.empate(id)} - onUpdate={onUpdate} - > - Draw - - pronosticoService.visitante(id)} - onUpdate={onUpdate} - > - Away - -
                -
                -); + ); +}; export default MatchCard; diff --git a/packages/openscore-nextjs/model/Partido.ts b/packages/openscore-nextjs/model/Partido.ts index 4d0660f..114651d 100644 --- a/packages/openscore-nextjs/model/Partido.ts +++ b/packages/openscore-nextjs/model/Partido.ts @@ -8,7 +8,7 @@ export interface Partido { id: number; local: Equipo; visitante: Equipo; - dia: Date; + dia: number; fecha: number; lugar: string; resultado: Resultado; From 015a0a936247c11399e1bbb04f5b3a4cde31db2e Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Tue, 11 Oct 2022 09:52:56 -0300 Subject: [PATCH 13/28] se agregan los partidos del mundial --- packages/openscore-core-quarkus/package.json | 2 +- .../openscore/core/model/Partido.java | 8 +- .../startup/steps/CrearEquipos.java | 43 +- .../startup/steps/CrearGruposYFases.java | 6 + .../startup/steps/CrearPartidos.java | 8 +- .../src/main/resources/application.properties | 3 +- .../src/main/resources/data/partidos.yml | 413 +++++++++++++----- .../openscore-nextjs/pages/forecast/index.tsx | 36 +- .../openscore-nextjs/states/ForecastState.ts | 30 +- 9 files changed, 404 insertions(+), 145 deletions(-) diff --git a/packages/openscore-core-quarkus/package.json b/packages/openscore-core-quarkus/package.json index 156d65e..53b0210 100644 --- a/packages/openscore-core-quarkus/package.json +++ b/packages/openscore-core-quarkus/package.json @@ -8,6 +8,6 @@ "private": true, "scripts": { "build": "mvn clean package", - "dev": "mvn clean package quarkus:dev" + "dev": "mvn clean package quarkus:dev -Duser.timezone=UTC" } } \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java index a41ff1d..c959907 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java @@ -1,9 +1,11 @@ package io.semantic.openscore.core.model; +import java.time.Instant; +import java.util.Date; + import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.ManyToOne; -import java.util.Date; @Entity public class Partido extends Storable { @@ -103,13 +105,13 @@ private boolean isSumaPuntos(Pronostico pronostico, Ganador ganador) { pronostico.isEmpate() && Ganador.EMPATE.equals(ganador); } - private int calcularPuntos() { return this.getFase().getPuntos(); } public boolean isBloqueado() { - return this.getDia().getTime() <= new Date().getTime() + 900000; + System.out.println(this.getDia().getTime()); + return this.getDia().getTime() <= Instant.now().toEpochMilli() + 900000; } public PartidoStatus getStatus() { diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java index 2cea881..f373df4 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java @@ -30,23 +30,38 @@ public CrearEquipos(EquiposRepository equiposRepository) { @Override public void run() { - // GRUPO A - this.crearEquipoSiNoExiste("BRA", "Brasil"); - this.crearEquipoSiNoExiste("BOL", "Bolivia"); - this.crearEquipoSiNoExiste("VEN", "Venezuela"); - this.crearEquipoSiNoExiste("PER", "Peru"); - - // GRUPO B - this.crearEquipoSiNoExiste("ARG", "Argentina"); - this.crearEquipoSiNoExiste("COL", "Colombia"); - this.crearEquipoSiNoExiste("PRY", "Paraguay"); this.crearEquipoSiNoExiste("QAT", "Qatar"); - - // GRUPO C - this.crearEquipoSiNoExiste("URY", "Uruguay"); this.crearEquipoSiNoExiste("ECU", "Ecuador"); + this.crearEquipoSiNoExiste("SEN", "Senegal"); + this.crearEquipoSiNoExiste("NLD", "Netherlands"); + this.crearEquipoSiNoExiste("GB-ENG", "England"); + this.crearEquipoSiNoExiste("IRN", "Iran"); + this.crearEquipoSiNoExiste("GB-WLS", "Wales"); + this.crearEquipoSiNoExiste("ARG", "Argentina"); + this.crearEquipoSiNoExiste("SAU", "Saudi Arabia"); + this.crearEquipoSiNoExiste("MEX", "Mexico"); + this.crearEquipoSiNoExiste("POL", "Poland"); + this.crearEquipoSiNoExiste("FRA", "France"); + this.crearEquipoSiNoExiste("AUS", "Australia"); + this.crearEquipoSiNoExiste("DNK", "Denmark"); + this.crearEquipoSiNoExiste("TUN", "Tunisia"); + this.crearEquipoSiNoExiste("SPA", "Spain"); + this.crearEquipoSiNoExiste("CRI", "Costa Rica"); + this.crearEquipoSiNoExiste("GER", "Germany"); this.crearEquipoSiNoExiste("JPN", "Japan"); - this.crearEquipoSiNoExiste("CHL", "Chile"); + this.crearEquipoSiNoExiste("BEL", "Belgium"); + this.crearEquipoSiNoExiste("CAN", "Canada"); + this.crearEquipoSiNoExiste("MAR", "Morocco"); + this.crearEquipoSiNoExiste("HRV", "Croatia"); + this.crearEquipoSiNoExiste("BRA", "Brazil"); + this.crearEquipoSiNoExiste("SRB", "Serbia"); + this.crearEquipoSiNoExiste("CHE", "Switzerland"); + this.crearEquipoSiNoExiste("CMR", "Cameroon"); + this.crearEquipoSiNoExiste("POR", "Portugal"); + this.crearEquipoSiNoExiste("GHA", "Ghana"); + this.crearEquipoSiNoExiste("URY", "Uruguay"); + this.crearEquipoSiNoExiste("KOR", "South Korea"); + this.crearEquipoSiNoExiste("USA", "USA"); } private String getLogo(String codigo) { diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java index 782e9b3..d5cc8db 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java @@ -39,6 +39,12 @@ public void run() { this.crearGrupoSiNoExiste(Grupo.GRUPO_A, this.crearGrupo(Grupo.GRUPO_A, "Group A")); this.crearGrupoSiNoExiste(Grupo.GRUPO_B, this.crearGrupo(Grupo.GRUPO_B, "Group B")); + this.crearGrupoSiNoExiste(Grupo.GRUPO_C, this.crearGrupo(Grupo.GRUPO_C, "Group C")); + this.crearGrupoSiNoExiste(Grupo.GRUPO_D, this.crearGrupo(Grupo.GRUPO_D, "Group D")); + this.crearGrupoSiNoExiste(Grupo.GRUPO_E, this.crearGrupo(Grupo.GRUPO_E, "Group E")); + this.crearGrupoSiNoExiste(Grupo.GRUPO_F, this.crearGrupo(Grupo.GRUPO_F, "Group F")); + this.crearGrupoSiNoExiste(Grupo.GRUPO_G, this.crearGrupo(Grupo.GRUPO_G, "Group G")); + this.crearGrupoSiNoExiste(Grupo.GRUPO_H, this.crearGrupo(Grupo.GRUPO_H, "Group H")); this.crearGrupoSiNoExiste(Grupo.NONE, this.crearGrupo(Grupo.NONE, "None")); } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java index 14f9733..cbc4517 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java @@ -74,19 +74,19 @@ protected Partido map(PartidoData partidoData) { } private Equipo getEquipo(String codigoLocal) { - return this.equiposRepository.findByCodigo(codigoLocal) - .orElseThrow(() -> new IllegalArgumentException("El equipo " + codigoLocal + "no existe")); + return this.equiposRepository.findByCodigo(codigoLocal.trim()) + .orElseThrow(() -> new IllegalArgumentException("El equipo " + codigoLocal + " no existe")); } private Grupo getGrupo(String codigo) { logger.info(codigo); return this.grupoRepository.findByCodigo(codigo) - .orElseThrow(() -> new IllegalArgumentException("El grupo " + codigo + "no existe")); + .orElseThrow(() -> new IllegalArgumentException("El grupo " + codigo + " no existe")); } private Fase getFase(String codigo) { return this.faseRepository.findByCodigo(codigo) - .orElseThrow(() -> new IllegalArgumentException("La fase " + codigo + "no existe")); + .orElseThrow(() -> new IllegalArgumentException("La fase " + codigo + " no existe")); } diff --git a/packages/openscore-core-quarkus/src/main/resources/application.properties b/packages/openscore-core-quarkus/src/main/resources/application.properties index 0bf3c62..d055931 100644 --- a/packages/openscore-core-quarkus/src/main/resources/application.properties +++ b/packages/openscore-core-quarkus/src/main/resources/application.properties @@ -3,5 +3,6 @@ quarkus.datasource.username=postgres quarkus.datasource.password=0p3nsc0r3 quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/postgres quarkus.datasource.jdbc.max-size=16 -quarkus.hibernate-orm.log.sql=true +quarkus.hibernate-orm.log.sql=false quarkus.hibernate-orm.database.generation=drop-and-create +quarkus.hibernate-orm.jdbc.timezone=UTC \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml b/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml index 20db0d9..bbec548 100644 --- a/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml +++ b/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml @@ -1,141 +1,336 @@ ---- -- local: BRA - visitante: VEN +- fecha: 1 + dia: 20-11-22T16:0+0300 + lugar: Al Bayt Stadium + local: QAT + visitante: ECU grupo: GRUPO_A - lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 13-06-2023T18:00-0300 - fecha: "1" fase: GRUPO -- local: COL - visitante: ECU +- fecha: 1 + dia: 21-11-22T13:0+0300 + lugar: Khalifa International Stadium + local: GB-ENG + visitante: IRN + grupo: GRUPO_B + fase: GRUPO +- fecha: 1 + dia: 21-11-22T16:0+0300 + lugar: Al Thumama Stadium + local: SEN + visitante: NLD grupo: GRUPO_A - lugar: CUIABÁ, ARENA PANTANAL - dia: 13-06-2021T21:00-0300 - fecha: "1" fase: GRUPO -- local: ARG - visitante: CHL +- fecha: 1 + dia: 21-11-22T19:0+0300 + lugar: Ahmad Bin Ali Stadium + local: USA + visitante: GB-WLS grupo: GRUPO_B - lugar: RIO DE JANEIRO, ESTADIO OLIMPICO - dia: 14-06-2021T18:00-0300 - fecha: "1" fase: GRUPO -- local: PRY - visitante: BOL +- fecha: 1 + dia: 22-11-22T10:0+0300 + lugar: Lusail Stadium + local: ARG + visitante: SAU + grupo: GRUPO_C + fase: GRUPO +- fecha: 1 + dia: 22-11-22T13:0+0300 + lugar: Education City Stadium + local: DNK + visitante: TUN + grupo: GRUPO_D + fase: GRUPO +- fecha: 1 + dia: 22-11-22T16:0+0300 + lugar: Stadium 974 + local: MEX + visitante: POL + grupo: GRUPO_C + fase: GRUPO +- fecha: 1 + dia: 22-11-22T19:0+0300 + lugar: Al Janoub Stadium + local: FRA + visitante: AUS + grupo: GRUPO_D + fase: GRUPO +- fecha: 1 + dia: 23-11-22T10:0+0300 + lugar: Al Bayt Stadium + local: MAR + visitante: HRV + grupo: GRUPO_F + fase: GRUPO +- fecha: 1 + dia: 23-11-22T13:0+0300 + lugar: Khalifa International Stadium + local: GER + visitante: JPN + grupo: GRUPO_E + fase: GRUPO +- fecha: 1 + dia: 23-11-22T16:0+0300 + lugar: Al Thumama Stadium + local: SPA + visitante: CRI + grupo: GRUPO_E + fase: GRUPO +- fecha: 1 + dia: 23-11-22T19:0+0300 + lugar: Ahmad Bin Ali Stadium + local: BEL + visitante: CAN + grupo: GRUPO_F + fase: GRUPO +- fecha: 1 + dia: 24-11-22T10:0+0300 + lugar: Al Janoub Stadium + local: CHE + visitante: CMR + grupo: GRUPO_G + fase: GRUPO +- fecha: 1 + dia: 24-11-22T13:0+0300 + lugar: Education City Stadium + local: URY + visitante: KOR + grupo: GRUPO_H + fase: GRUPO +- fecha: 1 + dia: 24-11-22T16:0+0300 + lugar: Stadium 974 + local: POR + visitante: GHA + grupo: GRUPO_H + fase: GRUPO +- fecha: 1 + dia: 24-11-22T19:0+0300 + lugar: Lusail Stadium + local: BRA + visitante: SRB + grupo: GRUPO_G + fase: GRUPO +- fecha: 2 + dia: 25-11-22T10:0+0300 + lugar: Ahmad Bin Ali Stadium + local: GB-WLS + visitante: IRN grupo: GRUPO_B - lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO - dia: 14-06-2021T21:00-0300 - fecha: "1" fase: GRUPO -- local: COL - visitante: VEN +- fecha: 2 + dia: 25-11-22T13:0+0300 + lugar: Al Thumama Stadium + local: QAT + visitante: SEN grupo: GRUPO_A - lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO - dia: 17-06-2021T18:00-0300 - fecha: "2" fase: GRUPO -- local: BRA - visitante: PER +- fecha: 2 + dia: 25-11-22T16:0+0300 + lugar: Khalifa International Stadium + local: NLD + visitante: ECU grupo: GRUPO_A - lugar: RIO DE JANEIRO, ESTADIO OLIMPICO - dia: 17-06-2021T21:00-0300 - fecha: "2" fase: GRUPO -- local: CHL - visitante: BOL +- fecha: 2 + dia: 25-11-22T19:0+0300 + lugar: Al Bayt Stadium + local: GB-ENG + visitante: USA grupo: GRUPO_B - lugar: CUIABÁ, ARENA PANTANAL - dia: 18-06-2021T18:00-0300 - fecha: "2" fase: GRUPO -- local: ARG +- fecha: 2 + dia: 26-11-22T10:0+0300 + lugar: Al Janoub Stadium + local: TUN + visitante: AUS + grupo: GRUPO_D + fase: GRUPO +- fecha: 2 + dia: 26-11-22T13:0+0300 + lugar: Education City Stadium + local: POL + visitante: SAU + grupo: GRUPO_C + fase: GRUPO +- fecha: 2 + dia: 26-11-22T16:0+0300 + lugar: Stadium 974 + local: FRA + visitante: DNK + grupo: GRUPO_D + fase: GRUPO +- fecha: 2 + dia: 26-11-22T19:0+0300 + lugar: Lusail Stadium + local: ARG + visitante: MEX + grupo: GRUPO_C + fase: GRUPO +- fecha: 2 + dia: 27-11-22T10:0+0300 + lugar: Ahmad Bin Ali Stadium + local: JPN + visitante: CRI + grupo: GRUPO_E + fase: GRUPO +- fecha: 2 + dia: 27-11-22T13:0+0300 + lugar: Al Thumama Stadium + local: BEL + visitante: MAR + grupo: GRUPO_F + fase: GRUPO +- fecha: 2 + dia: 27-11-22T16:0+0300 + lugar: Khalifa International Stadium + local: HRV + visitante: CAN + grupo: GRUPO_F + fase: GRUPO +- fecha: 2 + dia: 27-11-22T19:0+0300 + lugar: Al Bayt Stadium + local: SPA + visitante: GER + grupo: GRUPO_E + fase: GRUPO +- fecha: 2 + dia: 28-11-22T10:0+0300 + lugar: Al Janoub Stadium + local: CMR + visitante: SRB + grupo: GRUPO_G + fase: GRUPO +- fecha: 2 + dia: 28-11-22T13:0+0300 + lugar: Education City Stadium + local: KOR + visitante: GHA + grupo: GRUPO_H + fase: GRUPO +- fecha: 2 + dia: 28-11-22T16:0+0300 + lugar: Stadium 974 + local: BRA + visitante: CHE + grupo: GRUPO_G + fase: GRUPO +- fecha: 2 + dia: 28-11-22T19:0+0300 + lugar: Lusail Stadium + local: POR visitante: URY - grupo: GRUPO_B - lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 18-06-2021T21:00-0300 - fecha: "2" + grupo: GRUPO_H fase: GRUPO -- local: VEN - visitante: ECU +- fecha: 3 + dia: 29-11-22T15:0+0300 + lugar: Khalifa International Stadium + local: ECU + visitante: SEN grupo: GRUPO_A - lugar: RIO DE JANEIRO, ESTADIO OLIMPICO - dia: 20-06-2021T18:00-0300 - fecha: "3" fase: GRUPO -- local: COL - visitante: PER +- fecha: 3 + dia: 29-11-22T15:0+0300 + lugar: Al Bayt Stadium + local: NLD + visitante: QAT grupo: GRUPO_A - lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO - dia: 20-06-2021T21:00-0300 - fecha: "3" fase: GRUPO -- local: URY - visitante: CHL +- fecha: 3 + dia: 29-11-22T19:0+0300 + lugar: Ahmad Bin Ali Stadium + local: GB-WLS + visitante: GB-ENG grupo: GRUPO_B - lugar: CUIABÁ, ARENA PANTANAL - dia: 21-06-2021T18:00-0300 - fecha: "3" fase: GRUPO -- local: ARG - visitante: PRY +- fecha: 3 + dia: 29-11-22T19:0+0300 + lugar: Al Thumama Stadium + local: IRN + visitante: USA grupo: GRUPO_B - lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 21-06-2021T21:00-0300 - fecha: "3" fase: GRUPO -- local: ECU - visitante: PER - grupo: GRUPO_A - lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO - dia: 23-06-2021T18:00-0300 - fecha: "4" +- fecha: 3 + dia: 30-11-22T15:0+0300 + lugar: Al Janoub Stadium + local: AUS + visitante: DNK + grupo: GRUPO_D fase: GRUPO -- local: BRA - visitante: COL - grupo: GRUPO_A - lugar: RIO DE JANEIRO, ESTADIO OLIMPICO - dia: 23-06-2021T21:00-0300 - fecha: "4" +- fecha: 3 + dia: 30-11-22T15:0+0300 + lugar: Education City Stadium + local: TUN + visitante: FRA + grupo: GRUPO_D fase: GRUPO -- local: BOL - visitante: URY - grupo: GRUPO_B - lugar: CUIABÁ, ARENA PANTANAL - dia: 24-06-2021T18:00-0300 - fecha: "4" +- fecha: 3 + dia: 30-11-22T19:0+0300 + lugar: Stadium 974 + local: POL + visitante: ARG + grupo: GRUPO_C fase: GRUPO -- local: CHL - visitante: PRY - grupo: GRUPO_B - lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 24-06-2021T21:00-0300 - fecha: "4" +- fecha: 3 + dia: 30-11-22T19:0+0300 + lugar: Lusail Stadium + local: SAU + visitante: MEX + grupo: GRUPO_C fase: GRUPO -- local: BRA - visitante: ECU - grupo: GRUPO_A - lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO - dia: 27-06-2021T18:00-0300 - fecha: "5" +- fecha: 3 + dia: 12-1-22T15:0+0300 + lugar: Ahmad Bin Ali Stadium + local: HRV + visitante: BEL + grupo: GRUPO_F fase: GRUPO -- local: VEN - visitante: PER - grupo: GRUPO_A - lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 27-06-2021T18:00-0300 - fecha: "5" +- fecha: 3 + dia: 12-1-22T15:0+0300 + lugar: Al Thumama Stadium + local: CAN + visitante: MAR + grupo: GRUPO_F fase: GRUPO -- local: URY - visitante: PRY - grupo: GRUPO_B - lugar: RIO DE JANEIRO, ESTADIO OLIMPICO - dia: 28-06-2021T21:00-0300 - fecha: "5" +- fecha: 3 + dia: 12-1-22T19:0+0300 + lugar: Khalifa International Stadium + local: JPN + visitante: SPA + grupo: GRUPO_E fase: GRUPO -- local: BOL - visitante: ARG - grupo: GRUPO_B - lugar: CUIABÁ, ARENA PANTANAL - dia: 28-06-2021T21:00-0300 - fecha: "5" +- fecha: 3 + dia: 12-1-22T19:0+0300 + lugar: Al Bayt Stadium + local: CRI + visitante: GER + grupo: GRUPO_E + fase: GRUPO +- fecha: 3 + dia: 12-2-22T15:0+0300 + lugar: Al Janoub Stadium + local: GHA + visitante: URY + grupo: GRUPO_H + fase: GRUPO +- fecha: 3 + dia: 12-2-22T15:0+0300 + lugar: Education City Stadium + local: KOR + visitante: POR + grupo: GRUPO_H + fase: GRUPO +- fecha: 3 + dia: 12-2-22T19:0+0300 + lugar: Stadium 974 + local: SRB + visitante: CHE + grupo: GRUPO_G + fase: GRUPO +- fecha: 3 + dia: 12-2-22T19:0+0300 + lugar: Lusail Stadium + local: CMR + visitante: BRA + grupo: GRUPO_G fase: GRUPO diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx index 64263e0..1999c21 100644 --- a/packages/openscore-nextjs/pages/forecast/index.tsx +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -1,24 +1,30 @@ import Link from "next/link"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; -import { SetterOrUpdater, useRecoilState } from "recoil"; +import { SetterOrUpdater, useRecoilValue, useSetRecoilState } from "recoil"; import EmptyScreen from "../../components/EmptyScreen"; import { layout } from "../../components/layout/MainLayout"; import LoadingScreen from "../../components/LoadingScreen"; import MatchCard from "../../components/MatchCard"; import { Partido } from "../../model/Partido"; import { PronosticoService } from "../../services/PronosticoService"; -import { forecastListState } from "../../states/ForecastState"; +import { + ForecastFilter, + forecastFilterState, + forecastListState, +} from "../../states/ForecastState"; import { NextPageWithLayout } from "../_app"; const filters = [ { - name: "Today", - link: "today", + name: "All", + link: "all", + filter: ForecastFilter.ALL, }, { - name: "Remaining", - link: "remaining", + name: "Today", + link: "today", + filter: ForecastFilter.TODAY, }, ]; @@ -45,14 +51,20 @@ const getLink = (link: string) => `/forecast?filter=${link}`; const Forecasts: NextPageWithLayout = () => { const router = useRouter(); - const [forecast, setForecast] = useRecoilState(forecastListState); + const filteredForecast = useRecoilValue(forecastListState); + const setFilter = useSetRecoilState(forecastFilterState); + const setForecast = useSetRecoilState(forecastListState); + const [busy, setBusy] = useState(false); - const { filter } = router.query; - const path = router.asPath; + const filter = filters.find((f) => f.link === router.query["filter"]); useEffect(() => { + if (router.query["filter"] === undefined) { + router.push(`/forecast?filter=all`); + } + setFilter(filter?.filter || ForecastFilter.ALL); refresh(setForecast, setBusy); - }, [filter, setForecast]); + }, [setForecast, filter]); return (
                @@ -78,9 +90,9 @@ const Forecasts: NextPageWithLayout = () => {
                - +
                - {forecast.map((f) => ( + {filteredForecast.map((f) => ( [], }); + +export const forecastFilterState = atom({ + key: "FilterForecastList", + default: ForecastFilter.ALL, +}); + +export const filteredForecastState = selector({ + key: "FilteredForecastList", + get: ({ get }) => { + const forecastList = get(forecastListState); + const filter = get(forecastFilterState); + + console.log(filter); + switch (filter) { + case ForecastFilter.TODAY: + forecastList.filter( + (partido) => new Date(partido.dia).getDate() === new Date().getDate() + ); + default: + forecastList; + } + }, +}); From 96e859d6cc78aed445f21bcdbb1ad52088ddd02b Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Tue, 11 Oct 2022 11:36:45 -0300 Subject: [PATCH 14/28] Se elimina el core y se agregan todos los partidos con las fechas corregidas --- .../api/partidos/CrearOUpdatePartidoDTO.java | 8 +- .../openscore/core/mapping/DateMapper.java | 12 +- .../openscore/core/model/Partido.java | 13 +- .../startup/builder/DiaBuilder.java | 6 +- .../startup/builder/DiaBuilderImpl.java | 21 +- .../startup/builder/TestDiaBuilder.java | 30 +- .../services/impl/PartidosServiceImpl.java | 43 +-- .../src/main/resources/data/partidos.yml | 96 +++--- packages/openscore-core/Dockerfile | 8 - packages/openscore-core/Jenkinsfile | 75 ---- packages/openscore-core/build.sh | 6 - packages/openscore-core/deploy.sh | 4 - packages/openscore-core/package.json | 12 - packages/openscore-core/pom.xml | 319 ------------------ packages/openscore-core/prepare.sh | 10 - .../main/docker/customization/commands.cli | 11 - .../src/main/docker/customization/execute.sh | 33 -- .../org/postgresql/jdbc/main/42.2.2.version | 0 .../org/postgresql/jdbc/main/module.xml | 11 - .../environment/dev/META-INF/persistence.xml | 25 -- .../main/environment/dev/WEB-INF/beans.xml | 6 - .../openshift/META-INF/persistence.xml | 15 - .../environment/openshift/WEB-INF/beans.xml | 6 - .../openscore/core/OpenScoreApplication.java | 9 - .../openscore/core/api/ApiResponse.java | 35 -- .../openscore/core/api/ImagenApi.java | 32 -- .../semantic/openscore/core/api/TokenDTO.java | 18 - .../core/api/admin/UsuarioCompletoDTO.java | 87 ----- .../CrearDefinicionCompeticionDTO.java | 33 -- .../DefinicionCompeticionDTO.java | 34 -- .../core/api/equipos/CrearEquipoDTO.java | 41 --- .../openscore/core/api/equipos/EquipoDTO.java | 52 --- .../openscore/core/api/grupos/FaseDTO.java | 23 -- .../openscore/core/api/grupos/GrupoDTO.java | 23 -- .../core/api/information/Information.java | 35 -- .../openscore/core/api/paises/PaisDTO.java | 23 -- .../api/partidos/CrearOUpdatePartidoDTO.java | 70 ---- .../core/api/partidos/PartidoDTO.java | 101 ------ .../core/api/partidos/ResultadoDTO.java | 23 -- .../openscore/core/api/post/CrearPost.java | 32 -- .../api/pronosticos/CrearPronosticoDTO.java | 42 --- .../api/pronosticos/PartidoPronosticoDTO.java | 16 - .../core/api/pronosticos/PronosticoDTO.java | 49 --- .../openscore/core/api/ranking/Ranking.java | 50 --- .../core/api/usuarios/CrearUsuarioDTO.java | 100 ------ .../core/api/usuarios/LoginUsuarioDTO.java | 23 -- .../core/api/usuarios/RecoverPassword.java | 60 ---- .../core/api/usuarios/UpdatePassword.java | 47 --- .../api/usuarios/UpdateSecretQuestion.java | 42 --- .../core/api/usuarios/UpdateUsuarioDTO.java | 46 --- .../core/api/usuarios/UsuarioDTO.java | 69 ---- .../openscore/core/cache/TokenCache.java | 46 --- .../openscore/core/email/FSMailProvider.java | 34 -- .../openscore/core/email/MailFactory.java | 14 - .../openscore/core/email/MailProvider.java | 6 - .../openscore/core/email/MailServer.java | 30 -- .../openscore/core/email/MailTemplate.java | 38 --- .../openscore/core/email/SMTPProvider.java | 34 -- .../core/email/StdoutMailSender.java | 22 -- .../core/exceptions/ApplicationException.java | 14 - .../core/exceptions/EmailException.java | 7 - .../exceptions/EntityNotFoundException.java | 8 - .../NoSePuedeLeerInformacionException.java | 8 - .../exceptions/PartidoBloqueadoException.java | 9 - .../core/exceptions/ValidationException.java | 44 --- .../openscore/core/logging/BaseLogger.java | 24 -- .../openscore/core/logging/ServiceLogger.java | 11 - .../openscore/core/mapping/EquipoMapper.java | 21 -- .../openscore/core/mapping/FaseMapper.java | 16 - .../openscore/core/mapping/GrupoMapper.java | 15 - .../openscore/core/mapping/PaisMapper.java | 18 - .../openscore/core/mapping/PartidoMapper.java | 20 -- .../core/mapping/PronosticoMapper.java | 36 -- .../openscore/core/mapping/UsuarioMapper.java | 37 -- .../semantic/openscore/core/model/Equipo.java | 47 --- .../semantic/openscore/core/model/Fase.java | 42 --- .../openscore/core/model/Ganador.java | 8 - .../semantic/openscore/core/model/Grupo.java | 36 -- .../semantic/openscore/core/model/Pais.java | 48 --- .../openscore/core/model/Partido.java | 132 -------- .../openscore/core/model/PartidoStatus.java | 5 - .../semantic/openscore/core/model/Post.java | 51 --- .../openscore/core/model/PostStatus.java | 5 - .../openscore/core/model/PreguntaSecreta.java | 28 -- .../openscore/core/model/Pronostico.java | 91 ----- .../core/model/RespuestaPreguntaSecreta.java | 29 -- .../openscore/core/model/Resultado.java | 53 --- .../io/semantic/openscore/core/model/Rol.java | 7 - .../openscore/core/model/Storable.java | 67 ---- .../openscore/core/model/Usuario.java | 112 ------ .../core/repository/EquiposRepository.java | 40 --- .../core/repository/FaseRepository.java | 40 --- .../core/repository/GrupoRepository.java | 41 --- .../openscore/core/repository/Page.java | 22 -- .../core/repository/PaisRepository.java | 39 --- .../core/repository/PartidoRepository.java | 110 ------ .../core/repository/PostRepository.java | 29 -- .../repository/PreguntaSecretaRepository.java | 25 -- .../core/repository/PronosticoRepository.java | 65 ---- .../openscore/core/repository/Repository.java | 171 ---------- .../openscore/core/repository/Sort.java | 10 - .../core/repository/UsuarioRepository.java | 51 --- .../core/repository/startup/PartidoData.java | 68 ---- .../repository/startup/StartupManager.java | 46 --- .../core/repository/startup/StartupStep.java | 12 - .../startup/builder/DiaBuilder.java | 10 - .../startup/builder/DiaBuilderImpl.java | 25 -- .../startup/builder/TestDiaBuilder.java | 25 -- .../startup/steps/CrearEquipos.java | 64 ---- .../startup/steps/CrearGruposYFases.java | 77 ----- .../repository/startup/steps/CrearPaises.java | 60 ---- .../startup/steps/CrearPartidos.java | 93 ----- .../startup/steps/CrearPreguntaSecreta.java | 47 --- .../startup/steps/CrearUsuarioAdmin.java | 85 ----- .../startup/steps/FileBasedStartupStep.java | 67 ---- .../startup/steps/PreguntaSecretaData.java | 27 -- .../openscore/core/security/Secure.java | 17 - .../openscore/core/security/SecureFilter.java | 75 ---- .../core/security/TokenGenerator.java | 133 -------- .../openscore/core/services/RestUtil.java | 18 - .../openscore/core/services/UserInfo.java | 28 -- .../core/services/api/AdminService.java | 16 - .../api/DefinicionCompeticionesService.java | 45 --- .../core/services/api/EquiposService.java | 19 -- .../core/services/api/FasesService.java | 15 - .../core/services/api/GetService.java | 16 - .../core/services/api/GruposService.java | 14 - .../core/services/api/InformationService.java | 27 -- .../core/services/api/PaisesService.java | 16 - .../core/services/api/PartidosService.java | 50 --- .../core/services/api/PostService.java | 30 -- .../core/services/api/PronosticosService.java | 65 ---- .../core/services/api/RankingService.java | 24 -- .../core/services/api/SearchService.java | 19 -- .../core/services/api/StandardService.java | 26 -- .../core/services/api/UsuariosService.java | 61 ---- .../filters/ApplicationExceptionMapper.java | 38 --- .../core/services/filters/CorsFilter.java | 35 -- .../core/services/filters/LoggerFilter.java | 28 -- .../filters/RuntimeExceptionMapper.java | 25 -- .../core/services/impl/AdminServiceImpl.java | 40 --- .../services/impl/EquiposServiceImpl.java | 106 ------ .../core/services/impl/FasesServiceImpl.java | 42 --- .../core/services/impl/GruposServiceImpl.java | 43 --- .../services/impl/InformationServiceImpl.java | 54 --- .../core/services/impl/PaisesServiceImpl.java | 39 --- .../services/impl/PartidosServiceImpl.java | 145 -------- .../core/services/impl/PostServiceImpl.java | 100 ------ .../services/impl/PronosticosServiceImpl.java | 228 ------------- .../services/impl/RankingServiceImpl.java | 97 ------ .../services/impl/UsuariosServiceImpl.java | 236 ------------- .../core/template/TemplateEngine.java | 35 -- .../template/TemplateEngineException.java | 9 - .../openscore/core/util/JsonConverter.java | 10 - .../core/validation/ApplicationValidator.java | 41 --- .../core/validation/annotations/Matches.java | 36 -- .../core/validation/annotations/Password.java | 26 -- .../validation/validators/EmailValidator.java | 6 - .../validators/MatchesValidator.java | 47 --- .../validators/PasswordValidator.java | 37 -- .../validators/RedHatEmailValidator.java | 9 - .../resources/ValidationMessages.properties | 2 - .../src/main/resources/configmap.properties | 6 - .../src/main/resources/data/partidos.yml | 141 -------- .../src/main/resources/data/preguntas.yml | 7 - .../src/main/resources/infinispan.xml | 13 - .../src/main/resources/info.properties | 2 - .../src/main/resources/logback.xml | 21 -- .../src/main/resources/templates/recover.html | 210 ------------ .../src/main/webapp/WEB-INF/jboss-web.xml | 3 - .../openscore/core/model/UsuarioTest.java | 69 ---- .../core/repository/PaisRepositoryTest.java | 33 -- .../core/repository/RepositoryBaseTest.java | 39 --- .../core/repository/RepositoryTest.java | 120 ------- .../openscore/core/repository/TestObject.java | 26 -- .../core/repository/TestRepository.java | 19 -- .../repository/UsuarioRepositoryTest.java | 49 --- .../core/security/GenerateToken.java | 27 -- .../core/security/TokenGeneratorTest.java | 57 ---- .../impl/UsuariosServiceImplTest.java | 149 -------- .../test/resources/META-INF/persistence.xml | 24 -- .../src/test/resources/docker/Dockerfile | 4 - .../test/resources/docker/docker-compose.yml | 9 - packages/openscore-core/wildfly.sh | 3 - .../openscore-nextjs/components/MatchCard.tsx | 1 + 185 files changed, 129 insertions(+), 7738 deletions(-) delete mode 100755 packages/openscore-core/Dockerfile delete mode 100644 packages/openscore-core/Jenkinsfile delete mode 100755 packages/openscore-core/build.sh delete mode 100755 packages/openscore-core/deploy.sh delete mode 100644 packages/openscore-core/package.json delete mode 100644 packages/openscore-core/pom.xml delete mode 100755 packages/openscore-core/prepare.sh delete mode 100644 packages/openscore-core/src/main/docker/customization/commands.cli delete mode 100755 packages/openscore-core/src/main/docker/customization/execute.sh delete mode 100644 packages/openscore-core/src/main/docker/modules/org/postgresql/jdbc/main/42.2.2.version delete mode 100644 packages/openscore-core/src/main/docker/modules/org/postgresql/jdbc/main/module.xml delete mode 100644 packages/openscore-core/src/main/environment/dev/META-INF/persistence.xml delete mode 100644 packages/openscore-core/src/main/environment/dev/WEB-INF/beans.xml delete mode 100644 packages/openscore-core/src/main/environment/openshift/META-INF/persistence.xml delete mode 100644 packages/openscore-core/src/main/environment/openshift/WEB-INF/beans.xml delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/OpenScoreApplication.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ApiResponse.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ImagenApi.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/TokenDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/admin/UsuarioCompletoDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/competiciones/CrearDefinicionCompeticionDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/competiciones/DefinicionCompeticionDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/equipos/CrearEquipoDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/equipos/EquipoDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/grupos/FaseDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/grupos/GrupoDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/information/Information.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/paises/PaisDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/post/CrearPost.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/CrearPronosticoDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/PartidoPronosticoDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/PronosticoDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ranking/Ranking.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/CrearUsuarioDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/LoginUsuarioDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/RecoverPassword.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdatePassword.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateSecretQuestion.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateUsuarioDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UsuarioDTO.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/cache/TokenCache.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/email/FSMailProvider.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailFactory.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailProvider.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailServer.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailTemplate.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/email/SMTPProvider.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/email/StdoutMailSender.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/ApplicationException.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/EmailException.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/EntityNotFoundException.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/NoSePuedeLeerInformacionException.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/PartidoBloqueadoException.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/ValidationException.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/logging/BaseLogger.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/logging/ServiceLogger.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/EquipoMapper.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/FaseMapper.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/GrupoMapper.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PaisMapper.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/UsuarioMapper.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Equipo.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Fase.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Ganador.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Grupo.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Pais.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Partido.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PartidoStatus.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Post.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PostStatus.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PreguntaSecreta.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Pronostico.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/RespuestaPreguntaSecreta.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Resultado.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Rol.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Storable.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Usuario.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/EquiposRepository.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/FaseRepository.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/GrupoRepository.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Page.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PaisRepository.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PartidoRepository.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PostRepository.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PreguntaSecretaRepository.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PronosticoRepository.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Repository.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Sort.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/UsuarioRepository.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/StartupManager.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/StartupStep.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPaises.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPreguntaSecreta.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearUsuarioAdmin.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/PreguntaSecretaData.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/security/Secure.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/security/SecureFilter.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/security/TokenGenerator.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/RestUtil.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/UserInfo.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/AdminService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/DefinicionCompeticionesService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/FasesService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/GetService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/GruposService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/InformationService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PaisesService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PostService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/RankingService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/SearchService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/StandardService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/UsuariosService.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/ApplicationExceptionMapper.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/CorsFilter.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/LoggerFilter.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/RuntimeExceptionMapper.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/AdminServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/FasesServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/GruposServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/InformationServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PaisesServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PostServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/RankingServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/UsuariosServiceImpl.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/template/TemplateEngine.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/template/TemplateEngineException.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/util/JsonConverter.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/ApplicationValidator.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/annotations/Matches.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/annotations/Password.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/EmailValidator.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/MatchesValidator.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/PasswordValidator.java delete mode 100644 packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/RedHatEmailValidator.java delete mode 100644 packages/openscore-core/src/main/resources/ValidationMessages.properties delete mode 100644 packages/openscore-core/src/main/resources/configmap.properties delete mode 100644 packages/openscore-core/src/main/resources/data/partidos.yml delete mode 100644 packages/openscore-core/src/main/resources/data/preguntas.yml delete mode 100644 packages/openscore-core/src/main/resources/infinispan.xml delete mode 100644 packages/openscore-core/src/main/resources/info.properties delete mode 100644 packages/openscore-core/src/main/resources/logback.xml delete mode 100644 packages/openscore-core/src/main/resources/templates/recover.html delete mode 100644 packages/openscore-core/src/main/webapp/WEB-INF/jboss-web.xml delete mode 100644 packages/openscore-core/src/test/java/io/semantic/openscore/core/model/UsuarioTest.java delete mode 100644 packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/PaisRepositoryTest.java delete mode 100644 packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/RepositoryBaseTest.java delete mode 100644 packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/RepositoryTest.java delete mode 100644 packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/TestObject.java delete mode 100644 packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/TestRepository.java delete mode 100644 packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/UsuarioRepositoryTest.java delete mode 100644 packages/openscore-core/src/test/java/io/semantic/openscore/core/security/GenerateToken.java delete mode 100644 packages/openscore-core/src/test/java/io/semantic/openscore/core/security/TokenGeneratorTest.java delete mode 100644 packages/openscore-core/src/test/java/io/semantic/openscore/core/services/impl/UsuariosServiceImplTest.java delete mode 100644 packages/openscore-core/src/test/resources/META-INF/persistence.xml delete mode 100644 packages/openscore-core/src/test/resources/docker/Dockerfile delete mode 100644 packages/openscore-core/src/test/resources/docker/docker-compose.yml delete mode 100755 packages/openscore-core/wildfly.sh diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java index da94583..c5b7588 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java @@ -1,12 +1,10 @@ package io.semantic.openscore.core.api.partidos; -import java.util.Date; - public class CrearOUpdatePartidoDTO { private String local; private String visitante; - private Date dia; + private long dia; private int fecha; private String lugar; private String grupo; @@ -28,11 +26,11 @@ public void setVisitante(String visitante) { this.visitante = visitante; } - public Date getDia() { + public long getDia() { return dia; } - public void setDia(Date dia) { + public void setDia(long dia) { this.dia = dia; } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/DateMapper.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/DateMapper.java index bf6dfb5..db9bf54 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/DateMapper.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/mapping/DateMapper.java @@ -1,17 +1,19 @@ package io.semantic.openscore.core.mapping; -import java.sql.Date; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneOffset; import org.mapstruct.Mapper; @Mapper(componentModel = "cdi") public class DateMapper { - public Long asNumber(Date date) { - return date.getTime(); + public Long asNumber(LocalDateTime date) { + return date.toInstant(ZoneOffset.UTC).toEpochMilli(); } - public Date asDate(Long date) { - return new Date(date); + public LocalDateTime asDate(Long date) { + return Instant.ofEpochMilli(date).atZone(ZoneOffset.systemDefault()).toLocalDateTime(); } } \ No newline at end of file diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java index c959907..3316ebb 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java @@ -1,7 +1,8 @@ package io.semantic.openscore.core.model; import java.time.Instant; -import java.util.Date; +import java.time.LocalDateTime; +import java.time.ZoneOffset; import javax.persistence.Embedded; import javax.persistence.Entity; @@ -15,7 +16,7 @@ public class Partido extends Storable { @ManyToOne private Equipo visitante; - private Date dia; + private LocalDateTime dia; private String lugar; private int fecha; @@ -44,11 +45,11 @@ public void setVisitante(Equipo visitante) { this.visitante = visitante; } - public Date getDia() { + public LocalDateTime getDia() { return dia; } - public void setDia(Date dia) { + public void setDia(LocalDateTime dia) { this.dia = dia; } @@ -110,8 +111,8 @@ private int calcularPuntos() { } public boolean isBloqueado() { - System.out.println(this.getDia().getTime()); - return this.getDia().getTime() <= Instant.now().toEpochMilli() + 900000; + System.out.println(this.getDia().toInstant(ZoneOffset.UTC).toEpochMilli()); + return this.getDia().toInstant(ZoneOffset.UTC).toEpochMilli() <= Instant.now().toEpochMilli() + 900000; } public PartidoStatus getStatus() { diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java index fa54471..6c3e1a2 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java @@ -1,10 +1,12 @@ package io.semantic.openscore.core.repository.startup.builder; -import java.util.Date; +import java.time.LocalDateTime; public interface DiaBuilder { public static final String DATE_PATTERN = "dd-MM-yyyy'T'HH:mmZ"; - Date getMatchDate(String fecha); + LocalDateTime getMatchDate(String fecha); + + LocalDateTime epochToDate(long date); } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java index 4ab89ca..fa8624d 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java @@ -2,27 +2,42 @@ import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Date; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; import javax.enterprise.context.ApplicationScoped; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + @ApplicationScoped public class DiaBuilderImpl implements DiaBuilder { private SimpleDateFormat simpleDateFormat; + private Logger logger = LoggerFactory.getLogger(DiaBuilder.class); + public DiaBuilderImpl() { simpleDateFormat = new SimpleDateFormat(DATE_PATTERN); } - public Date getMatchDate(String fecha) { + public LocalDateTime getMatchDate(String fecha) { try { - return simpleDateFormat.parse(fecha); + LocalDateTime date = simpleDateFormat.parse(fecha).toInstant().atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + logger.info("{}", date); + return date; } catch (ParseException e) { e.printStackTrace(); return null; } } + + public LocalDateTime epochToDate(long date) { + return Instant.ofEpochMilli(date).atOffset(ZoneOffset.UTC).toLocalDateTime(); + } } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java index 8e982fe..a85edeb 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java @@ -1,12 +1,12 @@ package io.semantic.openscore.core.repository.startup.builder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.time.LocalDateTime; +import java.util.Random; import javax.enterprise.inject.Alternative; -import java.util.Calendar; -import java.util.Date; -import java.util.Random; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @Alternative public class TestDiaBuilder implements DiaBuilder { @@ -15,11 +15,19 @@ public class TestDiaBuilder implements DiaBuilder { private static final long ONE_MINUTE_IN_MILLIS = 60000; private Random random = new Random(); - public Date getMatchDate(String fecha) { - Calendar date = Calendar.getInstance(); - long t = date.getTimeInMillis(); - Date afterAddingTenMins = new Date(t + (random.nextInt(8 * 60) * ONE_MINUTE_IN_MILLIS)); - logger.info(afterAddingTenMins.toString()); - return afterAddingTenMins; + public LocalDateTime getMatchDate(String fecha) { + // Calendar date = Calendar.getInstance(); + // long t = date.getTimeInMillis(); + // Date afterAddingTenMins = new Date(t + (random.nextInt(8 * 60) * + // ONE_MINUTE_IN_MILLIS)); + // logger.info(afterAddingTenMins.toString()); + // return afterAddingTenMins; + return null; + } + + @Override + public LocalDateTime epochToDate(long date) { + // TODO Auto-generated method stub + return null; } } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java index 012c673..5cc3d5a 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java @@ -22,49 +22,51 @@ import io.semantic.openscore.core.repository.FaseRepository; import io.semantic.openscore.core.repository.GrupoRepository; import io.semantic.openscore.core.repository.PartidoRepository; +import io.semantic.openscore.core.repository.startup.builder.DiaBuilder; import io.semantic.openscore.core.security.Secure; import io.semantic.openscore.core.services.api.PartidosService; @ApplicationScoped public class PartidosServiceImpl implements PartidosService { - private PartidoRepository partidoRepository; private EquiposRepository equiposRepository; private GrupoRepository grupoRepository; private FaseRepository faseRepository; private PartidoMapper partidoMapper; + private DiaBuilder diaBuilder; public PartidosServiceImpl() { } @Inject public PartidosServiceImpl(final PartidoRepository partidoRepository, - final EquiposRepository equiposRepository, - final GrupoRepository grupoRepository, - final FaseRepository faseRepository, - final PartidoMapper partidoMapper) { + final EquiposRepository equiposRepository, + final GrupoRepository grupoRepository, + final FaseRepository faseRepository, + final PartidoMapper partidoMapper, + final DiaBuilder diaBuilder) { this.partidoRepository = partidoRepository; this.equiposRepository = equiposRepository; this.grupoRepository = grupoRepository; this.faseRepository = faseRepository; this.partidoMapper = partidoMapper; + this.diaBuilder = diaBuilder; } @Override public ApiResponse> getAll(int page, - int pageSize, - String grupo, - String fase, - long dia, - String equipo) { + int pageSize, + String grupo, + String fase, + long dia, + String equipo) { this.partidoRepository.findAll(); List partidos = this.partidoRepository.findAll(); return ok(this.partidoMapper.asApi(partidos)); } - @Override public ApiResponse get(long id) { Partido partido = getPartido(id); @@ -103,23 +105,23 @@ private Partido crearPartido(long id, CrearOUpdatePartidoDTO entity) { partido.setGrupo(this.getGrupo(entity.getGrupo())); partido.setFase(this.getFase(entity.getFase())); partido.setLugar(entity.getLugar()); - partido.setDia(entity.getDia()); + partido.setDia(diaBuilder.epochToDate(entity.getDia())); return partido; } private Equipo getEquipo(String codigo) { - return this.equiposRepository.findByCodigo(codigo).orElseThrow(() -> - new IllegalArgumentException(MessageFormat.format("Equipo con codigo [{0}] no encontrado", codigo))); + return this.equiposRepository.findByCodigo(codigo).orElseThrow(() -> new IllegalArgumentException( + MessageFormat.format("Equipo con codigo [{0}] no encontrado", codigo))); } private Grupo getGrupo(String codigo) { - return this.grupoRepository.findByCodigo(codigo).orElseThrow(() -> - new IllegalArgumentException(MessageFormat.format("Grupo con codigo [{0}] no encontrado", codigo))); + return this.grupoRepository.findByCodigo(codigo).orElseThrow(() -> new IllegalArgumentException( + MessageFormat.format("Grupo con codigo [{0}] no encontrado", codigo))); } private Fase getFase(String codigo) { - return this.faseRepository.findByCodigo(codigo).orElseThrow(() -> - new IllegalArgumentException(MessageFormat.format("Fase con codigo [{0}] no encontrado", codigo))); + return this.faseRepository.findByCodigo(codigo).orElseThrow(() -> new IllegalArgumentException( + MessageFormat.format("Fase con codigo [{0}] no encontrado", codigo))); } @Override @@ -143,8 +145,7 @@ public ApiResponse setResultado(long partidoId, ResultadoDTO resulta private Partido getPartido(long partidoId) { return this.partidoRepository .findById(partidoId) - .orElseThrow(() -> - new IllegalArgumentException(MessageFormat - .format("El partido <{0}> no fue encontrado", partidoId))); + .orElseThrow(() -> new IllegalArgumentException(MessageFormat + .format("El partido <{0}> no fue encontrado", partidoId))); } } diff --git a/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml b/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml index bbec548..7d52892 100644 --- a/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml +++ b/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml @@ -1,334 +1,334 @@ - fecha: 1 - dia: 20-11-22T16:0+0300 + dia: 20-11-2022T16:0+0300 lugar: Al Bayt Stadium local: QAT visitante: ECU grupo: GRUPO_A fase: GRUPO - fecha: 1 - dia: 21-11-22T13:0+0300 + dia: 21-11-2022T13:0+0300 lugar: Khalifa International Stadium local: GB-ENG visitante: IRN grupo: GRUPO_B fase: GRUPO - fecha: 1 - dia: 21-11-22T16:0+0300 + dia: 21-11-2022T16:0+0300 lugar: Al Thumama Stadium local: SEN visitante: NLD grupo: GRUPO_A fase: GRUPO - fecha: 1 - dia: 21-11-22T19:0+0300 + dia: 21-11-2022T19:0+0300 lugar: Ahmad Bin Ali Stadium local: USA visitante: GB-WLS grupo: GRUPO_B fase: GRUPO - fecha: 1 - dia: 22-11-22T10:0+0300 + dia: 22-11-2022T10:0+0300 lugar: Lusail Stadium local: ARG visitante: SAU grupo: GRUPO_C fase: GRUPO - fecha: 1 - dia: 22-11-22T13:0+0300 + dia: 22-11-2022T13:0+0300 lugar: Education City Stadium local: DNK visitante: TUN grupo: GRUPO_D fase: GRUPO - fecha: 1 - dia: 22-11-22T16:0+0300 + dia: 22-11-2022T16:0+0300 lugar: Stadium 974 local: MEX visitante: POL grupo: GRUPO_C fase: GRUPO - fecha: 1 - dia: 22-11-22T19:0+0300 + dia: 22-11-2022T19:0+0300 lugar: Al Janoub Stadium local: FRA visitante: AUS grupo: GRUPO_D fase: GRUPO - fecha: 1 - dia: 23-11-22T10:0+0300 + dia: 23-11-2022T10:0+0300 lugar: Al Bayt Stadium local: MAR visitante: HRV grupo: GRUPO_F fase: GRUPO - fecha: 1 - dia: 23-11-22T13:0+0300 + dia: 23-11-2022T13:0+0300 lugar: Khalifa International Stadium local: GER visitante: JPN grupo: GRUPO_E fase: GRUPO - fecha: 1 - dia: 23-11-22T16:0+0300 + dia: 23-11-2022T16:0+0300 lugar: Al Thumama Stadium local: SPA visitante: CRI grupo: GRUPO_E fase: GRUPO - fecha: 1 - dia: 23-11-22T19:0+0300 + dia: 23-11-2022T19:0+0300 lugar: Ahmad Bin Ali Stadium local: BEL visitante: CAN grupo: GRUPO_F fase: GRUPO - fecha: 1 - dia: 24-11-22T10:0+0300 + dia: 24-11-2022T10:0+0300 lugar: Al Janoub Stadium local: CHE visitante: CMR grupo: GRUPO_G fase: GRUPO - fecha: 1 - dia: 24-11-22T13:0+0300 + dia: 24-11-2022T13:0+0300 lugar: Education City Stadium local: URY visitante: KOR grupo: GRUPO_H fase: GRUPO - fecha: 1 - dia: 24-11-22T16:0+0300 + dia: 24-11-2022T16:0+0300 lugar: Stadium 974 local: POR visitante: GHA grupo: GRUPO_H fase: GRUPO - fecha: 1 - dia: 24-11-22T19:0+0300 + dia: 24-11-2022T19:0+0300 lugar: Lusail Stadium local: BRA visitante: SRB grupo: GRUPO_G fase: GRUPO - fecha: 2 - dia: 25-11-22T10:0+0300 + dia: 25-11-2022T10:0+0300 lugar: Ahmad Bin Ali Stadium local: GB-WLS visitante: IRN grupo: GRUPO_B fase: GRUPO - fecha: 2 - dia: 25-11-22T13:0+0300 + dia: 25-11-2022T13:0+0300 lugar: Al Thumama Stadium local: QAT visitante: SEN grupo: GRUPO_A fase: GRUPO - fecha: 2 - dia: 25-11-22T16:0+0300 + dia: 25-11-2022T16:0+0300 lugar: Khalifa International Stadium local: NLD visitante: ECU grupo: GRUPO_A fase: GRUPO - fecha: 2 - dia: 25-11-22T19:0+0300 + dia: 25-11-2022T19:0+0300 lugar: Al Bayt Stadium local: GB-ENG visitante: USA grupo: GRUPO_B fase: GRUPO - fecha: 2 - dia: 26-11-22T10:0+0300 + dia: 26-11-2022T10:0+0300 lugar: Al Janoub Stadium local: TUN visitante: AUS grupo: GRUPO_D fase: GRUPO - fecha: 2 - dia: 26-11-22T13:0+0300 + dia: 26-11-2022T13:0+0300 lugar: Education City Stadium local: POL visitante: SAU grupo: GRUPO_C fase: GRUPO - fecha: 2 - dia: 26-11-22T16:0+0300 + dia: 26-11-2022T16:0+0300 lugar: Stadium 974 local: FRA visitante: DNK grupo: GRUPO_D fase: GRUPO - fecha: 2 - dia: 26-11-22T19:0+0300 + dia: 26-11-2022T19:0+0300 lugar: Lusail Stadium local: ARG visitante: MEX grupo: GRUPO_C fase: GRUPO - fecha: 2 - dia: 27-11-22T10:0+0300 + dia: 27-11-2022T10:0+0300 lugar: Ahmad Bin Ali Stadium local: JPN visitante: CRI grupo: GRUPO_E fase: GRUPO - fecha: 2 - dia: 27-11-22T13:0+0300 + dia: 27-11-2022T13:0+0300 lugar: Al Thumama Stadium local: BEL visitante: MAR grupo: GRUPO_F fase: GRUPO - fecha: 2 - dia: 27-11-22T16:0+0300 + dia: 27-11-2022T16:0+0300 lugar: Khalifa International Stadium local: HRV visitante: CAN grupo: GRUPO_F fase: GRUPO - fecha: 2 - dia: 27-11-22T19:0+0300 + dia: 27-11-2022T19:0+0300 lugar: Al Bayt Stadium local: SPA visitante: GER grupo: GRUPO_E fase: GRUPO - fecha: 2 - dia: 28-11-22T10:0+0300 + dia: 28-11-2022T10:0+0300 lugar: Al Janoub Stadium local: CMR visitante: SRB grupo: GRUPO_G fase: GRUPO - fecha: 2 - dia: 28-11-22T13:0+0300 + dia: 28-11-2022T13:0+0300 lugar: Education City Stadium local: KOR visitante: GHA grupo: GRUPO_H fase: GRUPO - fecha: 2 - dia: 28-11-22T16:0+0300 + dia: 28-11-2022T16:0+0300 lugar: Stadium 974 local: BRA visitante: CHE grupo: GRUPO_G fase: GRUPO - fecha: 2 - dia: 28-11-22T19:0+0300 + dia: 28-11-2022T19:0+0300 lugar: Lusail Stadium local: POR visitante: URY grupo: GRUPO_H fase: GRUPO - fecha: 3 - dia: 29-11-22T15:0+0300 + dia: 29-11-2022T15:0+0300 lugar: Khalifa International Stadium local: ECU visitante: SEN grupo: GRUPO_A fase: GRUPO - fecha: 3 - dia: 29-11-22T15:0+0300 + dia: 29-11-2022T15:0+0300 lugar: Al Bayt Stadium local: NLD visitante: QAT grupo: GRUPO_A fase: GRUPO - fecha: 3 - dia: 29-11-22T19:0+0300 + dia: 29-11-2022T19:0+0300 lugar: Ahmad Bin Ali Stadium local: GB-WLS visitante: GB-ENG grupo: GRUPO_B fase: GRUPO - fecha: 3 - dia: 29-11-22T19:0+0300 + dia: 29-11-2022T19:0+0300 lugar: Al Thumama Stadium local: IRN visitante: USA grupo: GRUPO_B fase: GRUPO - fecha: 3 - dia: 30-11-22T15:0+0300 + dia: 30-11-2022T15:0+0300 lugar: Al Janoub Stadium local: AUS visitante: DNK grupo: GRUPO_D fase: GRUPO - fecha: 3 - dia: 30-11-22T15:0+0300 + dia: 30-11-2022T15:0+0300 lugar: Education City Stadium local: TUN visitante: FRA grupo: GRUPO_D fase: GRUPO - fecha: 3 - dia: 30-11-22T19:0+0300 + dia: 30-11-2022T19:0+0300 lugar: Stadium 974 local: POL visitante: ARG grupo: GRUPO_C fase: GRUPO - fecha: 3 - dia: 30-11-22T19:0+0300 + dia: 30-11-2022T19:0+0300 lugar: Lusail Stadium local: SAU visitante: MEX grupo: GRUPO_C fase: GRUPO - fecha: 3 - dia: 12-1-22T15:0+0300 + dia: 1-12-2022T15:0+0300 lugar: Ahmad Bin Ali Stadium local: HRV visitante: BEL grupo: GRUPO_F fase: GRUPO - fecha: 3 - dia: 12-1-22T15:0+0300 + dia: 1-12-2022T15:0+0300 lugar: Al Thumama Stadium local: CAN visitante: MAR grupo: GRUPO_F fase: GRUPO - fecha: 3 - dia: 12-1-22T19:0+0300 + dia: 1-12-2022T19:0+0300 lugar: Khalifa International Stadium local: JPN visitante: SPA grupo: GRUPO_E fase: GRUPO - fecha: 3 - dia: 12-1-22T19:0+0300 + dia: 1-12-2022T19:0+0300 lugar: Al Bayt Stadium local: CRI visitante: GER grupo: GRUPO_E fase: GRUPO - fecha: 3 - dia: 12-2-22T15:0+0300 + dia: 2-12-2022T15:0+0300 lugar: Al Janoub Stadium local: GHA visitante: URY grupo: GRUPO_H fase: GRUPO - fecha: 3 - dia: 12-2-22T15:0+0300 + dia: 2-12-2022T15:0+0300 lugar: Education City Stadium local: KOR visitante: POR grupo: GRUPO_H fase: GRUPO - fecha: 3 - dia: 12-2-22T19:0+0300 + dia: 2-12-2022T19:0+0300 lugar: Stadium 974 local: SRB visitante: CHE grupo: GRUPO_G fase: GRUPO - fecha: 3 - dia: 12-2-22T19:0+0300 + dia: 2-12-2022T19:0+0300 lugar: Lusail Stadium local: CMR visitante: BRA diff --git a/packages/openscore-core/Dockerfile b/packages/openscore-core/Dockerfile deleted file mode 100755 index 6d239e7..0000000 --- a/packages/openscore-core/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM docker.io/jboss/wildfly:10.1.0.Final - -ADD src/main/docker/customization /opt/jboss/wildfly/customization/ -ADD src/main/docker/modules /opt/jboss/wildfly/modules/ - -RUN /opt/jboss/wildfly/customization/execute.sh - -ADD target/openscore-core.war /opt/jboss/wildfly/standalone/deployments/openscore-core.war \ No newline at end of file diff --git a/packages/openscore-core/Jenkinsfile b/packages/openscore-core/Jenkinsfile deleted file mode 100644 index c1731b6..0000000 --- a/packages/openscore-core/Jenkinsfile +++ /dev/null @@ -1,75 +0,0 @@ -pipeline { - agent { - label "maven" - } - options { - skipDefaultCheckout() - } - stages { - stage("Checkout") { - steps { - git branch: env.BRANCH, url: env.REPO - } - } - stage("Compile") { - steps { - script{ - openshift.withCluster() { - openshift.verbose(); - openshift.withProject("openscore") { - dir("openscore-core") { - sh "mvn clean package -DskipTests -Popenshift" - } - } - } - } - } - } - stage("Build") { - steps { - script { - openshift.withCluster() { - openshift.verbose(); - openshift.withProject("openscore") { - - if (!openshift.selector("bc", "openscore-core").exists()) { - openshift.newBuild("--image-stream=wildfly:10.1", "--name=openscore-core", "--binary=true"); - } - - // Starts a new build and waits for its completion - openshift.selector("bc", "openscore-core").startBuild("--from-file=./openscore-core/target/openscore-core.war","--wait=true"); - - } - } - } - } - } - stage("Deploy") { - steps { - script { - openshift.withCluster() { - openshift.withProject("openscore") { - if (!openshift.selector("dc", "openscore-core").exists()) { - // Creates the application and get the brand new BuildConfig - def dc = openshift.newApp("openscore-core:latest").narrow("dc"); - // Creates the app Route - openshift.selector("svc", "openscore-core").expose(); - - // Waits for the deployment to finish - while (dc.object().spec.replicas != dc.object().status.availableReplicas) { - sleep 10 - } - - // Removes the triggers - openshift.set("triggers", "dc/openscore-core", "--manual"); - } - // Rollouts to latest version - openshift.selector("dc", "openscore-core").rollout().latest(); - - } - } - } - } - } - } -} diff --git a/packages/openscore-core/build.sh b/packages/openscore-core/build.sh deleted file mode 100755 index 84e2132..0000000 --- a/packages/openscore-core/build.sh +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/bash - -mvn clean install -Dmaven.test.skip=true -Popenshift -docker build . -t openscore-core:latest -docker tag openscore-core:latest registry.digitalocean.com/openscore/openscore-core:latest -docker push registry.digitalocean.com/openscore/openscore-core:latest diff --git a/packages/openscore-core/deploy.sh b/packages/openscore-core/deploy.sh deleted file mode 100755 index 4c1111f..0000000 --- a/packages/openscore-core/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/bash - -mvn clean install -Dmaven.test.skip=true -Popenshift -oc start-build openscore-core --from-file=./target/openscore-core.war --wait diff --git a/packages/openscore-core/package.json b/packages/openscore-core/package.json deleted file mode 100644 index b1258ba..0000000 --- a/packages/openscore-core/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "@openscore/legacy-core", - "version": "1.0.0", - "main": "index.js", - "repository": "", - "author": "Adriel Paredes , Leandro Beretta - - 4.0.0 - - io.semantic - openscore-core - 1.0.0 - war - - - 1.0.3.Final - 4.12 - 1.7.24 - 1.1.11 - 2.10.0 - 1.2.0.Final - - - - - - - org.wildfly.bom - wildfly-javaee7 - import - pom - 10.0.0.Final - - - org.jboss.spec - jboss-javaee-7.0 - ${version.org.jboss.spec.jboss.javaee.7} - pom - - - - - - - javax.enterprise - cdi-api - provided - - - org.hibernate.javax.persistence - hibernate-jpa-2.1-api - provided - - - org.jboss.spec.javax.ejb - jboss-ejb-api_3.2_spec - provided - - - org.jboss.spec.javax.transaction - jboss-transaction-api_1.2_spec - provided - - - org.jboss.spec.javax.ws.rs - jboss-jaxrs-api_2.0_spec - provided - - - org.slf4j - slf4j-api - ${version.org.slf4j} - - - org.hibernate - hibernate-entitymanager - - - ch.qos.logback - logback-classic - ${version.ch.qos.logback} - - - com.google.guava - guava - 23.5-jre - - - commons-beanutils - commons-beanutils - 1.9.3 - - - org.infinispan - infinispan-embedded - 9.1.7.Final - - - javax.mail - mail - 1.4.7 - - - com.mitchellbosecke - pebble - 2.1.0 - - - org.jboss.resteasy - resteasy-jackson-provider - provided - - - org.jboss.resteasy - resteasy-client - 3.0.14.Final - test - - - com.h2database - h2 - 1.4.196 - test - - - org.apache.commons - commons-text - 1.3 - - - org.hibernate - hibernate-validator - - - org.mapstruct - mapstruct - ${version.org.mapstruct} - - - javax.el - javax.el-api - 2.2.4 - - - com.nimbusds - nimbus-jose-jwt - 4.23 - - - com.google.code.gson - gson - 2.8.2 - - - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - 2.3.0 - - - com.fasterxml.jackson.core - jackson-databind - 2.2.3 - - - junit - junit - ${version.junit} - - - org.mockito - mockito-core - ${version.org.mockito} - - - - - - ${project.artifactId} - - - src/main/resources - true - - info.properties - - - - src/main/resources - false - - info.properties - - - - - - - - maven-surefire-plugin - 2.17 - - - - - org.wildfly.plugins - wildfly-maven-plugin - 1.0.2.Final - - - - - - org.wildfly.plugins - wildfly-maven-plugin - 1.0.2.Final - - admin - redhat.1 - - - - maven-compiler-plugin - 3.6.1 - - 1.8 - 1.8 - - - org.mapstruct - mapstruct-processor - ${version.org.mapstruct} - - - - - - maven-war-plugin - 2.1.1 - - false - - - - - - - - - openshift - - openshift - - - - - src/main/environment/openshift - - - WEB-INF - - - - - - - maven-war-plugin - 2.1.1 - - false - - - src/main/environment/openshift - - META-INF - - - - - - - - - - dev - - true - - - dev - - - - - src/main/environment/dev - - WEB-INF - - - - - - maven-war-plugin - 2.1.1 - - false - - - src/main/environment/dev - - META-INF - - - - - - - - - - - diff --git a/packages/openscore-core/prepare.sh b/packages/openscore-core/prepare.sh deleted file mode 100755 index fad521a..0000000 --- a/packages/openscore-core/prepare.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/bash - -JDBC_VERSION=42.2.2 -JDBC_MODULE_FOLDER=./src/main/docker/modules/org/postgresql/jdbc/main - -# Descargar driver postgresql -echo "############# Descargando driver de PostgreSQL ${JDBC_VERSION} ################" -wget https://jdbc.postgresql.org/download/postgresql-$JDBC_VERSION.jar -O ${JDBC_MODULE_FOLDER}/postgresql.jar - -touch ${JDBC_MODULE_FOLDER}/$JDBC_VERSION.version diff --git a/packages/openscore-core/src/main/docker/customization/commands.cli b/packages/openscore-core/src/main/docker/customization/commands.cli deleted file mode 100644 index 0b2469f..0000000 --- a/packages/openscore-core/src/main/docker/customization/commands.cli +++ /dev/null @@ -1,11 +0,0 @@ -# Mark the commands below to be run as a batch -batch - -/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=org.postgresql.jdbc,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource) - -# Add the datasource -data-source add --name=openscore --driver-name=postgresql --jndi-name=java:jboss/datasources/openscore --connection-url="jdbc:postgresql://openscore-db:5432/postgres" --user-name="openscore" --password="openscore" -data-source enable --name=openscore - -# Execute the batch -run-batch \ No newline at end of file diff --git a/packages/openscore-core/src/main/docker/customization/execute.sh b/packages/openscore-core/src/main/docker/customization/execute.sh deleted file mode 100755 index b559cf4..0000000 --- a/packages/openscore-core/src/main/docker/customization/execute.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -# Usage: execute.sh [WildFly mode] [configuration file] -# -# The default mode is 'standalone' and default configuration is based on the -# mode. It can be 'standalone.xml' or 'domain.xml'. - -JBOSS_HOME=/opt/jboss/wildfly -JBOSS_CLI=$JBOSS_HOME/bin/jboss-cli.sh -JBOSS_MODE=${1:-"standalone"} -JBOSS_CONFIG=${2:-"$JBOSS_MODE.xml"} - -function wait_for_server() { - until `$JBOSS_CLI -c "ls /deployment" &> /dev/null`; do - sleep 1 - done -} - -echo "=> Starting WildFly server" -$JBOSS_HOME/bin/$JBOSS_MODE.sh -c $JBOSS_CONFIG > /dev/null & - -echo "=> Waiting for the server to boot" -wait_for_server - -echo "=> Executing the commands" -$JBOSS_CLI -c --file=`dirname "$0"`/commands.cli - -echo "=> Shutting down WildFly" -if [ "$JBOSS_MODE" = "standalone" ]; then - $JBOSS_CLI -c ":shutdown" -else - $JBOSS_CLI -c "/host=*:shutdown" -fi diff --git a/packages/openscore-core/src/main/docker/modules/org/postgresql/jdbc/main/42.2.2.version b/packages/openscore-core/src/main/docker/modules/org/postgresql/jdbc/main/42.2.2.version deleted file mode 100644 index e69de29..0000000 diff --git a/packages/openscore-core/src/main/docker/modules/org/postgresql/jdbc/main/module.xml b/packages/openscore-core/src/main/docker/modules/org/postgresql/jdbc/main/module.xml deleted file mode 100644 index d090b83..0000000 --- a/packages/openscore-core/src/main/docker/modules/org/postgresql/jdbc/main/module.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/packages/openscore-core/src/main/environment/dev/META-INF/persistence.xml b/packages/openscore-core/src/main/environment/dev/META-INF/persistence.xml deleted file mode 100644 index f108fc8..0000000 --- a/packages/openscore-core/src/main/environment/dev/META-INF/persistence.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - org.hibernate.ejb.HibernatePersistence - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/openscore-core/src/main/environment/dev/WEB-INF/beans.xml b/packages/openscore-core/src/main/environment/dev/WEB-INF/beans.xml deleted file mode 100644 index e3f6c5f..0000000 --- a/packages/openscore-core/src/main/environment/dev/WEB-INF/beans.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - io.semantic.openscore.core.email.StdoutMailSender - - \ No newline at end of file diff --git a/packages/openscore-core/src/main/environment/openshift/META-INF/persistence.xml b/packages/openscore-core/src/main/environment/openshift/META-INF/persistence.xml deleted file mode 100644 index bcfccea..0000000 --- a/packages/openscore-core/src/main/environment/openshift/META-INF/persistence.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - org.hibernate.ejb.HibernatePersistence - java:jboss/datasources/openscore - - - - - - - - - \ No newline at end of file diff --git a/packages/openscore-core/src/main/environment/openshift/WEB-INF/beans.xml b/packages/openscore-core/src/main/environment/openshift/WEB-INF/beans.xml deleted file mode 100644 index e3f6c5f..0000000 --- a/packages/openscore-core/src/main/environment/openshift/WEB-INF/beans.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - io.semantic.openscore.core.email.StdoutMailSender - - \ No newline at end of file diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/OpenScoreApplication.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/OpenScoreApplication.java deleted file mode 100644 index c83d0db..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/OpenScoreApplication.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.semantic.openscore.core; - -import javax.ws.rs.ApplicationPath; -import javax.ws.rs.core.Application; - -@ApplicationPath("api/rest") -public class OpenScoreApplication extends Application { - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ApiResponse.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ApiResponse.java deleted file mode 100644 index 4de138f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ApiResponse.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.semantic.openscore.core.api; - -public class ApiResponse { - - private String error; - private String description; - private T data; - - public ApiResponse() { - } - - public ApiResponse(T data) { - this.data = data; - } - - public ApiResponse(String error, - String description, - T data) { - this(data); - this.description = description; - this.error = error; - } - - public String getDescription() { - return description; - } - - public String getError() { - return error; - } - - public T getData() { - return data; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ImagenApi.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ImagenApi.java deleted file mode 100644 index 7f4ae17..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ImagenApi.java +++ /dev/null @@ -1,32 +0,0 @@ -package io.semantic.openscore.core.api; - -public class ImagenApi { - - private long id; - private String nombre; - private byte[] content; - - public byte[] getContent() { - return content; - } - - public void setContent(byte[] content) { - this.content = content; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/TokenDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/TokenDTO.java deleted file mode 100644 index e01be9d..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/TokenDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.semantic.openscore.core.api; - -public class TokenDTO { - - private String token; - - public TokenDTO(String token) { - this.token = token; - } - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/admin/UsuarioCompletoDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/admin/UsuarioCompletoDTO.java deleted file mode 100644 index d9aa8a9..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/admin/UsuarioCompletoDTO.java +++ /dev/null @@ -1,87 +0,0 @@ -package io.semantic.openscore.core.api.admin; - -import io.semantic.openscore.core.api.paises.PaisDTO; - -public class UsuarioCompletoDTO { - private long id; - private String nombre; - private String apellido; - private PaisDTO pais; - private String email; - private boolean deleted; - private String creationDate; - private String deletionDate; - private String modificationDate; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getApellido() { - return apellido; - } - - public void setApellido(String apellido) { - this.apellido = apellido; - } - - public PaisDTO getPais() { - return pais; - } - - public void setPais(PaisDTO pais) { - this.pais = pais; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public boolean isDeleted() { - return deleted; - } - - public void setDeleted(boolean deleted) { - this.deleted = deleted; - } - - public String getCreationDate() { - return creationDate; - } - - public void setCreationDate(String creationDate) { - this.creationDate = creationDate; - } - - public String getDeletionDate() { - return deletionDate; - } - - public void setDeletionDate(String deletionDate) { - this.deletionDate = deletionDate; - } - - public String getModificationDate() { - return modificationDate; - } - - public void setModificationDate(String modificationDate) { - this.modificationDate = modificationDate; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/competiciones/CrearDefinicionCompeticionDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/competiciones/CrearDefinicionCompeticionDTO.java deleted file mode 100644 index 8ba4e0f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/competiciones/CrearDefinicionCompeticionDTO.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.semantic.openscore.core.api.competiciones; - -public class CrearDefinicionCompeticionDTO { - - private String nombre; - private String logo; - private String descripcion; - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getLogo() { - return logo; - } - - public void setLogo(String logo) { - this.logo = logo; - } - - public String getDescripcion() { - return descripcion; - } - - public void setDescripcion(String descripcion) { - this.descripcion = descripcion; - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/competiciones/DefinicionCompeticionDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/competiciones/DefinicionCompeticionDTO.java deleted file mode 100644 index 16c2c12..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/competiciones/DefinicionCompeticionDTO.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.semantic.openscore.core.api.competiciones; - -import javax.persistence.Column; - -public class DefinicionCompeticionDTO { - - private String nombre; - private String logo; - private String descripcion; - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getLogo() { - return logo; - } - - public void setLogo(String logo) { - this.logo = logo; - } - - public String getDescripcion() { - return descripcion; - } - - public void setDescripcion(String descripcion) { - this.descripcion = descripcion; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/equipos/CrearEquipoDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/equipos/CrearEquipoDTO.java deleted file mode 100644 index 19322c0..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/equipos/CrearEquipoDTO.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.semantic.openscore.core.api.equipos; - -public class CrearEquipoDTO { - - private String nombre; - private String codigo; - private String codigoPais; - private String logo; - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public String getCodigoPais() { - return codigoPais; - } - - public void setCodigoPais(String codigoPais) { - this.codigoPais = codigoPais; - } - - public String getLogo() { - return logo; - } - - public void setLogo(String logo) { - this.logo = logo; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/equipos/EquipoDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/equipos/EquipoDTO.java deleted file mode 100644 index c69830a..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/equipos/EquipoDTO.java +++ /dev/null @@ -1,52 +0,0 @@ -package io.semantic.openscore.core.api.equipos; - -import io.semantic.openscore.core.api.paises.PaisDTO; - -public class EquipoDTO { - - private long id; - private String nombre; - private String codigo; - private PaisDTO pais; - private String logo; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public String getLogo() { - return logo; - } - - public void setLogo(String logo) { - this.logo = logo; - } - - public PaisDTO getPais() { - return pais; - } - - public void setPais(PaisDTO pais) { - this.pais = pais; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/grupos/FaseDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/grupos/FaseDTO.java deleted file mode 100644 index b614846..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/grupos/FaseDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.semantic.openscore.core.api.grupos; - -public class FaseDTO { - - private String codigo; - private String nombre; - - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/grupos/GrupoDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/grupos/GrupoDTO.java deleted file mode 100644 index b867b74..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/grupos/GrupoDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.semantic.openscore.core.api.grupos; - -public class GrupoDTO { - - private String codigo; - private String nombre; - - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/information/Information.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/information/Information.java deleted file mode 100644 index a70eed5..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/information/Information.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.semantic.openscore.core.api.information; - -import java.util.Map; - -public class Information { - - private String version; - private String environment; - - private Map properties; - - public void setVersion(String version) { - this.version = version; - } - - public String getVersion() { - return version; - } - - public void setEnvironment(String environment) { - this.environment = environment; - } - - public String getEnvironment() { - return environment; - } - - public Map getProperties() { - return properties; - } - - public void setProperties(Map properties) { - this.properties = properties; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/paises/PaisDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/paises/PaisDTO.java deleted file mode 100644 index 648a31d..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/paises/PaisDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.semantic.openscore.core.api.paises; - -public class PaisDTO { - - private String codigo; - private String nombre; - - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java deleted file mode 100644 index da94583..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/CrearOUpdatePartidoDTO.java +++ /dev/null @@ -1,70 +0,0 @@ -package io.semantic.openscore.core.api.partidos; - -import java.util.Date; - -public class CrearOUpdatePartidoDTO { - - private String local; - private String visitante; - private Date dia; - private int fecha; - private String lugar; - private String grupo; - private String fase; - - public String getLocal() { - return local; - } - - public void setLocal(String local) { - this.local = local; - } - - public String getVisitante() { - return visitante; - } - - public void setVisitante(String visitante) { - this.visitante = visitante; - } - - public Date getDia() { - return dia; - } - - public void setDia(Date dia) { - this.dia = dia; - } - - public String getLugar() { - return lugar; - } - - public void setLugar(String lugar) { - this.lugar = lugar; - } - - public int getFecha() { - return fecha; - } - - public void setFecha(int fecha) { - this.fecha = fecha; - } - - public String getGrupo() { - return grupo; - } - - public void setGrupo(String grupo) { - this.grupo = grupo; - } - - public String getFase() { - return fase; - } - - public void setFase(String fase) { - this.fase = fase; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java deleted file mode 100644 index efb89eb..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java +++ /dev/null @@ -1,101 +0,0 @@ -package io.semantic.openscore.core.api.partidos; - -import io.semantic.openscore.core.api.equipos.EquipoDTO; -import io.semantic.openscore.core.api.grupos.FaseDTO; -import io.semantic.openscore.core.api.grupos.GrupoDTO; - -import java.util.Date; - -public class PartidoDTO { - - private long id; - private EquipoDTO local; - private EquipoDTO visitante; - private Date dia; - private int fecha; - private GrupoDTO grupo; - private FaseDTO fase; - private String lugar; - private String status; - private ResultadoDTO resultado; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public EquipoDTO getLocal() { - return local; - } - - public void setLocal(EquipoDTO local) { - this.local = local; - } - - public EquipoDTO getVisitante() { - return visitante; - } - - public void setVisitante(EquipoDTO visitante) { - this.visitante = visitante; - } - - public Date getDia() { - return dia; - } - - public void setDia(Date dia) { - this.dia = dia; - } - - public String getLugar() { - return lugar; - } - - public void setLugar(String lugar) { - this.lugar = lugar; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public GrupoDTO getGrupo() { - return grupo; - } - - public void setGrupo(GrupoDTO grupo) { - this.grupo = grupo; - } - - public FaseDTO getFase() { - return fase; - } - - public void setFase(FaseDTO fase) { - this.fase = fase; - } - - public int getFecha() { - return fecha; - } - - public void setFecha(int fecha) { - this.fecha = fecha; - } - - public ResultadoDTO getResultado() { - return resultado; - } - - public void setResultado(ResultadoDTO resultado) { - this.resultado = resultado; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java deleted file mode 100644 index dd21c78..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.semantic.openscore.core.api.partidos; - -public class ResultadoDTO { - - private int local; - private int visitante; - - public int getLocal() { - return local; - } - - public void setLocal(int local) { - this.local = local; - } - - public int getVisitante() { - return visitante; - } - - public void setVisitante(int visitante) { - this.visitante = visitante; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/post/CrearPost.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/post/CrearPost.java deleted file mode 100644 index 6f2411a..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/post/CrearPost.java +++ /dev/null @@ -1,32 +0,0 @@ -package io.semantic.openscore.core.api.post; - -public class CrearPost { - - private String titulo; - private String contenido; - private String autor; - - public String getTitulo() { - return titulo; - } - - public void setTitulo(String titulo) { - this.titulo = titulo; - } - - public String getContenido() { - return contenido; - } - - public void setContenido(String contenido) { - this.contenido = contenido; - } - - public String getAutor() { - return autor; - } - - public void setAutor(String autor) { - this.autor = autor; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/CrearPronosticoDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/CrearPronosticoDTO.java deleted file mode 100644 index f0e0b1c..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/CrearPronosticoDTO.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.semantic.openscore.core.api.pronosticos; - -public class CrearPronosticoDTO { - - - private boolean local; - private boolean visitante; - private boolean empate; - private long partido; - - public boolean isLocal() { - return local; - } - - public void setLocal(boolean local) { - this.local = local; - } - - public boolean isVisitante() { - return visitante; - } - - public void setVisitante(boolean visitante) { - this.visitante = visitante; - } - - public boolean isEmpate() { - return empate; - } - - public void setEmpate(boolean empate) { - this.empate = empate; - } - - public long getPartido() { - return partido; - } - - public void setPartido(long partido) { - this.partido = partido; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/PartidoPronosticoDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/PartidoPronosticoDTO.java deleted file mode 100644 index 0f7408e..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/PartidoPronosticoDTO.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.semantic.openscore.core.api.pronosticos; - -import io.semantic.openscore.core.api.partidos.PartidoDTO; - -public class PartidoPronosticoDTO extends PartidoDTO { - - private PronosticoDTO pronostico; - - public PronosticoDTO getPronostico() { - return pronostico; - } - - public void setPronostico(PronosticoDTO pronostico) { - this.pronostico = pronostico; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/PronosticoDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/PronosticoDTO.java deleted file mode 100644 index 1c397e5..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/pronosticos/PronosticoDTO.java +++ /dev/null @@ -1,49 +0,0 @@ -package io.semantic.openscore.core.api.pronosticos; - -import io.semantic.openscore.core.model.Usuario; - -import javax.persistence.ManyToOne; - -public class PronosticoDTO { - - private long id; - private boolean local; - private boolean visitante; - private boolean empate; - - @ManyToOne - private Usuario usuario; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public boolean isLocal() { - return local; - } - - public void setLocal(boolean local) { - this.local = local; - } - - public boolean isVisitante() { - return visitante; - } - - public void setVisitante(boolean visitante) { - this.visitante = visitante; - } - - public boolean isEmpate() { - return empate; - } - - public void setEmpate(boolean empate) { - this.empate = empate; - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ranking/Ranking.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ranking/Ranking.java deleted file mode 100644 index 4704c0f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/ranking/Ranking.java +++ /dev/null @@ -1,50 +0,0 @@ -package io.semantic.openscore.core.api.ranking; - -public class Ranking { - - private int ranking; - private int puntos; - private String nombre; - private String pais; - private long usuario; - - public int getRanking() { - return ranking; - } - - public void setRanking(int ranking) { - this.ranking = ranking; - } - - public int getPuntos() { - return puntos; - } - - public void setPuntos(int puntos) { - this.puntos = puntos; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getPais() { - return pais; - } - - public void setPais(String pais) { - this.pais = pais; - } - - public long getUsuario() { - return usuario; - } - - public void setUsuario(long usuario) { - this.usuario = usuario; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/CrearUsuarioDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/CrearUsuarioDTO.java deleted file mode 100644 index 553b124..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/CrearUsuarioDTO.java +++ /dev/null @@ -1,100 +0,0 @@ -package io.semantic.openscore.core.api.usuarios; - -import io.semantic.openscore.core.validation.annotations.Matches; -import io.semantic.openscore.core.validation.annotations.Password; -import org.hibernate.validator.constraints.Email; -import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotEmpty; - -import javax.validation.constraints.NotNull; - -@Matches.List({ - @Matches(first = "password", second = "confirmacionPassword"), - @Matches(first = "email", second = "confirmacionEmail")}) -public class CrearUsuarioDTO { - - @NotNull - @Length(min = 2) - private String nombre; - - @NotNull - @Length(min = 2) - private String apellido; - - @NotNull - @NotEmpty - private String pais; - - @NotNull - @Email(regexp = ".*@redhat\\.com") - private String email; - - @NotNull - @Email(regexp = ".*@redhat\\.com") - private String confirmacionEmail; - - @NotNull - @Password - private String password; - - @NotNull - @Password - private String confirmacionPassword; - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getApellido() { - return apellido; - } - - public void setApellido(String apellido) { - this.apellido = apellido; - } - - public String getPais() { - return pais; - } - - public void setPais(String pais) { - this.pais = pais; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getConfirmacionEmail() { - return confirmacionEmail; - } - - public void setConfirmacionEmail(String confirmacionEmail) { - this.confirmacionEmail = confirmacionEmail; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getConfirmacionPassword() { - return confirmacionPassword; - } - - public void setConfirmacionPassword(String confirmacionPassword) { - this.confirmacionPassword = confirmacionPassword; - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/LoginUsuarioDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/LoginUsuarioDTO.java deleted file mode 100644 index 1b70131..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/LoginUsuarioDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.semantic.openscore.core.api.usuarios; - -public class LoginUsuarioDTO { - - private String email; - private String password; - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/RecoverPassword.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/RecoverPassword.java deleted file mode 100644 index 1508e42..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/RecoverPassword.java +++ /dev/null @@ -1,60 +0,0 @@ -package io.semantic.openscore.core.api.usuarios; - -import io.semantic.openscore.core.validation.annotations.Matches; -import io.semantic.openscore.core.validation.annotations.Password; -import org.hibernate.validator.constraints.Email; - -import javax.validation.constraints.NotNull; - -@Matches.List({ - @Matches(first = "password", second = "confirmacionPassword")}) -public class RecoverPassword { - - - @NotNull - @Email(regexp = ".*@redhat\\.com") - private String email; - - @NotNull - private String token; - - @NotNull - @Password - private String password; - - @NotNull - @Password - private String confirmacionPassword; - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getConfirmacionPassword() { - return confirmacionPassword; - } - - public void setConfirmacionPassword(String confirmacionPassword) { - this.confirmacionPassword = confirmacionPassword; - } - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdatePassword.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdatePassword.java deleted file mode 100644 index 854c287..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdatePassword.java +++ /dev/null @@ -1,47 +0,0 @@ -package io.semantic.openscore.core.api.usuarios; - -import io.semantic.openscore.core.validation.annotations.Matches; -import io.semantic.openscore.core.validation.annotations.Password; -import org.hibernate.validator.constraints.NotEmpty; - -import javax.validation.constraints.NotNull; - -@Matches.List({ - @Matches(first = "password", second = "confirmacionPassword")}) -public class UpdatePassword { - - @NotEmpty - private String oldPassword; - - @NotEmpty - @Password - private String password; - - @NotEmpty - @Password - private String confirmacionPassword; - - public String getOldPassword() { - return oldPassword; - } - - public void setOldPassword(String oldPassword) { - this.oldPassword = oldPassword; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getConfirmacionPassword() { - return confirmacionPassword; - } - - public void setConfirmacionPassword(String confirmacionPassword) { - this.confirmacionPassword = confirmacionPassword; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateSecretQuestion.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateSecretQuestion.java deleted file mode 100644 index c68f7ed..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateSecretQuestion.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.semantic.openscore.core.api.usuarios; - -import io.semantic.openscore.core.validation.annotations.Password; - -import javax.validation.constraints.NotNull; - -public class UpdateSecretQuestion { - - @NotNull - private String preguntaSecreta; - - @NotNull - private String respuestaPreguntaSecreta; - - @NotNull - @Password - private String password; - - public String getPreguntaSecreta() { - return preguntaSecreta; - } - - public void setPreguntaSecreta(String preguntaSecreta) { - this.preguntaSecreta = preguntaSecreta; - } - - public String getRespuestaPreguntaSecreta() { - return respuestaPreguntaSecreta; - } - - public void setRespuestaPreguntaSecreta(String respuestaPreguntaSecreta) { - this.respuestaPreguntaSecreta = respuestaPreguntaSecreta; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateUsuarioDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateUsuarioDTO.java deleted file mode 100644 index 1bcfcf2..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UpdateUsuarioDTO.java +++ /dev/null @@ -1,46 +0,0 @@ -package io.semantic.openscore.core.api.usuarios; - -import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotEmpty; - -import javax.validation.constraints.NotNull; - -public class UpdateUsuarioDTO { - - @NotNull - @Length(min = 2) - private String nombre; - - @NotNull - @Length(min = 2) - private String apellido; - - @NotNull - @NotEmpty - private String pais; - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getApellido() { - return apellido; - } - - public void setApellido(String apellido) { - this.apellido = apellido; - } - - public String getPais() { - return pais; - } - - public void setPais(String pais) { - this.pais = pais; - } -} - diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UsuarioDTO.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UsuarioDTO.java deleted file mode 100644 index 713510c..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/api/usuarios/UsuarioDTO.java +++ /dev/null @@ -1,69 +0,0 @@ -package io.semantic.openscore.core.api.usuarios; - -import io.semantic.openscore.core.api.paises.PaisDTO; -import org.hibernate.validator.constraints.Email; -import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotEmpty; - -import javax.validation.constraints.NotNull; - -public class UsuarioDTO { - - @NotEmpty - private long id; - - @NotNull - @Length(min = 2) - private String nombre; - - @NotNull - @Length(min = 2) - private String apellido; - - @NotNull - private PaisDTO pais; - - @NotNull - @Email - private String email; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getApellido() { - return apellido; - } - - public void setApellido(String apellido) { - this.apellido = apellido; - } - - public PaisDTO getPais() { - return pais; - } - - public void setPais(PaisDTO pais) { - this.pais = pais; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/cache/TokenCache.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/cache/TokenCache.java deleted file mode 100644 index 034c30b..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/cache/TokenCache.java +++ /dev/null @@ -1,46 +0,0 @@ -package io.semantic.openscore.core.cache; - -import org.infinispan.Cache; -import org.infinispan.manager.DefaultCacheManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.annotation.PostConstruct; -import javax.enterprise.context.ApplicationScoped; -import java.io.IOException; -import java.util.Optional; - -@ApplicationScoped -public class TokenCache { - - - private Logger logger = LoggerFactory.getLogger(TokenCache.class); - private Cache cache; - - @PostConstruct - public void initialize() throws IOException { - this.cache = new DefaultCacheManager("infinispan.xml") - .getCache("local"); - } - - public boolean isValid(String email, String token) { - Optional t = Optional.ofNullable(this.cache.get(email)); - return t.map(x -> x.equals(token)).orElse(false); - } - - public void remove(String email) { - this.cache.remove(email); - logger.info("Entry <{}> removed, new object count: {}", email, this.cache.size()); - } - - public void add(String email, String token) { - this.cache.put(email, token); - logger.info("Entry <{}> added, new object count: {}", email, this.cache.size()); - } - - public Optional getToken(String email) { - String token = this.cache.get(email); - logger.info("For key <{}>, value found: <{}>", email, token); - return Optional.ofNullable(token); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/FSMailProvider.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/FSMailProvider.java deleted file mode 100644 index a3c6182..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/FSMailProvider.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.semantic.openscore.core.email; - -import com.google.common.io.Files; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.inject.Alternative; -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; - -@Alternative -@ApplicationScoped -public class FSMailProvider implements MailProvider { - - private Logger logger = LoggerFactory.getLogger(FSMailProvider.class); - - @Override - public void send(String to, String subject, String mail) { - try { - File folder = new File("/tmp/mail"); - if (!folder.exists()) { - folder.mkdirs(); - } - File file = new File(folder, to + "_" + subject + ".html"); - file.createNewFile(); - Files.asCharSink(file, StandardCharsets.UTF_8).write(mail); - logger.info("Email sent"); - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailFactory.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailFactory.java deleted file mode 100644 index 785623f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailFactory.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.semantic.openscore.core.email; - -import java.util.HashMap; -import java.util.Map; - -public class MailFactory { - - public MailTemplate getRecoverPasswordEmail(String to, String token) { - Map map = new HashMap<>(); - map.put("email", to); - map.put("token", token); - return new MailTemplate(to, "Recover Password", "recover", map); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailProvider.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailProvider.java deleted file mode 100644 index 45cff98..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package io.semantic.openscore.core.email; - -public interface MailProvider { - - void send(String to, String subject, String email); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailServer.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailServer.java deleted file mode 100644 index ff41515..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailServer.java +++ /dev/null @@ -1,30 +0,0 @@ -package io.semantic.openscore.core.email; - -import io.semantic.openscore.core.template.TemplateEngine; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; - -@ApplicationScoped -public class MailServer { - - private MailProvider provider; - private TemplateEngine templateEngine; - - - public MailServer() { - } - - @Inject - public MailServer(MailProvider provider, - TemplateEngine templateEngine) { - - this.provider = provider; - this.templateEngine = templateEngine; - } - - public void send(MailTemplate template) { - String email = this.templateEngine.evaluate(template.getTemplateName(), template.getParams()); - this.provider.send(template.getTo(), template.getSubject(), email); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailTemplate.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailTemplate.java deleted file mode 100644 index 8430fbf..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/MailTemplate.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.semantic.openscore.core.email; - -import java.util.Map; - -public class MailTemplate { - - private final String to; - private final String subject; - private final String templateName; - private final Map params; - - public MailTemplate(String to, - String subject, - String templateName, - Map params) { - - this.to = to; - this.subject = subject; - this.templateName = templateName; - this.params = params; - } - - public String getTo() { - return to; - } - - public String getSubject() { - return subject; - } - - public String getTemplateName() { - return templateName; - } - - public Map getParams() { - return params; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/SMTPProvider.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/SMTPProvider.java deleted file mode 100644 index 8cf837f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/SMTPProvider.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.semantic.openscore.core.email; - -import javax.annotation.Resource; -import javax.enterprise.context.ApplicationScoped; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; -import java.util.Date; - -@ApplicationScoped -public class SMTPProvider implements MailProvider { - - @Resource(lookup = "EMailME") - private Session mailSession; - - @Override - public void send(String to, String subject, String email) { - MimeMessage message = new MimeMessage(mailSession); - try { - message.setFrom(new InternetAddress(mailSession.getProperty("mail.from"))); - InternetAddress[] address = {new InternetAddress(to)}; - message.setRecipients(Message.RecipientType.TO, address); - message.setSubject(subject); - message.setSentDate(new Date()); - message.setText(email); - Transport.send(message); - } catch (MessagingException ex) { - ex.printStackTrace(); - } - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/StdoutMailSender.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/StdoutMailSender.java deleted file mode 100644 index 8899573..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/email/StdoutMailSender.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.semantic.openscore.core.email; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.inject.Alternative; - -@Alternative -@ApplicationScoped -public class StdoutMailSender implements MailProvider { - - private Logger logger = LoggerFactory.getLogger(StdoutMailSender.class); - - public StdoutMailSender() { - } - - @Override - public void send(String to, String subject, String email) { - logger.info(email); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/ApplicationException.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/ApplicationException.java deleted file mode 100644 index 9cb2b95..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/ApplicationException.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.semantic.openscore.core.exceptions; - -public abstract class ApplicationException extends RuntimeException { - - public ApplicationException(String message) { - super(message); - } - - public ApplicationException(String message, - Throwable cause) { - super(message, - cause); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/EmailException.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/EmailException.java deleted file mode 100644 index a002387..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/EmailException.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.semantic.openscore.core.exceptions; - -public class EmailException extends ApplicationException { - public EmailException(String message) { - super(message); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/EntityNotFoundException.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/EntityNotFoundException.java deleted file mode 100644 index b4cd72f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/EntityNotFoundException.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.semantic.openscore.core.exceptions; - -public class EntityNotFoundException extends ApplicationException { - - public EntityNotFoundException(String message) { - super(message); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/NoSePuedeLeerInformacionException.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/NoSePuedeLeerInformacionException.java deleted file mode 100644 index c3b9402..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/NoSePuedeLeerInformacionException.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.semantic.openscore.core.exceptions; - -public class NoSePuedeLeerInformacionException extends ApplicationException { - - public NoSePuedeLeerInformacionException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/PartidoBloqueadoException.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/PartidoBloqueadoException.java deleted file mode 100644 index 659e1aa..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/PartidoBloqueadoException.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.semantic.openscore.core.exceptions; - -import java.text.MessageFormat; - -public class PartidoBloqueadoException extends ApplicationException { - public PartidoBloqueadoException(String local, String visitante) { - super(MessageFormat.format("El partido {0} - {1} se encuentra bloqueado", local, visitante)); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/ValidationException.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/ValidationException.java deleted file mode 100644 index b03c606..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/exceptions/ValidationException.java +++ /dev/null @@ -1,44 +0,0 @@ -package io.semantic.openscore.core.exceptions; - -import javax.validation.ConstraintViolation; -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import static java.util.stream.Collectors.joining; -import static java.util.stream.Collectors.toList; - -public class ValidationException extends ApplicationException { - - private final List data; - - public ValidationException(String message, List data) { - super(message); - this.data = data; - } - - public ValidationException(String message, Throwable e) { - super(message); - this.data = Collections.emptyList(); - } - - public static String generateMessage(Set> errors) { - return ValidationException.generateErrorsList(errors).stream().collect(joining("\n")); - } - - private static String processErrorMessage(ConstraintViolation objectConstraintViolation) { - return objectConstraintViolation.getPropertyPath().toString() + ": " - + objectConstraintViolation.getMessage(); - } - - public static List generateErrorsList(Set> errors) { - return errors.stream() - .map(objectConstraintViolation -> processErrorMessage(objectConstraintViolation)) - .collect(toList()); - } - - public List getData() { - return data; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/logging/BaseLogger.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/logging/BaseLogger.java deleted file mode 100644 index f53ef2f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/logging/BaseLogger.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.semantic.openscore.core.logging; - - -import org.slf4j.Logger; - -public abstract class BaseLogger { - - private Logger logger; - - public BaseLogger(Logger logger) { - this.logger = logger; - } - - public boolean isDebugEnabled() { - return this.getLogger().isDebugEnabled(); - } - - - protected Logger getLogger() { - return this.logger; - } - - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/logging/ServiceLogger.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/logging/ServiceLogger.java deleted file mode 100644 index 696ca95..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/logging/ServiceLogger.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.semantic.openscore.core.logging; - -import java.text.MessageFormat; - -public class ServiceLogger { - - public String emailInvalido(String email) { - return MessageFormat.format("El email <{0}> es inválido", email); - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/EquipoMapper.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/EquipoMapper.java deleted file mode 100644 index 72ae1d9..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/EquipoMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.semantic.openscore.core.mapping; - -import io.semantic.openscore.core.api.equipos.CrearEquipoDTO; -import io.semantic.openscore.core.api.equipos.EquipoDTO; -import io.semantic.openscore.core.model.Equipo; -import org.mapstruct.Mapper; - -import java.util.List; - -@Mapper(componentModel = "cdi") -public interface EquipoMapper { - - Equipo asEquipo(EquipoDTO equipoDTO); - - Equipo asEquipo(CrearEquipoDTO crearEquipoDTO); - - EquipoDTO asApi(Equipo equipo); - - List asApi(List equipos); - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/FaseMapper.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/FaseMapper.java deleted file mode 100644 index 822b7a3..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/FaseMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.semantic.openscore.core.mapping; - -import io.semantic.openscore.core.api.grupos.FaseDTO; -import io.semantic.openscore.core.model.Fase; -import org.mapstruct.Mapper; - -import java.util.List; - -@Mapper(componentModel = "cdi") -public interface FaseMapper { - - - FaseDTO asApi(Fase fase); - - List asApi(List fase); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/GrupoMapper.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/GrupoMapper.java deleted file mode 100644 index 4bde386..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/GrupoMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.semantic.openscore.core.mapping; - -import io.semantic.openscore.core.api.grupos.GrupoDTO; -import io.semantic.openscore.core.model.Grupo; -import org.mapstruct.Mapper; - -import java.util.List; - -@Mapper(componentModel = "cdi") -public interface GrupoMapper { - - GrupoDTO asApi(Grupo partido); - - List asApi(List partido); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PaisMapper.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PaisMapper.java deleted file mode 100644 index 6cc6887..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PaisMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.semantic.openscore.core.mapping; - -import io.semantic.openscore.core.api.paises.PaisDTO; -import io.semantic.openscore.core.model.Pais; -import org.mapstruct.Mapper; - -import java.util.List; - -@Mapper(componentModel = "cdi") -public interface PaisMapper { - - Pais asPais(PaisDTO paisDTO); - - PaisDTO asApi(Pais pais); - - List asApi(List pais); - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java deleted file mode 100644 index 7f73bac..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PartidoMapper.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.semantic.openscore.core.mapping; - -import io.semantic.openscore.core.api.partidos.CrearOUpdatePartidoDTO; -import io.semantic.openscore.core.api.partidos.PartidoDTO; -import io.semantic.openscore.core.api.partidos.ResultadoDTO; -import io.semantic.openscore.core.model.Partido; -import io.semantic.openscore.core.model.Resultado; -import org.mapstruct.Mapper; - -import java.util.List; - -@Mapper(componentModel = "cdi") -public interface PartidoMapper { - - PartidoDTO asApi(Partido partido); - - List asApi(List partido); - - Resultado asResultado(ResultadoDTO resultado); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java deleted file mode 100644 index a33e405..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/PronosticoMapper.java +++ /dev/null @@ -1,36 +0,0 @@ -package io.semantic.openscore.core.mapping; - -import io.semantic.openscore.core.api.pronosticos.CrearPronosticoDTO; -import io.semantic.openscore.core.api.pronosticos.PartidoPronosticoDTO; -import io.semantic.openscore.core.api.pronosticos.PronosticoDTO; -import io.semantic.openscore.core.model.Partido; -import io.semantic.openscore.core.model.Pronostico; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.MappingTarget; -import org.mapstruct.Mappings; - -import java.util.List; - -@Mapper(componentModel = "cdi") -public interface PronosticoMapper { - - - PronosticoDTO asApi(Pronostico pronostico); - - List asApi(List pronosticos); - - @Mappings({ - @Mapping(source = "partido", target = "partido", ignore = true) - }) - Pronostico asPronostico(CrearPronosticoDTO crearPronostico); - - PartidoPronosticoDTO asApiPronostico(Partido partido); - - List asApiPronostico(List partido); - - @Mappings({ - @Mapping(source = "partido", target = "partido", ignore = true) - }) - void updatePronostico(CrearPronosticoDTO crearPronostico, @MappingTarget Pronostico pronostico); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/UsuarioMapper.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/UsuarioMapper.java deleted file mode 100644 index be1378c..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/mapping/UsuarioMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -package io.semantic.openscore.core.mapping; - -import io.semantic.openscore.core.api.admin.UsuarioCompletoDTO; -import io.semantic.openscore.core.api.usuarios.CrearUsuarioDTO; -import io.semantic.openscore.core.api.usuarios.UpdateUsuarioDTO; -import io.semantic.openscore.core.api.usuarios.UsuarioDTO; -import io.semantic.openscore.core.model.Usuario; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.MappingTarget; -import org.mapstruct.Mappings; - -import java.util.List; - -@Mapper(componentModel = "cdi") -public interface UsuarioMapper { - - Usuario asUsuario(UsuarioDTO api); - - @Mappings({ - @Mapping(source = "pais", target = "pais", ignore = true) - }) - Usuario asUsuario(CrearUsuarioDTO crearUsuario); - - @Mappings({ - @Mapping(source = "pais", target = "pais", ignore = true), - }) - void updateUsuario(UpdateUsuarioDTO usuarioDTO, @MappingTarget Usuario car); - - UsuarioDTO asApi(Usuario usuario); - - List asApi(List usuario); - - List asCompletoApi(List usuario); - - UsuarioCompletoDTO asCompletoApi(Usuario usuario); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Equipo.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Equipo.java deleted file mode 100644 index 9d52a8d..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Equipo.java +++ /dev/null @@ -1,47 +0,0 @@ -package io.semantic.openscore.core.model; - -import javax.persistence.Entity; -import javax.persistence.ManyToOne; - -@Entity -public class Equipo extends Storable { - - private String nombre; - private String codigo; - private String logo; - - - public Equipo() { - } - - public Equipo(String codigo, String nombre, String logo) { - this.nombre = nombre; - this.codigo = codigo; - this.logo = logo; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public String getLogo() { - return logo; - } - - public void setLogo(String logo) { - this.logo = logo; - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Fase.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Fase.java deleted file mode 100644 index 59eb9ae..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Fase.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.semantic.openscore.core.model; - -import javax.persistence.Entity; - -@Entity -public class Fase extends Storable { - - public static final String GRUPO = "GRUPO"; - public static final String OCTAVOS = "OCTAVOS"; - public static final String CUARTOS = "CUARTOS"; - public static final String SEMI = "SEMI"; - public static final String FINAL = "FINAL"; - public static final String TERCER = "TERCER"; - - private String codigo; - private String nombre; - private Integer puntos; - - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public Integer getPuntos() { - return puntos; - } - - public void setPuntos(Integer puntos) { - this.puntos = puntos; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Ganador.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Ganador.java deleted file mode 100644 index 212b3df..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Ganador.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.semantic.openscore.core.model; - -public enum Ganador { - - LOCAL, - VISITANTE, - EMPATE -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Grupo.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Grupo.java deleted file mode 100644 index 2597545..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Grupo.java +++ /dev/null @@ -1,36 +0,0 @@ -package io.semantic.openscore.core.model; - -import javax.persistence.Entity; - -@Entity -public class Grupo extends Storable { - - public final static String GRUPO_A = "GRUPO_A"; - public final static String GRUPO_B = "GRUPO_B"; - public final static String GRUPO_C = "GRUPO_C"; - public final static String GRUPO_D = "GRUPO_D"; - public final static String GRUPO_E = "GRUPO_E"; - public final static String GRUPO_F = "GRUPO_F"; - public final static String GRUPO_G = "GRUPO_G"; - public final static String GRUPO_H = "GRUPO_H"; - public final static String NONE = "NONE"; - - private String codigo; - private String nombre; - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getCodigo() { - return codigo; - } - - public String getNombre() { - return nombre; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Pais.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Pais.java deleted file mode 100644 index d6b5e62..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Pais.java +++ /dev/null @@ -1,48 +0,0 @@ -package io.semantic.openscore.core.model; - -import javax.persistence.Entity; -import javax.validation.constraints.NotNull; - -@Entity -public class Pais extends Storable { - - @NotNull - private String nombre; - - @NotNull - private String codigo; - - public Pais() { - } - - public Pais(String codigo, String nombre) { - this.setCodigo(codigo); - this.setNombre(nombre); - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof Pais) { - return this.getCodigo().equals(((Pais) obj).getCodigo()); - } else { - return super.equals(obj); - } - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Partido.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Partido.java deleted file mode 100644 index a41ff1d..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Partido.java +++ /dev/null @@ -1,132 +0,0 @@ -package io.semantic.openscore.core.model; - -import javax.persistence.Embedded; -import javax.persistence.Entity; -import javax.persistence.ManyToOne; -import java.util.Date; - -@Entity -public class Partido extends Storable { - - @ManyToOne - private Equipo local; - - @ManyToOne - private Equipo visitante; - private Date dia; - private String lugar; - private int fecha; - - @ManyToOne - private Grupo grupo; - - @ManyToOne - private Fase fase; - - @Embedded - private Resultado resultado; - - public Equipo getLocal() { - return local; - } - - public void setLocal(Equipo local) { - this.local = local; - } - - public Equipo getVisitante() { - return visitante; - } - - public void setVisitante(Equipo visitante) { - this.visitante = visitante; - } - - public Date getDia() { - return dia; - } - - public void setDia(Date dia) { - this.dia = dia; - } - - public String getLugar() { - return lugar; - } - - public void setLugar(String lugar) { - this.lugar = lugar; - } - - public Grupo getGrupo() { - return grupo; - } - - public void setGrupo(Grupo grupo) { - this.grupo = grupo; - } - - public Fase getFase() { - return fase; - } - - public void setFase(Fase fase) { - this.fase = fase; - } - - public Resultado getResultado() { - return resultado; - } - - public void setResultado(Resultado resultado) { - this.resultado = resultado; - } - - public int getPuntos(Pronostico pronostico) { - - if (this.getResultado() == null) { - return 0; - } - - int puntosAsignables = calcularPuntos(); - Ganador ganador = this.getResultado().getGanador(); - if (isSumaPuntos(pronostico, ganador)) { - return puntosAsignables; - } else { - return 0; - } - } - - private boolean isSumaPuntos(Pronostico pronostico, Ganador ganador) { - return pronostico.isLocal() && Ganador.LOCAL.equals(ganador) || - pronostico.isVisitante() && Ganador.VISITANTE.equals(ganador) || - pronostico.isEmpate() && Ganador.EMPATE.equals(ganador); - } - - - private int calcularPuntos() { - return this.getFase().getPuntos(); - } - - public boolean isBloqueado() { - return this.getDia().getTime() <= new Date().getTime() + 900000; - } - - public PartidoStatus getStatus() { - if (this.getResultado() != null) { - return PartidoStatus.FINISHED; - } else if (this.isBloqueado()) { - return PartidoStatus.BLOCKED; - } else { - return PartidoStatus.PENDING; - } - } - - public int getFecha() { - return fecha; - } - - public void setFecha(int fecha) { - this.fecha = fecha; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PartidoStatus.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PartidoStatus.java deleted file mode 100644 index 6528dec..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PartidoStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package io.semantic.openscore.core.model; - -public enum PartidoStatus { - BLOCKED, PENDING, FINISHED -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Post.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Post.java deleted file mode 100644 index f3c8ee1..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Post.java +++ /dev/null @@ -1,51 +0,0 @@ -package io.semantic.openscore.core.model; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; - -@Entity -public class Post extends Storable { - - private String titulo; - - @Column(columnDefinition = "TEXT") - private String contenido; - private String autor; - - @Enumerated(EnumType.STRING) - private PostStatus status; - - public String getTitulo() { - return titulo; - } - - public void setTitulo(String titulo) { - this.titulo = titulo; - } - - public String getContenido() { - return contenido; - } - - public void setContenido(String contenido) { - this.contenido = contenido; - } - - public PostStatus getStatus() { - return status; - } - - public void setStatus(PostStatus status) { - this.status = status; - } - - public String getAutor() { - return autor; - } - - public void setAutor(String autor) { - this.autor = autor; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PostStatus.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PostStatus.java deleted file mode 100644 index 8b6514d..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PostStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package io.semantic.openscore.core.model; - -public enum PostStatus { - PUBLICADO, BORRADOR -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PreguntaSecreta.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PreguntaSecreta.java deleted file mode 100644 index ad0aeaf..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/PreguntaSecreta.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.semantic.openscore.core.model; - -import javax.persistence.Entity; - -@Entity -public class PreguntaSecreta extends Storable { - - private String codigo; - private String pregunta; - - - public String getPregunta() { - return pregunta; - } - - public void setPregunta(String pregunta) { - this.pregunta = pregunta; - } - - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Pronostico.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Pronostico.java deleted file mode 100644 index 5826796..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Pronostico.java +++ /dev/null @@ -1,91 +0,0 @@ -package io.semantic.openscore.core.model; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -import javax.persistence.Entity; -import javax.persistence.ManyToOne; - - -@Entity -public class Pronostico extends Storable { - - private boolean local; - private boolean visitante; - private boolean empate; - - @ManyToOne - private Partido partido; - - @ManyToOne - private Usuario usuario; - - public boolean isLocal() { - return local; - } - - public void setLocal(boolean local) { - this.local = local; - } - - public boolean isVisitante() { - return visitante; - } - - public void setVisitante(boolean visitante) { - this.visitante = visitante; - } - - public boolean isEmpate() { - return empate; - } - - public void setEmpate(boolean empate) { - this.empate = empate; - } - - public Partido getPartido() { - return partido; - } - - public void setPartido(Partido partido) { - this.partido = partido; - } - - public Usuario getUsuario() { - return usuario; - } - - public void setUsuario(Usuario usuario) { - this.usuario = usuario; - } - - public void local() { - this.setLocal(true); - this.setVisitante(false); - this.setEmpate(false); - } - - public void empate() { - this.setLocal(false); - this.setVisitante(false); - this.setEmpate(true); - } - - public void visitante() { - this.setLocal(false); - this.setVisitante(true); - this.setEmpate(false); - } - - public int getPuntos() { - return this.getPartido().getPuntos(this); - } - - @Override - public String toString() { - return new GsonBuilder().setPrettyPrinting().create().toJson(this); - } - - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/RespuestaPreguntaSecreta.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/RespuestaPreguntaSecreta.java deleted file mode 100644 index 454b5c2..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/RespuestaPreguntaSecreta.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.semantic.openscore.core.model; - -import javax.persistence.Entity; -import javax.persistence.ManyToOne; - -@Entity -public class RespuestaPreguntaSecreta extends Storable { - - @ManyToOne - private PreguntaSecreta preguntaSecreta; - - private String respuesta; - - public PreguntaSecreta getPreguntaSecreta() { - return preguntaSecreta; - } - - public void setPreguntaSecreta(PreguntaSecreta preguntaSecreta) { - this.preguntaSecreta = preguntaSecreta; - } - - public String getRespuesta() { - return respuesta; - } - - public void setRespuesta(String respuesta) { - this.respuesta = respuesta; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Resultado.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Resultado.java deleted file mode 100644 index 969091c..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Resultado.java +++ /dev/null @@ -1,53 +0,0 @@ -package io.semantic.openscore.core.model; - -import javax.persistence.Column; -import javax.persistence.Embeddable; -import javax.persistence.Entity; -import javax.persistence.OneToOne; - -@Embeddable -public class Resultado { - - @Column(nullable = true) - private int local; - - @Column(nullable = true) - private int visitante; - - @OneToOne - private Partido partido; - - public int getLocal() { - return local; - } - - public void setLocal(int local) { - this.local = local; - } - - public int getVisitante() { - return visitante; - } - - public void setVisitante(int visitante) { - this.visitante = visitante; - } - - public Ganador getGanador() { - if (local > visitante) { - return Ganador.LOCAL; - } else if (local < visitante) { - return Ganador.VISITANTE; - } else { - return Ganador.EMPATE; - } - } - - public Partido getPartido() { - return partido; - } - - public void setPartido(Partido partido) { - this.partido = partido; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Rol.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Rol.java deleted file mode 100644 index 08fe3b1..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Rol.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.semantic.openscore.core.model; - -public enum Rol { - - ADMIN, USUARIO - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Storable.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Storable.java deleted file mode 100644 index ba1e892..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Storable.java +++ /dev/null @@ -1,67 +0,0 @@ -package io.semantic.openscore.core.model; - -import javax.persistence.*; -import java.util.Date; - -@MappedSuperclass -public class Storable { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private boolean deleted; - private Date creationDate; - private Date deletionDate; - private Date modificationDate; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public boolean isDeleted() { - return deleted; - } - - public void setDeleted(boolean deleted) { - this.deleted = deleted; - } - - public Date getCreationDate() { - return creationDate; - } - - public void setCreationDate(Date creationDate) { - this.creationDate = creationDate; - } - - public Date getDeletionDate() { - return deletionDate; - } - - public void setDeletionDate(Date deletionDate) { - this.deletionDate = deletionDate; - } - - public Date getModificationDate() { - return modificationDate; - } - - public void setModificationDate(Date modificationDate) { - this.modificationDate = modificationDate; - } - - @PrePersist - public void prePersist() { - if (this.id == 0) { - this.creationDate = new Date(); - } - if (this.deleted) { - this.deletionDate = new Date(); - } - this.modificationDate = new Date(); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Usuario.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Usuario.java deleted file mode 100644 index 4f970ad..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/model/Usuario.java +++ /dev/null @@ -1,112 +0,0 @@ -package io.semantic.openscore.core.model; - -import org.hibernate.validator.constraints.Email; -import org.hibernate.validator.constraints.Length; - -import javax.persistence.*; -import javax.validation.constraints.NotNull; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -@Entity -public class Usuario extends Storable { - - - @NotNull - @Length(min = 2) - private String nombre; - - @NotNull - @Length(min = 2) - private String apellido; - - @NotNull - @ManyToOne - private Pais pais; - - @NotNull - @Email - @Column(unique = true) - private String email; - - @NotNull - private String password; - - @OneToMany() - private Set pronosticos; - - public Usuario() { - this.pronosticos = new HashSet<>(); - } - - @ElementCollection - @CollectionTable(name = "roles", joinColumns = @JoinColumn(name = "usuario_id")) - @Enumerated(EnumType.STRING) - private Set roles; - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getApellido() { - return apellido; - } - - public void setApellido(String apellido) { - this.apellido = apellido; - } - - public Pais getPais() { - return pais; - } - - public void setPais(Pais pais) { - this.pais = pais; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public Set getRoles() { - return roles; - } - - public void setRoles(Set roles) { - this.roles = roles; - } - - public Set getPronosticos() { - return pronosticos; - } - - public void setPronosticos(Set pronosticos) { - this.pronosticos = pronosticos; - } - - public void addPronostico(Pronostico pronostico) { - this.pronosticos.add(pronostico); - } - - public int getPuntos() { - return this.getPronosticos().stream().mapToInt(Pronostico::getPuntos).sum(); - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/EquiposRepository.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/EquiposRepository.java deleted file mode 100644 index d533417..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/EquiposRepository.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Equipo; - -import javax.ejb.Stateless; -import javax.persistence.TypedQuery; -import java.util.List; -import java.util.Optional; - -@Stateless -public class EquiposRepository extends Repository { - - public static final String FIND_BY_CODIGO = "select p from Equipo p where p.codigo = :codigo"; - - public EquiposRepository() { - super(Equipo.class); - } - - public boolean exist(String codigo) { - TypedQuery query = this.createQuery(FIND_BY_CODIGO); - query.setParameter("codigo", codigo); - return this.findByQuery(query).size() > 0; - } - - public Optional findByCodigo(String codigo) { - TypedQuery query = this.createQuery(FIND_BY_CODIGO); - query.setParameter("codigo", codigo); - List found = this.findByQuery(query); - if (found.isEmpty()) { - return Optional.empty(); - } else { - return Optional.of(found.get(0)); - } - } - - @Override - public boolean exist(Equipo entity) { - return false; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/FaseRepository.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/FaseRepository.java deleted file mode 100644 index 9e46c00..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/FaseRepository.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Fase; - -import javax.ejb.Stateless; -import javax.persistence.TypedQuery; -import java.util.List; -import java.util.Optional; - -@Stateless -public class FaseRepository extends Repository { - - private static final String FIND_ENTITY_BY_CODIGO_QUERY = "select p from Fase p where p.codigo = :codigo"; - - public FaseRepository() { - super(Fase.class); - } - - public boolean exist(String codigo) { - TypedQuery query = this.createQuery(FIND_ENTITY_BY_CODIGO_QUERY); - query.setParameter("codigo", codigo); - return this.findByQuery(query).size() > 0; - } - - public Optional findByCodigo(String codigo) { - TypedQuery query = this.createQuery(FIND_ENTITY_BY_CODIGO_QUERY); - query.setParameter("codigo", codigo); - List results = query.getResultList(); - if (results.isEmpty()) { - return Optional.empty(); - } else { - return Optional.of(results.get(0)); - } - } - - @Override - public boolean exist(Fase entity) { - return false; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/GrupoRepository.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/GrupoRepository.java deleted file mode 100644 index e5af623..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/GrupoRepository.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Equipo; -import io.semantic.openscore.core.model.Grupo; - -import javax.ejb.Stateless; -import javax.persistence.TypedQuery; -import java.util.List; -import java.util.Optional; - -@Stateless -public class GrupoRepository extends Repository { - - private static final String FIND_ENTITY_BY_CODIGO_QUERY = "select p from Grupo p where p.codigo = :codigo"; - - public GrupoRepository() { - super(Grupo.class); - } - - public boolean exist(String codigo) { - TypedQuery query = this.createQuery(FIND_ENTITY_BY_CODIGO_QUERY); - query.setParameter("codigo", codigo); - return this.findByQuery(query).size() > 0; - } - - public Optional findByCodigo(String codigo) { - TypedQuery query = this.createQuery(FIND_ENTITY_BY_CODIGO_QUERY); - query.setParameter("codigo", codigo); - List found = this.findByQuery(query); - if (found.isEmpty()) { - return Optional.empty(); - } else { - return Optional.of(found.get(0)); - } - } - - @Override - public boolean exist(Grupo entity) { - return false; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Page.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Page.java deleted file mode 100644 index 1400de4..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Page.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.semantic.openscore.core.repository; - -public class Page { - - private int page; - private int pageSize; - - public Page(int page, - int pageSize) { - - this.page = page; - this.pageSize = pageSize; - } - - public int getPage() { - return page; - } - - public int getPageSize() { - return pageSize; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PaisRepository.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PaisRepository.java deleted file mode 100644 index 21c2fc1..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PaisRepository.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Pais; - -import javax.ejb.Stateless; -import javax.persistence.EntityManager; -import javax.persistence.TypedQuery; - -@Stateless -public class PaisRepository extends Repository { - - private static final String FIND_PAIS_BY_CODIGO_QUERY = "select p from Pais p where p.codigo = :codigo"; - - public PaisRepository() { - super(Pais.class); - } - - public PaisRepository(EntityManager entityManager) { - super(Pais.class, entityManager); - } - - public boolean exist(Pais pais) { - TypedQuery query = this.createQuery("select p from Pais p where p.codigo = :codigo"); - query.setParameter("codigo", pais.getCodigo()); - return this.findByQuery(query).size() > 0; - } - - public boolean exist(String codigo) { - TypedQuery query = this.createQuery("select p from Pais p where p.codigo = :codigo"); - query.setParameter("codigo", codigo); - return this.findByQuery(query).size() > 0; - } - - public Pais findByCodigo(String codigo) { - TypedQuery query = this.createQuery(FIND_PAIS_BY_CODIGO_QUERY); - query.setParameter("codigo", codigo); - return query.getSingleResult(); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PartidoRepository.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PartidoRepository.java deleted file mode 100644 index 492756e..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PartidoRepository.java +++ /dev/null @@ -1,110 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Fase; -import io.semantic.openscore.core.model.Grupo; -import io.semantic.openscore.core.model.Partido; - -import javax.ejb.Stateless; -import javax.persistence.TemporalType; -import javax.persistence.TypedQuery; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.TimeZone; - -@Stateless -public class PartidoRepository extends Repository { - - private static final String EXIST = "select e from Partido e where " + - "e.local.codigo = :local AND " + - "e.visitante.codigo = :visitante AND " + - "e.fase.id = :fase AND " + - "e.grupo.id = :grupo"; - - private static final String FIND_ALL_BY_GROUP = "from Partido where " + - "grupo.codigo = :grupo " + - "order by dia asc"; - - private static final String FIND_ALL_BY_FASE = "from Partido where " + - "fase.codigo = :fase " + - "order by dia asc"; - - private static final String FIND_ALL_BY_FECHA = "from Partido where " + - "fecha = :fecha " + - "order by dia asc"; - - private static final String FIND_ALL_BY_DIA = "from Partido where " + - "cast(dia as date) BETWEEN :dia1 AND :dia2 " + - "order by dia asc"; - - private static final String FIND_ALL_FECHAS = "select distinct p.fecha from Partido p group by p.fecha order by p.fecha asc"; - - - public PartidoRepository() { - super(Partido.class); - } - - public boolean exist(String codigoLocal, String codigoVisitante, Grupo grupo, Fase fase) { - TypedQuery query = this.createQuery(EXIST) - .setParameter("local", codigoLocal) - .setParameter("visitante", codigoVisitante) - .setParameter("fase", fase.getId()) - .setParameter("grupo", grupo.getId()); - - return this.findByQuery(query).size() > 0; - } - - public List findAllByGrupo(String grupo) { - TypedQuery query = this.createQuery(FIND_ALL_BY_GROUP) - .setParameter("grupo", grupo); - return this.findByQuery(query); - } - - public List findAllByDia(long dia) { - - Calendar dia1 = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - dia1.setTimeInMillis(dia); - dia1.set(Calendar.HOUR, 6); - dia1.set(Calendar.MINUTE, 0); - - Calendar dia2 = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - dia2.setTimeInMillis(dia); - dia2.set(Calendar.HOUR, 6); - dia2.set(Calendar.MINUTE, 0); - dia2.add(Calendar.DATE, 1); - - - - TypedQuery query = this.createQuery(FIND_ALL_BY_DIA) - .setParameter("dia1", dia1, TemporalType.DATE) - .setParameter("dia2", dia2, TemporalType.DATE); - return this.findByQuery(query); - } - - public List findAllByFase(String fase) { - TypedQuery query = this.createQuery(FIND_ALL_BY_FASE) - .setParameter("fase", fase); - return this.findByQuery(query); - } - - public List findAllByFecha(int fecha) { - TypedQuery query = this.createQuery(FIND_ALL_BY_FECHA) - .setParameter("fecha", fecha); - return this.findByQuery(query); - } - - public List findAllFechas() { - return this.entityManager.createQuery(FIND_ALL_FECHAS).getResultList(); - } - - @Override - public boolean exist(Partido entity) { - return this.exist(entity.getLocal().getCodigo(), - entity.getVisitante().getCodigo(), - entity.getGrupo(), - entity.getFase()); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PostRepository.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PostRepository.java deleted file mode 100644 index 68ba048..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PostRepository.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Post; -import io.semantic.openscore.core.model.PostStatus; - -import javax.ejb.Stateless; -import javax.persistence.TypedQuery; -import java.util.List; - -@Stateless -public class PostRepository extends Repository { - - private static final String FIND_ALL_BY_STATUS = "from Post where status = :status order by modificationDate"; - - public PostRepository() { - super(Post.class); - } - - public List findAllByStatus(PostStatus postStatus) { - TypedQuery query = this.createQuery(FIND_ALL_BY_STATUS); - query.setParameter("status",postStatus); - return this.findByQuery(query); - } - - @Override - public boolean exist(Post entity) { - return false; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PreguntaSecretaRepository.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PreguntaSecretaRepository.java deleted file mode 100644 index c7444b8..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PreguntaSecretaRepository.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.PreguntaSecreta; - -import javax.ejb.Stateless; -import javax.persistence.EntityManager; - -@Stateless -public class PreguntaSecretaRepository extends Repository { - - - public PreguntaSecretaRepository() { - super(PreguntaSecreta.class); - } - - public PreguntaSecretaRepository(EntityManager entityManager) { - super(PreguntaSecreta.class, entityManager); - } - - - @Override - public boolean exist(PreguntaSecreta entity) { - return false; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PronosticoRepository.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PronosticoRepository.java deleted file mode 100644 index c73b93a..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/PronosticoRepository.java +++ /dev/null @@ -1,65 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Pronostico; - -import javax.ejb.Stateless; -import java.util.List; -import java.util.Optional; - -@Stateless -public class PronosticoRepository extends Repository { - - private static final String FIND_BY_ID_AND_USER = "select e from Pronostico e where " + - "e.id = :id and " + - "e.usuario.id = :idUsuario and " + - "e.deleted = false"; - - private static final String FIND_BY_PARTIDO_AND_USER = "select e from Pronostico e where " + - "e.partido.id = :idPartido and " + - "e.usuario.id = :idUsuario and " + - "e.deleted = false"; - - private static final String FIND_BY_USER = "select e from Pronostico e where " + - "e.usuario.id = :idUsuario"; - - public PronosticoRepository() { - super(Pronostico.class); - } - - public List findByUsuario(long idUsuario) { - return this.createQuery(FIND_BY_USER) - .setParameter("idUsuario", idUsuario) - .getResultList(); - } - - public Optional findById(long id, long idUsuario) { - List results = this.createQuery(FIND_BY_ID_AND_USER) - .setParameter("id", id) - .setParameter("idUsuario", idUsuario) - .getResultList(); - - if (results.isEmpty()) { - return Optional.empty(); - } else { - return Optional.of(results.get(0)); - } - } - - public Optional findByPartidoAndUsuario(long idPartido, long idUsuario) { - List results = this.createQuery(FIND_BY_PARTIDO_AND_USER) - .setParameter("idPartido", idPartido) - .setParameter("idUsuario", idUsuario) - .getResultList(); - - if (results.isEmpty()) { - return Optional.empty(); - } else { - return Optional.of(results.get(0)); - } - } - - @Override - public boolean exist(Pronostico entity) { - return false; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Repository.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Repository.java deleted file mode 100644 index f33236a..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Repository.java +++ /dev/null @@ -1,171 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Storable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.TypedQuery; -import java.text.MessageFormat; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static java.util.stream.Collectors.joining; - -public abstract class Repository { - - protected final Class persistentClass; - - private Logger logger = LoggerFactory.getLogger(Repository.class); - - @PersistenceContext(unitName = "db") - protected EntityManager entityManager; - - public Repository(Class clazz) { - this.persistentClass = clazz; - } - - public Repository(Class clazz, - EntityManager entityManager) { - this(clazz); - this.entityManager = entityManager; - } - - public long save(T storable) { - if (storable.getId() != 0) { - this.entityManager.merge(storable); - } else { - this.entityManager.persist(storable); - } - return storable.getId(); - } - - public TypedQuery createQuery(String query) { - return this.entityManager.createQuery(query, - this.persistentClass); - } - - public Optional findById(long id) { - - List found = this.createQuery(MessageFormat.format("from {0} s where s.id=:id and s.deleted=false", - this.persistentClass.getSimpleName())).setParameter("id", - id).getResultList(); - - if (!found.isEmpty()) { - return Optional.of(found.get(0)); - } else { - return Optional.empty(); - } - } - - public Optional findByIdWithDeleted(long id) { - - List found = this.createQuery(MessageFormat.format("from {0} s where s.id=:id", - this.persistentClass.getSimpleName())).setParameter("id", - id).getResultList(); - - if (!found.isEmpty()) { - return Optional.of(found.get(0)); - } else { - return Optional.empty(); - } - } - - public List findByQuery(TypedQuery query, - Page page) { - - return query.setFirstResult(page.getPage() * page.getPageSize()) - .setMaxResults(page.getPageSize()) - .getResultList(); - } - - public List findByQuery(TypedQuery query) { - - return query.getResultList(); - } - - public void hardDeleteById(long id) { - Optional storable = this.findById(id); - storable.ifPresent(entity -> entityManager.remove(entity)); - } - - public void hardDeleteByQuery(TypedQuery query) { - List found = this.findByQuery(query, - new Page(0, - 0)); - found.forEach(entity -> entityManager.remove(entity)); - } - - public void deleteByQuery(TypedQuery query) { - List found = this.findByQuery(query, - new Page(0, - 0)); - found.forEach(elem -> { - elem.setDeleted(true); - save(elem); - }); - } - - public void deleteById(long id) { - Optional found = this.findById(id); - found.ifPresent(elem -> { - elem.setDeleted(true); - this.save(elem); - }); - } - - public List findAll(Page page) { - TypedQuery query = this.createQuery(MessageFormat.format("from {0}", - this.persistentClass.getSimpleName())); - return this.findByQuery(query, - page); - } - - public List findAll() { - TypedQuery query = this.createQuery(MessageFormat.format("from {0}", - this.persistentClass.getSimpleName())); - return this.findByQuery(query); - } - - public List findAll(Map parameters, Map sort) { - String queryString = this.buildQuery(parameters, sort); - TypedQuery query = this.createQuery(queryString); - - parameters.entrySet().forEach(entry -> { - query.setParameter(entry.getKey().replace(".", "_"), entry.getValue()); - }); - - return this.findByQuery(query); - } - - private String buildQuery(Map parameters, Map sort) { - - - String queryString = "from {0} "; - - if (!parameters.isEmpty()) { - queryString += "where "; - queryString += parameters.entrySet() - .stream() - .map(entry -> entry.getKey() + " = :" + entry.getKey().replace(".", "_")) - .collect(joining(" AND ")); - } - - - String formatted = MessageFormat.format(queryString, - this.persistentClass.getSimpleName()); - - if (!sort.isEmpty()) { - formatted += " order by " + - sort.entrySet() - .stream() - .map(entry -> entry.getKey() + " " + entry.getValue().toString()) - .collect(joining(" , ")); - } - return formatted; - } - - public abstract boolean exist(T entity); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Sort.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Sort.java deleted file mode 100644 index 3fd57ae..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/Sort.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.semantic.openscore.core.repository; - -public enum Sort { - ASC, DESC; - - @Override - public String toString() { - return super.toString().toLowerCase(); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/UsuarioRepository.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/UsuarioRepository.java deleted file mode 100644 index 927b741..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/UsuarioRepository.java +++ /dev/null @@ -1,51 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Usuario; - -import javax.ejb.Stateless; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import java.util.List; -import java.util.Optional; - -@Stateless -public class UsuarioRepository extends Repository { - - public static final String FIND_BY_EMAIL = "from Usuario s where s.email=:email"; - public static final String FIND_BY_COUNTRY = "from Usuario s where s.pais.codigo=:pais"; - - @Inject - public UsuarioRepository() { - super(Usuario.class); - } - - public UsuarioRepository(EntityManager entityManager) { - super(Usuario.class); - this.entityManager = entityManager; - - } - - public Optional findByEmail(String email) { - List found = this.createQuery(FIND_BY_EMAIL).setParameter("email", email).getResultList(); - - if (!found.isEmpty()) { - return Optional.of(found.get(0)); - } else { - return Optional.empty(); - } - } - - public boolean exist(String email) { - return this.findByEmail(email).isPresent(); - } - - public List findByCountry(String pais) { - List found = this.createQuery(FIND_BY_COUNTRY).setParameter("pais", pais.toUpperCase()).getResultList(); - return found; - } - - @Override - public boolean exist(Usuario entity) { - return false; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java deleted file mode 100644 index 9e67fca..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java +++ /dev/null @@ -1,68 +0,0 @@ -package io.semantic.openscore.core.repository.startup; - -public class PartidoData { - - private String local; - private String visitante; - private String dia; - private String fecha; - private String lugar; - private String grupo; - private String fase; - - public String getLocal() { - return local; - } - - public void setLocal(String local) { - this.local = local; - } - - public String getVisitante() { - return visitante; - } - - public void setVisitante(String visitante) { - this.visitante = visitante; - } - - public String getDia() { - return dia; - } - - public void setDia(String dia) { - this.dia = dia; - } - - public String getLugar() { - return lugar; - } - - public void setLugar(String lugar) { - this.lugar = lugar; - } - - public String getGrupo() { - return grupo; - } - - public void setGrupo(String grupo) { - this.grupo = grupo; - } - - public String getFase() { - return fase; - } - - public void setFase(String fase) { - this.fase = fase; - } - - public String getFecha() { - return fecha; - } - - public void setFecha(String fecha) { - this.fecha = fecha; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/StartupManager.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/StartupManager.java deleted file mode 100644 index dda0061..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/StartupManager.java +++ /dev/null @@ -1,46 +0,0 @@ -package io.semantic.openscore.core.repository.startup; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.context.Initialized; -import javax.enterprise.event.Observes; -import javax.enterprise.inject.Instance; -import javax.inject.Inject; -import java.text.MessageFormat; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.StreamSupport; - -@ApplicationScoped -public class StartupManager { - - private List steps; - private Logger logger = LoggerFactory.getLogger(StartupManager.class); - - public StartupManager() { - - } - - @Inject - public StartupManager(Instance startupSteps) { - steps = StreamSupport.stream(startupSteps.spliterator(), false).collect(Collectors.toList()); - } - - - public void initialize(@Observes @Initialized(ApplicationScoped.class) Object init) { - this.logger.info(MessageFormat.format("StartupSteps found: {0}", this.steps.size())); - Collections.sort(this.steps, Comparator.comparingInt(StartupStep::priority)); - this.logger.info(MessageFormat.format("StartupSteps sorted: \n|_ {0}", - this.steps.stream() - .map(startupStep -> startupStep.getClass().getSimpleName() + " -- p: " + startupStep.priority() + " -- " + startupStep.enabled()) - .collect(Collectors.joining("\n|_ ")))); - this.steps.stream() - .filter(startupStep -> startupStep.enabled()) - .forEach(StartupStep::run); - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/StartupStep.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/StartupStep.java deleted file mode 100644 index ae54ec5..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/StartupStep.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.semantic.openscore.core.repository.startup; - -public interface StartupStep { - - void run(); - - int priority(); - - default boolean enabled() { - return true; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java deleted file mode 100644 index fa54471..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilder.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.semantic.openscore.core.repository.startup.builder; - -import java.util.Date; - -public interface DiaBuilder { - - public static final String DATE_PATTERN = "dd-MM-yyyy'T'HH:mmZ"; - - Date getMatchDate(String fecha); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java deleted file mode 100644 index ae8b0ac..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/DiaBuilderImpl.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.semantic.openscore.core.repository.startup.builder; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class DiaBuilderImpl implements DiaBuilder { - - private SimpleDateFormat simpleDateFormat; - - public DiaBuilderImpl() { - simpleDateFormat = new SimpleDateFormat(DATE_PATTERN); - } - - public Date getMatchDate(String fecha) { - - try { - return simpleDateFormat.parse(fecha); - } catch (ParseException e) { - e.printStackTrace(); - return null; - } - - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java deleted file mode 100644 index 8e982fe..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/builder/TestDiaBuilder.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.semantic.openscore.core.repository.startup.builder; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.inject.Alternative; -import java.util.Calendar; -import java.util.Date; -import java.util.Random; - -@Alternative -public class TestDiaBuilder implements DiaBuilder { - - private Logger logger = LoggerFactory.getLogger(TestDiaBuilder.class); - private static final long ONE_MINUTE_IN_MILLIS = 60000; - private Random random = new Random(); - - public Date getMatchDate(String fecha) { - Calendar date = Calendar.getInstance(); - long t = date.getTimeInMillis(); - Date afterAddingTenMins = new Date(t + (random.nextInt(8 * 60) * ONE_MINUTE_IN_MILLIS)); - logger.info(afterAddingTenMins.toString()); - return afterAddingTenMins; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java deleted file mode 100644 index 8e6a9b0..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java +++ /dev/null @@ -1,64 +0,0 @@ -package io.semantic.openscore.core.repository.startup.steps; - -import io.semantic.openscore.core.model.Equipo; -import io.semantic.openscore.core.repository.EquiposRepository; -import io.semantic.openscore.core.repository.startup.StartupStep; - -import javax.inject.Inject; -import java.text.MessageFormat; - -public class CrearEquipos implements StartupStep { - - - private EquiposRepository equiposRepository; - - // private String baseUrl = "https://fsprdcdnpublic.azureedge.net/global-pictures/flags-fwc2018-3/"; -// private String baseUrl = "https://www.countryflags.io/{0}/flat/64.png"; - private String baseUrl = "https://restcountries.eu/data/{0}.svg"; - - public CrearEquipos() { - } - - @Inject - public CrearEquipos(EquiposRepository equiposRepository) { - this.equiposRepository = equiposRepository; - } - - @Override - public void run() { - - // GRUPO A - this.crearEquipoSiNoExiste("BRA", "Brasil"); - this.crearEquipoSiNoExiste("BOL", "Bolivia"); - this.crearEquipoSiNoExiste("VEN", "Venezuela"); - this.crearEquipoSiNoExiste("PER", "Peru"); - - // GRUPO B - this.crearEquipoSiNoExiste("ARG", "Argentina"); - this.crearEquipoSiNoExiste("COL", "Colombia"); - this.crearEquipoSiNoExiste("PRY", "Paraguay"); - this.crearEquipoSiNoExiste("QAT", "Qatar"); - - // GRUPO C - this.crearEquipoSiNoExiste("URY", "Uruguay"); - this.crearEquipoSiNoExiste("ECU", "Ecuador"); - this.crearEquipoSiNoExiste("JPN", "Japan"); - this.crearEquipoSiNoExiste("CHL", "Chile"); - } - - private String getLogo(String codigo) { - return MessageFormat.format(baseUrl, codigo.toLowerCase()); - } - - private void crearEquipoSiNoExiste(String codigo, String nombre) { - if (!this.equiposRepository.exist(codigo)) { - Equipo equipo = new Equipo(codigo, nombre, this.getLogo(codigo).toLowerCase()); - this.equiposRepository.save(equipo); - } - } - - @Override - public int priority() { - return 1000; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java deleted file mode 100644 index 53a0c60..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearGruposYFases.java +++ /dev/null @@ -1,77 +0,0 @@ -package io.semantic.openscore.core.repository.startup.steps; - -import io.semantic.openscore.core.model.Fase; -import io.semantic.openscore.core.model.Grupo; -import io.semantic.openscore.core.repository.FaseRepository; -import io.semantic.openscore.core.repository.GrupoRepository; -import io.semantic.openscore.core.repository.startup.StartupStep; - -import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.context.Initialized; -import javax.enterprise.event.Observes; -import javax.inject.Inject; - -public class CrearGruposYFases implements StartupStep { - - private GrupoRepository grupoRepository; - private FaseRepository faseRepository; - - public CrearGruposYFases() { - - } - - @Inject - public CrearGruposYFases(GrupoRepository grupoRepository, - FaseRepository faseRepository) { - - this.grupoRepository = grupoRepository; - this.faseRepository = faseRepository; - } - - @Override - public void run() { - this.crearEtapaSiNoExiste(Fase.GRUPO, this.crearFase(Fase.GRUPO, "Group", 1)); -// this.crearEtapaSiNoExiste(Fase.OCTAVOS, this.crearFase(Fase.OCTAVOS, "Eighth Finals", 2)); - this.crearEtapaSiNoExiste(Fase.CUARTOS, this.crearFase(Fase.CUARTOS, "Quarter Finals", 2)); - this.crearEtapaSiNoExiste(Fase.SEMI, this.crearFase(Fase.SEMI, "Semifinal", 3)); - this.crearEtapaSiNoExiste(Fase.TERCER, this.crearFase(Fase.TERCER, "Third Place", 4)); - this.crearEtapaSiNoExiste(Fase.FINAL, this.crearFase(Fase.FINAL, "Final", 4)); - - this.crearGrupoSiNoExiste(Grupo.GRUPO_A, this.crearGrupo(Grupo.GRUPO_A, "Group A")); - this.crearGrupoSiNoExiste(Grupo.GRUPO_B, this.crearGrupo(Grupo.GRUPO_B, "Group B")); - this.crearGrupoSiNoExiste(Grupo.NONE, this.crearGrupo(Grupo.NONE, "None")); - - } - - @Override - public int priority() { - return 0; - } - - private void crearGrupoSiNoExiste(String codigo, Grupo grupo) { - if (!this.grupoRepository.exist(codigo)) { - this.grupoRepository.save(grupo); - } - } - - private void crearEtapaSiNoExiste(String codigo, Fase estapa) { - if (!this.faseRepository.exist(codigo)) { - this.faseRepository.save(estapa); - } - } - - private Grupo crearGrupo(String codigo, String nombre) { - Grupo grupo = new Grupo(); - grupo.setCodigo(codigo); - grupo.setNombre(nombre); - return grupo; - } - - private Fase crearFase(String codigo, String nombre, int puntos) { - Fase fase = new Fase(); - fase.setCodigo(codigo.toUpperCase()); - fase.setNombre(nombre); - fase.setPuntos(puntos); - return fase; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPaises.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPaises.java deleted file mode 100644 index b2e6af7..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPaises.java +++ /dev/null @@ -1,60 +0,0 @@ -package io.semantic.openscore.core.repository.startup.steps; - -import io.semantic.openscore.core.model.Pais; -import io.semantic.openscore.core.repository.PaisRepository; -import io.semantic.openscore.core.repository.startup.StartupStep; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.inject.Inject; - -public class CrearPaises implements StartupStep { - - - Logger logger = LoggerFactory.getLogger(CrearPaises.class); - private PaisRepository paisRepository; - - public CrearPaises() { - } - - @Inject - public CrearPaises(PaisRepository paisRepository) { - this.paisRepository = paisRepository; - } - - @Override - public void run() { - - logger.info("Inicializando paises"); - - this.guardarSiNoExiste(crearPais("ARG", "Argentina")); - this.guardarSiNoExiste(crearPais("CHI", "Chile")); - this.guardarSiNoExiste(crearPais("PER", "Peru")); - this.guardarSiNoExiste(crearPais("COL", "Colombia")); - this.guardarSiNoExiste(crearPais("MEX", "Mexico")); - this.guardarSiNoExiste(crearPais("BRA", "Brazil")); - - logger.info("Inicial de paises completa"); - } - - @Override - public int priority() { - return 0; - } - - public void guardarSiNoExiste(Pais pais) { - if (!this.paisRepository.exist(pais)) { - logger.info("Se crea pais no existente: " + pais.getCodigo()); - this.paisRepository.save(pais); - } - } - - public Pais crearPais(String codigo, String nombre) { - Pais pais = new Pais(); - pais.setCodigo(codigo); - pais.setNombre(nombre); - return pais; - } - - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java deleted file mode 100644 index cee0eb2..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java +++ /dev/null @@ -1,93 +0,0 @@ -package io.semantic.openscore.core.repository.startup.steps; - -import com.fasterxml.jackson.core.type.TypeReference; -import io.semantic.openscore.core.model.Equipo; -import io.semantic.openscore.core.model.Fase; -import io.semantic.openscore.core.model.Grupo; -import io.semantic.openscore.core.model.Partido; -import io.semantic.openscore.core.repository.EquiposRepository; -import io.semantic.openscore.core.repository.FaseRepository; -import io.semantic.openscore.core.repository.GrupoRepository; -import io.semantic.openscore.core.repository.PartidoRepository; -import io.semantic.openscore.core.repository.startup.PartidoData; -import io.semantic.openscore.core.repository.startup.builder.DiaBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.inject.Inject; -import java.util.List; - -public class CrearPartidos extends FileBasedStartupStep { - - private Logger logger = LoggerFactory.getLogger(CrearPartidos.class); - - private EquiposRepository equiposRepository; - private GrupoRepository grupoRepository; - private FaseRepository faseRepository; - private DiaBuilder diaBuilder; - - - public CrearPartidos() { - super(Partido.class, null, new TypeReference>() { - }); - } - - @Inject - public CrearPartidos(PartidoRepository partidoRepository, - EquiposRepository equiposRepository, - GrupoRepository grupoRepository, - FaseRepository faseRepository, - DiaBuilder diaBuilder) { - - super(Partido.class, partidoRepository, new TypeReference>() { - }); - this.equiposRepository = equiposRepository; - this.grupoRepository = grupoRepository; - this.faseRepository = faseRepository; - this.diaBuilder = diaBuilder; - } - - - @Override - public String getFileName() { - return "data/partidos.yml"; - } - - @Override - protected Partido map(PartidoData partidoData) { - - Equipo local = getEquipo(partidoData.getLocal()); - Equipo visitante = getEquipo(partidoData.getVisitante()); - Partido partido = new Partido(); - partido.setLocal(local); - partido.setVisitante(visitante); - partido.setDia(diaBuilder.getMatchDate(partidoData.getDia())); - partido.setLugar(partidoData.getLugar()); - partido.setGrupo(getGrupo(partidoData.getGrupo())); - partido.setFecha(partido.getFecha()); - partido.setFase(getFase(partidoData.getFase())); - return partido; - - } - - private Equipo getEquipo(String codigoLocal) { - return this.equiposRepository.findByCodigo(codigoLocal).orElseThrow(() -> new IllegalArgumentException("El equipo " + codigoLocal + "no existe")); - } - - - private Grupo getGrupo(String codigo) { - logger.info(codigo); - return this.grupoRepository.findByCodigo(codigo).orElseThrow(() -> new IllegalArgumentException("El grupo " + codigo + "no existe")); - } - - private Fase getFase(String codigo) { - return this.faseRepository.findByCodigo(codigo).orElseThrow(() -> new IllegalArgumentException("La fase " + codigo + "no existe")); - - } - - - @Override - public int priority() { - return 2000; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPreguntaSecreta.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPreguntaSecreta.java deleted file mode 100644 index ec564c7..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPreguntaSecreta.java +++ /dev/null @@ -1,47 +0,0 @@ -package io.semantic.openscore.core.repository.startup.steps; - -import com.fasterxml.jackson.core.type.TypeReference; -import io.semantic.openscore.core.model.PreguntaSecreta; -import io.semantic.openscore.core.repository.PreguntaSecretaRepository; - -import javax.inject.Inject; -import java.util.List; - -public class CrearPreguntaSecreta extends FileBasedStartupStep { - - private static final String FILENAME = "data/preguntas.yml"; - - public CrearPreguntaSecreta() { - super(PreguntaSecreta.class, null, new TypeReference>() { - }); - } - - @Inject - public CrearPreguntaSecreta(PreguntaSecretaRepository preguntaSecretaService) { - super(PreguntaSecreta.class, preguntaSecretaService, new TypeReference>() { - }); - } - - @Override - public int priority() { - return 1000; - } - - @Override - public String getFileName() { - return FILENAME; - } - - @Override - protected PreguntaSecreta map(PreguntaSecretaData dataObject) { - PreguntaSecreta preguntaSecreta = new PreguntaSecreta(); - preguntaSecreta.setCodigo(dataObject.getCodigo()); - preguntaSecreta.setPregunta(dataObject.getPregunta()); - return preguntaSecreta; - } - - @Override - public boolean enabled() { - return false; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearUsuarioAdmin.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearUsuarioAdmin.java deleted file mode 100644 index 7b68576..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearUsuarioAdmin.java +++ /dev/null @@ -1,85 +0,0 @@ -package io.semantic.openscore.core.repository.startup.steps; - -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.model.Usuario; -import io.semantic.openscore.core.repository.PaisRepository; -import io.semantic.openscore.core.repository.UsuarioRepository; -import io.semantic.openscore.core.repository.startup.StartupStep; -import io.semantic.openscore.core.security.TokenGenerator; - -import javax.inject.Inject; -import java.util.Arrays; -import java.util.HashSet; - -public class CrearUsuarioAdmin implements StartupStep { - - private UsuarioRepository usuarioRepository; - private PaisRepository paisRepository; - private TokenGenerator tokenGenerator; - - public CrearUsuarioAdmin() { - - } - - @Inject - public CrearUsuarioAdmin(UsuarioRepository usuarioRepository, - PaisRepository paisRepository, - TokenGenerator tokenGenerator) { - this.usuarioRepository = usuarioRepository; - this.paisRepository = paisRepository; - this.tokenGenerator = tokenGenerator; - } - - @Override - public void run() { -// this.crearUsuarioSiNoExiste("admin@admin.com", this.crearUsuarioAdmin()); - this.crearUsuarioSiNoExiste("aparedes@redhat.com", this.crearUsuarioAparedes()); - this.crearUsuarioSiNoExiste("lberetta@redhat.com", this.crearUsuarioLberetta()); - - } - - @Override - public int priority() { - return 100; - } - - private void crearUsuarioSiNoExiste(String email, Usuario usuario) { - if (!this.usuarioRepository.findByEmail(email).isPresent()) { - this.usuarioRepository.save(usuario); - } - } - - private Usuario crearUsuarioAdmin() { - Usuario usuario = new Usuario(); - usuario.setRoles(new HashSet<>(Arrays.asList(Rol.ADMIN, Rol.USUARIO))); - usuario.setEmail("admin@admin.com"); - usuario.setApellido("Admin"); - usuario.setNombre("Admin"); - usuario.setPassword(tokenGenerator.generarPassword("admin")); - usuario.setPais(this.paisRepository.findByCodigo("ARG")); - return usuario; - } - - private Usuario crearUsuarioAparedes() { - Usuario usuario = new Usuario(); - usuario.setRoles(new HashSet<>(Arrays.asList(Rol.ADMIN, Rol.USUARIO))); - usuario.setEmail("aparedes@redhat.com"); - usuario.setApellido("Paredes"); - usuario.setNombre("Adriel"); - usuario.setPassword(tokenGenerator.generarPassword("admin")); - usuario.setPais(this.paisRepository.findByCodigo("ARG")); - return usuario; - } - - private Usuario crearUsuarioLberetta() { - Usuario usuario = new Usuario(); - usuario.setRoles(new HashSet<>(Arrays.asList(Rol.ADMIN, Rol.USUARIO))); - usuario.setEmail("lberetta@redhat.com"); - usuario.setApellido("Beretta"); - usuario.setNombre("Leandro"); - usuario.setPassword(tokenGenerator.generarPassword("admin")); - usuario.setPais(this.paisRepository.findByCodigo("ARG")); - return usuario; - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java deleted file mode 100644 index 26f476f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java +++ /dev/null @@ -1,67 +0,0 @@ -package io.semantic.openscore.core.repository.startup.steps; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import io.semantic.openscore.core.model.Storable; -import io.semantic.openscore.core.repository.Repository; -import io.semantic.openscore.core.repository.startup.StartupStep; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -public abstract class FileBasedStartupStep implements StartupStep { - - private final ObjectMapper objectMapper; - private Logger logger = LoggerFactory.getLogger(FileBasedStartupStep.class); - - private Class type; - private TypeReference> typeReference; - private Repository existService; - - public FileBasedStartupStep(Class type, Repository existsService, TypeReference> typeReference) { - this.type = type; - this.typeReference = typeReference; - this.objectMapper = new ObjectMapper(new YAMLFactory()); - this.existService = existsService; - } - - public abstract String getFileName(); - - @Override - public void run() { - List entities = this.loadYaml(this.getFileName()); - - entities.forEach(entity -> { - logger.info("{}", entity.getClass().getSimpleName()); - this.saveIfNotExist(entity); - }); - - } - - private List loadYaml(String fileName) { - try { - InputStream is = CrearPartidos.class.getClassLoader().getResourceAsStream(fileName); - return this.objectMapper.readValue(is, typeReference); - } catch (Exception e) { - logger.error("Error", e); - return new ArrayList<>(); - } - } - - private void saveIfNotExist(D dataObject) { - T entity = map(dataObject); - if (!this.existService.exist(entity)) { - logger.info("Creando {} = {}", this.type.getSimpleName(), entity); - this.existService.save(entity); - } - } - - protected abstract T map(D dataObject); - - - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/PreguntaSecretaData.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/PreguntaSecretaData.java deleted file mode 100644 index aabac6a..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/repository/startup/steps/PreguntaSecretaData.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.semantic.openscore.core.repository.startup.steps; - -public class PreguntaSecretaData { - private String codigo; - private String pregunta; - - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public String getPregunta() { - return pregunta; - } - - public void setPregunta(String pregunta) { - this.pregunta = pregunta; - } - - @Override - public String toString() { - return getCodigo() + " - " + getPregunta(); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/security/Secure.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/security/Secure.java deleted file mode 100644 index 0c27c5e..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/security/Secure.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.semantic.openscore.core.security; - -import io.semantic.openscore.core.model.Rol; - -import javax.ws.rs.NameBinding; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target({ElementType.TYPE, ElementType.METHOD}) -@Retention(value = RetentionPolicy.RUNTIME) -@NameBinding -public @interface Secure { - - Rol[] value() default {Rol.USUARIO}; -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/security/SecureFilter.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/security/SecureFilter.java deleted file mode 100644 index 4f297f6..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/security/SecureFilter.java +++ /dev/null @@ -1,75 +0,0 @@ -package io.semantic.openscore.core.security; - -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.model.Usuario; -import io.semantic.openscore.core.repository.UsuarioRepository; -import io.semantic.openscore.core.services.UserInfo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.inject.Inject; -import javax.ws.rs.NotAuthorizedException; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.ResourceInfo; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.ext.Provider; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; - -@Provider -@Secure -public class SecureFilter implements ContainerRequestFilter { - - @Context - ResourceInfo resourceInfo; - - private Logger logger = LoggerFactory.getLogger(SecureFilter.class); - private UserInfo userInfo; - private UsuarioRepository usuarioRepository; - - public SecureFilter() { - - } - - @Inject - public SecureFilter(UserInfo userInfo, - UsuarioRepository usuarioRepository) { - this.userInfo = userInfo; - this.usuarioRepository = usuarioRepository; - } - - @Override - public void filter(ContainerRequestContext containerRequestContext) { - - Secure secure = resourceInfo.getResourceMethod().getAnnotation(Secure.class); - List roles = Arrays.asList(secure.value()); - - logger.info("Roles autorizados: {}", roles); - - - TokenGenerator tokenGenerator = new TokenGenerator(); - String token = tokenGenerator.getTokenFromAuthHeader(containerRequestContext.getHeaderString(HttpHeaders.AUTHORIZATION)); - boolean isValid = tokenGenerator.verify(token); - - if (isValid) { - logger.info("Token valido"); - Optional usuarioOptional = usuarioRepository.findByEmail(tokenGenerator.getMail(token)); - Usuario usuario = usuarioOptional.orElseThrow(() -> new IllegalArgumentException("usuario inexistente")); - userInfo.setUsuario(usuario); - if (!usuario.getRoles().stream().anyMatch(rol -> roles.contains(rol))) { - logger.info("El usuario no contiene los roles necesarios"); - throw new NotAuthorizedException("El usuario no contiene los roles necesarios"); - } else { - logger.info("El usuario contiene los roles, continua la operacion"); - } - } else { - logger.info("El token es invalido"); - throw new NotAuthorizedException("El token no es valido"); - } - - } -} - diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/security/TokenGenerator.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/security/TokenGenerator.java deleted file mode 100644 index 1653072..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/security/TokenGenerator.java +++ /dev/null @@ -1,133 +0,0 @@ -package io.semantic.openscore.core.security; - -import java.util.Date; -import java.util.Set; - -import com.google.common.base.Charsets; -import com.google.common.hash.Hashing; -import com.nimbusds.jose.JWSAlgorithm; -import com.nimbusds.jose.JWSHeader; -import com.nimbusds.jose.JWSVerifier; -import com.nimbusds.jose.crypto.MACSigner; -import com.nimbusds.jose.crypto.MACVerifier; -import com.nimbusds.jwt.JWTClaimsSet; -import com.nimbusds.jwt.SignedJWT; -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.model.Usuario; -import org.apache.commons.lang3.RandomStringUtils; - -public class TokenGenerator { - - private static final String OPENSCORE_JWT_SECRET = "OPENSCORE_JWT_SECRET"; - private final String SECRET; - public static final String SUBJECT = "openscore"; - public static final String ISSUER = "openscore"; - public static final String USERNAME = "username"; - public static final String EMAIL = "email"; - public static final String NOMBRE = "nombre"; - public static final String APELLIDO = "apellido"; - public static final String ROLES = "roles"; - public static final JWSAlgorithm ALGORITMO = JWSAlgorithm.HS256; - public static final Date EXPIRACION_TOKEN = new Date(new Date().getTime() + 43800 * 60 * 1000); - - public TokenGenerator() { - String t = System.getenv(OPENSCORE_JWT_SECRET); - if (t != null && !t.isEmpty()) { - this.SECRET = t; - } else { - this.SECRET = "7ZXjPaKE3eJLY6ENu3zcZHIPE3dyOFru"; - } - } - - public String generarToken(Usuario usuario) { - - JWTClaimsSet claimsSet = new JWTClaimsSet.Builder() - .subject(SUBJECT) - .issuer(ISSUER) - .expirationTime(EXPIRACION_TOKEN) - .claim(EMAIL, - usuario.getEmail()) - .claim(NOMBRE, - usuario.getNombre()) - .claim(APELLIDO, - usuario.getApellido()) - .claim(ROLES, - usuario.getRoles()) - .build(); - - SignedJWT signedJWT = new SignedJWT(new JWSHeader(ALGORITMO), - claimsSet); - sign(signedJWT); - return signedJWT.serialize(); - } - - public String generarPassword(String password) { - return Hashing.sha256().hashString(password, - Charsets.UTF_8).toString(); - } - - public String getTokenFromAuthHeader(String authHeader) { - try { - String[] authorizationParts = authHeader.split(" "); - - return authorizationParts[1]; - } catch (Exception e) { - throw new IllegalArgumentException("token vacio o invalido"); - } - } - - public boolean verify(String token) { - try { - SignedJWT signedJWT = SignedJWT.parse(token); - JWSVerifier verifier = new MACVerifier(SECRET); - return signedJWT.verify(verifier) && - signedJWT.getJWTClaimsSet().getExpirationTime().before(new Date()); - } catch (Exception e) { - return false; - } - } - - public String getMail(String token) { - try { - SignedJWT signedJWT = SignedJWT.parse(token); - return (String) signedJWT.getJWTClaimsSet().getClaim(EMAIL); - } catch (Exception e) { - throw new RuntimeException("Error al firmar el token", - e); - } - } - - public Set getRoles(String token) { - try { - SignedJWT signedJWT = SignedJWT.parse(token); - return (Set) signedJWT.getJWTClaimsSet().getClaim(ROLES); - } catch (Exception e) { - throw new RuntimeException("Error al firmar el token", - e); - } - } - - private void sign(SignedJWT signedJWT) { - try { - - MACSigner signer = new MACSigner(SECRET); - signedJWT.sign(signer); - } catch (Exception e) { - throw new RuntimeException("Error al firmar el token", - e); - } - } - - public static String passwordRegex() { - return null; - } - - public String generateRandomToken() { - int length = 10; - boolean useLetters = true; - boolean useNumbers = false; - return RandomStringUtils.random(length, - useLetters, - useNumbers); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/RestUtil.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/RestUtil.java deleted file mode 100644 index 6f99780..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/RestUtil.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.semantic.openscore.core.services; - -import io.semantic.openscore.core.api.ApiResponse; - -public class RestUtil { - - public static ApiResponse ok(T data) { - return new ApiResponse<>(data); - } - - public static ApiResponse error(String error, - String description, - Object data) { - return new ApiResponse<>(error, - description, - data); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/UserInfo.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/UserInfo.java deleted file mode 100644 index b08c65f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/UserInfo.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.semantic.openscore.core.services; - -import io.semantic.openscore.core.model.Usuario; - -import javax.enterprise.context.RequestScoped; -import java.util.Optional; - -@RequestScoped -public class UserInfo { - - private Optional usuario; - - public UserInfo() { - usuario = Optional.empty(); - } - - public Optional getUsuario() { - return usuario; - } - - public void setUsuario(Usuario usuario) { - this.usuario = Optional.of(usuario); - } - - public long getUserId() { - return this.usuario.orElseThrow(() -> new IllegalArgumentException("Se necesita un usuario en la sesion para poder obtener el id")).getId(); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/AdminService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/AdminService.java deleted file mode 100644 index 493be30..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/AdminService.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.admin.UsuarioCompletoDTO; - -import javax.ws.rs.Consumes; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -@Path("admin") -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -public interface AdminService extends SearchService { - - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/DefinicionCompeticionesService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/DefinicionCompeticionesService.java deleted file mode 100644 index f8b6ed9..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/DefinicionCompeticionesService.java +++ /dev/null @@ -1,45 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.competiciones.CrearDefinicionCompeticionDTO; -import io.semantic.openscore.core.api.competiciones.DefinicionCompeticionDTO; -import io.semantic.openscore.core.api.partidos.CrearOUpdatePartidoDTO; -import io.semantic.openscore.core.api.partidos.PartidoDTO; - -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import java.util.List; - -@Path("competiciones") -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -public interface DefinicionCompeticionesService extends StandardService { - - - @GET - @Path("/{id}/partidos") - ApiResponse> getPartidos(@PathParam("id") long id); - - @GET - @Path("/{id}/partidos/{idPartido") - ApiResponse getPartido(@PathParam("id") long id, - @PathParam("idPartido") long idPartido); - - @POST - @Path("/{id}/partidos") - ApiResponse addPartido(@PathParam("id") long id, - CrearOUpdatePartidoDTO crearPartido); - - @POST - @Path("/{id}/partidos/{idPartido}") - ApiResponse updatePartido(@PathParam("id") long id, - @PathParam("idPartido") long idPartido, - CrearOUpdatePartidoDTO crearOUpdatePartidoDTO); - - @DELETE - @Path("/{id}/partidos/{idPartido}") - ApiResponse deletePartido(@PathParam("id") long id, - @PathParam("idPartido") long idPartido); - - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java deleted file mode 100644 index 0970fb1..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.equipos.CrearEquipoDTO; -import io.semantic.openscore.core.api.equipos.EquipoDTO; - -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import java.util.List; - -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -public interface EquiposService extends StandardService { - - @Path("/") - @GET - ApiResponse> getAll(@QueryParam("page") int page, - @QueryParam("pageSize") int pageSize); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/FasesService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/FasesService.java deleted file mode 100644 index 14cc273..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/FasesService.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.model.Fase; - -import javax.ws.rs.Consumes; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -@Path("fases") -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -public interface FasesService extends GetService { - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/GetService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/GetService.java deleted file mode 100644 index 630a5da..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/GetService.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; - -public interface GetService extends SearchService { - - - @Path("/{id}") - @GET - ApiResponse get(@PathParam("id") long id); - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/GruposService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/GruposService.java deleted file mode 100644 index 8260b24..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/GruposService.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.model.Grupo; - -import javax.ws.rs.Consumes; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -@Path("grupos") -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -public interface GruposService extends GetService { -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/InformationService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/InformationService.java deleted file mode 100644 index aa2d6e7..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/InformationService.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.information.Information; -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.security.Secure; - -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -@Path("info") -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -public interface InformationService { - - @GET - @Path("/") - ApiResponse getInformation(); - - @GET - @Path("/ping/secure") - @Secure({Rol.ADMIN, Rol.USUARIO}) - ApiResponse securePing(); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PaisesService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PaisesService.java deleted file mode 100644 index 96a4f4a..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PaisesService.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.paises.PaisDTO; - -import javax.ws.rs.Consumes; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -@Path("paises") -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -public interface PaisesService extends SearchService { - - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java deleted file mode 100644 index 456ef2c..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java +++ /dev/null @@ -1,50 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.partidos.CrearOUpdatePartidoDTO; -import io.semantic.openscore.core.api.partidos.PartidoDTO; -import io.semantic.openscore.core.api.partidos.ResultadoDTO; - -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import java.util.List; - -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -@Path("partidos") -public interface PartidosService { - - @GET - @Path("/") - ApiResponse> getAll(@QueryParam("page") int page, - @QueryParam("pageSize") int pageSize, - @QueryParam("grupo") String grupo, - @QueryParam("fase") String fase, - @QueryParam("fecha") long fecha, - @QueryParam("equipo") String equipo); - - @GET - @Path("/{id}") - ApiResponse get(@PathParam("id") long id); - - @GET - @Path("/fechas") - ApiResponse> getFechas(); - - @DELETE - @Path("/{id}") - ApiResponse delete(@PathParam("id") long id); - - @POST - @Path("/") - ApiResponse add(CrearOUpdatePartidoDTO entity); - - @POST - @Path("/{id}") - ApiResponse update(@PathParam("id") long id, CrearOUpdatePartidoDTO entity); - - @POST - @Path("{id}/resultado") - ApiResponse setResultado(@PathParam("id") long id, ResultadoDTO resultado); -} - diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PostService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PostService.java deleted file mode 100644 index 53275d8..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PostService.java +++ /dev/null @@ -1,30 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.post.CrearPost; -import io.semantic.openscore.core.model.Post; - -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import java.util.List; - -@Path("/posts") -@Consumes(MediaType.APPLICATION_JSON) -@Produces(MediaType.APPLICATION_JSON) -public interface PostService extends StandardService { - - @Path("/") - @GET - ApiResponse> getAll(@QueryParam("page") int page, - @QueryParam("pageSize") int pageSize, - @QueryParam("status") String status); - - @Path("{id}/publicar") - @POST - ApiResponse publicar(@PathParam("id") long id); - - @Path("{id}/retirar") - @POST - ApiResponse retirar(@PathParam("id") long id); - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java deleted file mode 100644 index 9ec71f2..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/PronosticosService.java +++ /dev/null @@ -1,65 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.pronosticos.CrearPronosticoDTO; -import io.semantic.openscore.core.api.pronosticos.PartidoPronosticoDTO; -import io.semantic.openscore.core.api.pronosticos.PronosticoDTO; -import io.semantic.openscore.core.security.Secure; - -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import java.util.Date; -import java.util.List; - -@Path("pronosticos") -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -public interface PronosticosService { - - @Path("/") - @GET - @Secure - ApiResponse> getAll(@QueryParam("page") int page, - @QueryParam("size") int pageSize, - @QueryParam("grupo") String grupo, - @QueryParam("fase") String fase, - @QueryParam("dia") long dia, - @QueryParam("fecha") int fecha); - - @Path("/{id}") - @GET - @Secure - ApiResponse get(@PathParam("id") long id); - - @Path("/{id}") - @DELETE - @Secure - ApiResponse delete(@PathParam("id") long id); - - @Path("/") - @POST - @Secure - ApiResponse add(CrearPronosticoDTO entity); - - @Path("/{id}") - @POST - @Secure - ApiResponse update(@PathParam("id") long id, - CrearPronosticoDTO entity); - - @Path("/{id}/local") - @POST - @Secure - ApiResponse local(@PathParam("id") long idPartido); - - @Path("/{id}/empate") - @POST - @Secure - ApiResponse empate(@PathParam("id") long idPartido); - - @Path("/{id}/visitante") - @POST - @Secure - ApiResponse visitante(@PathParam("id") long idPartido); - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/RankingService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/RankingService.java deleted file mode 100644 index cbc02c2..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/RankingService.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.ranking.Ranking; - -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import java.util.List; - -@Path("ranking") -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -public interface RankingService { - - @GET - @Path("/{id}") - ApiResponse getRanking(@PathParam("id") long id); - - @GET - @Path("/") - ApiResponse> getAllRanking(@QueryParam("pais") String pais, @QueryParam("size") @DefaultValue("0") int size); - - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/SearchService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/SearchService.java deleted file mode 100644 index d4e28c5..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/SearchService.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; - -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import java.util.List; - -@Consumes(MediaType.APPLICATION_JSON) -@Produces(MediaType.APPLICATION_JSON) -public interface SearchService { - - @GET - @Path("/") - ApiResponse> getAll(@QueryParam("page") @DefaultValue("0") int page, - @QueryParam("pageSize") @DefaultValue("10") int pageSize, - @QueryParam("q") @DefaultValue("") String filter); - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/StandardService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/StandardService.java deleted file mode 100644 index dbc9dc1..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/StandardService.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; - -import javax.ws.rs.*; - -public interface StandardService { - - - @Path("/{id}") - @GET - ApiResponse get(@PathParam("id") long id); - - @Path("/{id}") - @DELETE - ApiResponse delete(@PathParam("id") long id); - - @Path("/") - @POST - ApiResponse add(Y entity); - - @Path("/{id}") - @POST - ApiResponse update(@PathParam("id") long id, - Z entity); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/UsuariosService.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/UsuariosService.java deleted file mode 100644 index d368c84..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/api/UsuariosService.java +++ /dev/null @@ -1,61 +0,0 @@ -package io.semantic.openscore.core.services.api; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.TokenDTO; -import io.semantic.openscore.core.api.usuarios.*; -import io.semantic.openscore.core.security.Secure; - -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import java.util.List; - -@Consumes(MediaType.APPLICATION_JSON) -@Produces(MediaType.APPLICATION_JSON) -public interface UsuariosService extends SearchService { - - @POST - @Path("/registrar") - ApiResponse registrarUsuario(CrearUsuarioDTO crearUsuario); - - @POST - @Path("/update/{id}") - @Secure - ApiResponse updateUsuario(@PathParam("id") long id, UpdateUsuarioDTO crearUsuario); - - - @POST - @Path("/password") - @Secure - ApiResponse updatePassword(UpdatePassword updatePassword); - - @POST - @Path("/recover") - ApiResponse recoverPassword(RecoverPassword updatePassword); - - @GET - @Path("/token/{email}") - ApiResponse sendToken(@PathParam("email") String email); - - - ApiResponse deleteUsuario(long id); - - @GET - @Path("/{id}") - @Secure - ApiResponse getUsuario(@PathParam("id") Long id); - - @GET - @Path("/myself") - @Secure - ApiResponse getMiUsuario(); - - @GET - @Path("/") - @Secure - ApiResponse> getAll(@QueryParam("page") int page, @QueryParam("pageSize") int pageSize, @QueryParam("filter") String filter); - - @POST - @Path("/login") - ApiResponse login(LoginUsuarioDTO loginUsuario); - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/ApplicationExceptionMapper.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/ApplicationExceptionMapper.java deleted file mode 100644 index 9bab42e..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/ApplicationExceptionMapper.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.semantic.openscore.core.services.filters; - -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -import io.semantic.openscore.core.exceptions.ApplicationException; -import io.semantic.openscore.core.exceptions.ValidationException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static io.semantic.openscore.core.services.RestUtil.error; - -@Provider -public class ApplicationExceptionMapper implements ExceptionMapper { - - private Logger logger = LoggerFactory.getLogger(ApplicationExceptionMapper.class); - - @Override - public Response toResponse(ApplicationException exception) { - logger.error(exception.getMessage(), exception); - - Object data = null; - - if (exception instanceof ValidationException) { - data = ((ValidationException) exception).getData(); - } - - return Response - .status(500) - .type(MediaType.APPLICATION_JSON_TYPE) - .entity(error("ERROR", - exception.getMessage(), - data)) - .build(); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/CorsFilter.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/CorsFilter.java deleted file mode 100644 index 708f7c2..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/CorsFilter.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.semantic.openscore.core.services.filters; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.container.PreMatching; -import javax.ws.rs.ext.Provider; -import java.io.IOException; - -@PreMatching -@Provider -public class CorsFilter implements ContainerResponseFilter { - - private Logger logger = LoggerFactory.getLogger(CorsFilter.class); - - private static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"; - private static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods"; - private static final String ACCESS_CONTROL_MAX_AGE = "Access-Control-Max-Age"; - private static final String ACCESS_CONTROL_ALLOW_CREDENTIALS = "Access-Control-Allow-Credentials"; - private static final String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers"; - - @Override - public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { - - responseContext.getHeaders().add(ACCESS_CONTROL_ALLOW_ORIGIN, "*"); - responseContext.getHeaders().add(ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, DELETE, OPTIONS, HEAD".toUpperCase()); - responseContext.getHeaders().add(ACCESS_CONTROL_MAX_AGE, "-1"); - responseContext.getHeaders().add(ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); - responseContext.getHeaders().add(ACCESS_CONTROL_ALLOW_HEADERS, "Authorization, Origin, Content-Type, Accept".toLowerCase()); - } - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/LoggerFilter.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/LoggerFilter.java deleted file mode 100644 index aeed309..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/LoggerFilter.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.semantic.openscore.core.services.filters; - -import org.apache.commons.io.IOUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.PreMatching; -import javax.ws.rs.ext.Provider; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; - -@PreMatching -@Provider -public class LoggerFilter implements ContainerRequestFilter { - - private Logger logger = LoggerFactory.getLogger(LoggerFilter.class); - - - @Override - public void filter(ContainerRequestContext requestContext) throws IOException { - byte[] byteArray = IOUtils.toByteArray(requestContext.getEntityStream()); - InputStream entity = new ByteArrayInputStream(byteArray); - requestContext.setEntityStream(new ByteArrayInputStream(byteArray)); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/RuntimeExceptionMapper.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/RuntimeExceptionMapper.java deleted file mode 100644 index 2be6234..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/filters/RuntimeExceptionMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.semantic.openscore.core.services.filters; - -import io.semantic.openscore.core.api.ApiResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -@Provider -public class RuntimeExceptionMapper implements ExceptionMapper { - - private Logger logger = LoggerFactory.getLogger(ApplicationExceptionMapper.class); - - @Override - public Response toResponse(IllegalArgumentException e) { - logger.error(e.getLocalizedMessage(), e); - return Response - .serverError() - .type(MediaType.APPLICATION_JSON_TYPE) - .entity(new ApiResponse<>("500", e.getMessage(), null)).build(); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/AdminServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/AdminServiceImpl.java deleted file mode 100644 index ae9dfbf..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/AdminServiceImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.admin.UsuarioCompletoDTO; -import io.semantic.openscore.core.mapping.UsuarioMapper; -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.model.Usuario; -import io.semantic.openscore.core.repository.Page; -import io.semantic.openscore.core.repository.UsuarioRepository; -import io.semantic.openscore.core.security.Secure; -import io.semantic.openscore.core.services.api.AdminService; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import java.util.List; - -@RequestScoped -public class AdminServiceImpl implements AdminService { - - private UsuarioMapper mapper; - private UsuarioRepository usuarioRepository; - - public AdminServiceImpl() { - } - - @Inject - public AdminServiceImpl(UsuarioRepository usuarioRepository, - UsuarioMapper mapper) { - this.usuarioRepository = usuarioRepository; - this.mapper = mapper; - } - - @Override - @Secure(Rol.ADMIN) - public ApiResponse> getAll(int page, int pageSize, String filter) { - List usuarios = this.usuarioRepository.findAll(new Page(page, pageSize)); - List usuariosApi = this.mapper.asCompletoApi(usuarios); - return new ApiResponse<>(usuariosApi); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java deleted file mode 100644 index 8d2bff0..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java +++ /dev/null @@ -1,106 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.equipos.CrearEquipoDTO; -import io.semantic.openscore.core.api.equipos.EquipoDTO; -import io.semantic.openscore.core.mapping.EquipoMapper; -import io.semantic.openscore.core.model.Equipo; -import io.semantic.openscore.core.model.Pais; -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.repository.EquiposRepository; -import io.semantic.openscore.core.repository.Page; -import io.semantic.openscore.core.repository.PaisRepository; -import io.semantic.openscore.core.security.Secure; -import io.semantic.openscore.core.services.api.EquiposService; -import io.semantic.openscore.core.validation.ApplicationValidator; - -import javax.inject.Inject; -import javax.ws.rs.Path; -import javax.ws.rs.core.UriInfo; -import java.text.MessageFormat; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import static io.semantic.openscore.core.services.RestUtil.ok; - -@Path("equipos") -public class EquiposServiceImpl implements EquiposService { - - - private PaisRepository paisRepository; - private EquiposRepository equiposRepository; - private ApplicationValidator validator; - private EquipoMapper mapper; - - public EquiposServiceImpl() { - } - - @Inject - public EquiposServiceImpl(EquiposRepository equiposRepository, - PaisRepository paisRepository, - ApplicationValidator validator, - EquipoMapper mapper) { - this.equiposRepository = equiposRepository; - this.paisRepository = paisRepository; - this.validator = validator; - this.mapper = mapper; - } - - @Override - public ApiResponse> getAll(int page, int pageSize) { - List equipos = this.equiposRepository - .findAll(new Page(page, pageSize)) - .stream() - .map(equipo -> map(equipo)) - .collect(Collectors.toList()); - return ok(equipos); - } - - @Override - public ApiResponse get(long id) { - Equipo equipo = this.equiposRepository - .findById(id).orElseThrow(() -> - new RuntimeException(MessageFormat.format("El equipo con el ID: {0} no fue encontrado", id))); - return ok(map(equipo)); - } - - @Override - @Secure(Rol.ADMIN) - public ApiResponse delete(long id) { - this.equiposRepository.deleteById(id); - return ok(id); - } - - @Override - @Secure(Rol.ADMIN) - public ApiResponse add(CrearEquipoDTO entity) { - validator.validate(entity); - Pais pais = this.paisRepository.findByCodigo(entity.getCodigoPais()); - Equipo equipo = this.mapper.asEquipo(entity); - this.equiposRepository.save(equipo); - return ok(map(equipo)); - } - - @Override - @Secure(Rol.ADMIN) - public ApiResponse update(long id, CrearEquipoDTO entity) { - validator.validate(entity); - Optional equipoOptional = this.equiposRepository.findById(id); - if (equipoOptional.isPresent()) { - Equipo equipo = equipoOptional.get(); - equipo.setCodigo(entity.getCodigo()); - equipo.setLogo(entity.getLogo()); - equipo.setNombre(entity.getNombre()); - this.equiposRepository.save(equipo); - return ok(map(equipo)); - } else { - throw new RuntimeException(MessageFormat.format("No se pudo actualizar el equipo con ID {0}", id)); - } - - } - - private EquipoDTO map(Equipo equipo) { - return this.mapper.asApi(equipo); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/FasesServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/FasesServiceImpl.java deleted file mode 100644 index 1abf8f6..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/FasesServiceImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.model.Fase; -import io.semantic.openscore.core.repository.FaseRepository; -import io.semantic.openscore.core.repository.Page; -import io.semantic.openscore.core.services.api.FasesService; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import java.text.MessageFormat; -import java.util.List; - -import static io.semantic.openscore.core.services.RestUtil.ok; - -@RequestScoped -public class FasesServiceImpl implements FasesService { - - private FaseRepository faseRepository; - - public FasesServiceImpl() { - } - - @Inject - public FasesServiceImpl(FaseRepository faseRepository) { - this.faseRepository = faseRepository; - } - - @Override - public ApiResponse> getAll(int page, int pageSize, String filter) { - return ok(this.faseRepository.findAll(new Page(page, pageSize))); - } - - @Override - public ApiResponse get(long id) { - return ok(this.faseRepository - .findById(id) - .orElseThrow(() -> new IllegalArgumentException( - MessageFormat - .format("La Fase con el ID {0} no fue encontrada", id)))); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/GruposServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/GruposServiceImpl.java deleted file mode 100644 index 4273d5f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/GruposServiceImpl.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.model.Grupo; -import io.semantic.openscore.core.repository.GrupoRepository; -import io.semantic.openscore.core.repository.Page; -import io.semantic.openscore.core.services.api.GruposService; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import java.text.MessageFormat; -import java.util.List; - -import static io.semantic.openscore.core.services.RestUtil.ok; - -@RequestScoped -public class GruposServiceImpl implements GruposService { - - - private GrupoRepository grupoRepository; - - public GruposServiceImpl() { - } - - @Inject - public GruposServiceImpl(GrupoRepository grupoRepository) { - this.grupoRepository = grupoRepository; - } - - @Override - public ApiResponse> getAll(int page, int pageSize, String filter) { - return ok(this.grupoRepository.findAll(new Page(page, pageSize))); - } - - @Override - public ApiResponse get(long id) { - return ok(this.grupoRepository - .findById(id) - .orElseThrow(() -> new IllegalArgumentException( - MessageFormat - .format("El Grupo con el ID {0} no fue encontrado", id)))); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/InformationServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/InformationServiceImpl.java deleted file mode 100644 index cf96fe0..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/InformationServiceImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.information.Information; -import io.semantic.openscore.core.exceptions.NoSePuedeLeerInformacionException; -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.security.Secure; -import io.semantic.openscore.core.services.api.InformationService; - -import javax.enterprise.context.RequestScoped; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import java.io.IOException; -import java.io.InputStream; -import java.util.Map; -import java.util.Properties; -import java.util.stream.Collectors; - -import static io.semantic.openscore.core.services.RestUtil.ok; - -@RequestScoped -public class InformationServiceImpl implements InformationService { - - @PersistenceContext(unitName = "db") - private EntityManager entityManager; - - @Override - public ApiResponse getInformation() { - try { - Map emfProperties = entityManager.getEntityManagerFactory().getProperties(); - - Map hibernateMap = emfProperties.entrySet().stream() - .filter(x -> x.getKey().startsWith("hibernate")) - .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue())); - - Properties prop = new Properties(); - String filename = "info.properties"; - InputStream input = getClass().getClassLoader().getResourceAsStream(filename); - prop.load(input); - Information information = new Information(); - information.setVersion(prop.getProperty("info.version")); - information.setEnvironment(prop.getProperty("info.environment")); - information.setProperties(hibernateMap); - return ok(information); - } catch (IOException e) { - throw new NoSePuedeLeerInformacionException("No se puede leer info.properties", e); - } - } - - @Override - public ApiResponse securePing() { - return ok("ok"); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PaisesServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PaisesServiceImpl.java deleted file mode 100644 index 543205f..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PaisesServiceImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.paises.PaisDTO; -import io.semantic.openscore.core.mapping.PaisMapper; -import io.semantic.openscore.core.model.Pais; -import io.semantic.openscore.core.repository.Page; -import io.semantic.openscore.core.repository.PaisRepository; -import io.semantic.openscore.core.services.api.PaisesService; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import java.util.List; - -@RequestScoped -public class PaisesServiceImpl implements PaisesService { - - - private PaisMapper mapper; - private PaisRepository repository; - - public PaisesServiceImpl() { - - } - - @Inject - public PaisesServiceImpl(PaisRepository repository, PaisMapper mapper) { - - this.repository = repository; - this.mapper = mapper; - } - - - @Override - public ApiResponse> getAll(int page, int pageSize, String filter) { - List paises = this.repository.findAll(new Page(page, pageSize)); - return new ApiResponse<>(this.mapper.asApi(paises)); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java deleted file mode 100644 index b5586c5..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java +++ /dev/null @@ -1,145 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.partidos.CrearOUpdatePartidoDTO; -import io.semantic.openscore.core.api.partidos.PartidoDTO; -import io.semantic.openscore.core.api.partidos.ResultadoDTO; -import io.semantic.openscore.core.mapping.PartidoMapper; -import io.semantic.openscore.core.model.*; -import io.semantic.openscore.core.repository.EquiposRepository; -import io.semantic.openscore.core.repository.FaseRepository; -import io.semantic.openscore.core.repository.GrupoRepository; -import io.semantic.openscore.core.repository.PartidoRepository; -import io.semantic.openscore.core.security.Secure; -import io.semantic.openscore.core.services.api.PartidosService; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import java.text.MessageFormat; -import java.util.List; - -import static io.semantic.openscore.core.services.RestUtil.ok; - -@RequestScoped -public class PartidosServiceImpl implements PartidosService { - - - private PartidoRepository partidoRepository; - private EquiposRepository equiposRepository; - private GrupoRepository grupoRepository; - private FaseRepository faseRepository; - private PartidoMapper partidoMapper; - - public PartidosServiceImpl() { - } - - @Inject - public PartidosServiceImpl(final PartidoRepository partidoRepository, - final EquiposRepository equiposRepository, - final GrupoRepository grupoRepository, - final FaseRepository faseRepository, - final PartidoMapper partidoMapper) { - this.partidoRepository = partidoRepository; - this.equiposRepository = equiposRepository; - this.grupoRepository = grupoRepository; - this.faseRepository = faseRepository; - this.partidoMapper = partidoMapper; - } - - @Override - public ApiResponse> getAll(int page, - int pageSize, - String grupo, - String fase, - long dia, - String equipo) { - - this.partidoRepository.findAll(); - List partidos = this.partidoRepository.findAll(); - return ok(this.partidoMapper.asApi(partidos)); - } - - - @Override - public ApiResponse get(long id) { - Partido partido = getPartido(id); - return ok(this.partidoMapper.asApi(partido)); - } - - @Override - public ApiResponse> getFechas() { - return ok(this.partidoRepository.findAllFechas()); - } - - @Override - @Secure(Rol.ADMIN) - public ApiResponse delete(long id) { - return null; - } - - @Override - @Secure(Rol.ADMIN) - public ApiResponse add(CrearOUpdatePartidoDTO entity) { - Partido partido = crearPartido(0, entity); - this.partidoRepository.save(partido); - return ok(this.partidoMapper.asApi(partido)); - } - - private Partido crearPartido(long id, CrearOUpdatePartidoDTO entity) { - Partido partido = new Partido(); - if (id > 0) { - partido = this.getPartido(id); - } - Equipo local = this.getEquipo(entity.getLocal()); - Equipo visitante = this.getEquipo(entity.getVisitante()); - partido.setLocal(local); - partido.setVisitante(visitante); - partido.setFecha(entity.getFecha()); - partido.setGrupo(this.getGrupo(entity.getGrupo())); - partido.setFase(this.getFase(entity.getFase())); - partido.setLugar(entity.getLugar()); - partido.setDia(entity.getDia()); - return partido; - } - - private Equipo getEquipo(String codigo) { - return this.equiposRepository.findByCodigo(codigo).orElseThrow(() -> - new IllegalArgumentException(MessageFormat.format("Equipo con codigo [{0}] no encontrado", codigo))); - } - - private Grupo getGrupo(String codigo) { - return this.grupoRepository.findByCodigo(codigo).orElseThrow(() -> - new IllegalArgumentException(MessageFormat.format("Grupo con codigo [{0}] no encontrado", codigo))); - } - - private Fase getFase(String codigo) { - return this.faseRepository.findByCodigo(codigo).orElseThrow(() -> - new IllegalArgumentException(MessageFormat.format("Fase con codigo [{0}] no encontrado", codigo))); - } - - @Override - @Secure(Rol.ADMIN) - public ApiResponse update(long id, CrearOUpdatePartidoDTO entity) { - Partido partido = crearPartido(id, entity); - this.partidoRepository.save(partido); - return ok(this.partidoMapper.asApi(partido)); - } - - @Override - @Secure(Rol.ADMIN) - public ApiResponse setResultado(long partidoId, ResultadoDTO resultado) { - Partido partido = this.getPartido(partidoId); - partido.setResultado(this.partidoMapper.asResultado(resultado)); - this.partidoRepository.save(partido); - return ok(this.partidoMapper.asApi(partido)); - - } - - private Partido getPartido(long partidoId) { - return this.partidoRepository - .findById(partidoId) - .orElseThrow(() -> - new IllegalArgumentException(MessageFormat - .format("El partido <{0}> no fue encontrado", partidoId))); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PostServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PostServiceImpl.java deleted file mode 100644 index 5a47bd8..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PostServiceImpl.java +++ /dev/null @@ -1,100 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.post.CrearPost; -import io.semantic.openscore.core.model.Post; -import io.semantic.openscore.core.model.PostStatus; -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.repository.Page; -import io.semantic.openscore.core.repository.PostRepository; -import io.semantic.openscore.core.security.Secure; -import io.semantic.openscore.core.services.api.PostService; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import java.text.MessageFormat; -import java.util.List; - -import static io.semantic.openscore.core.services.RestUtil.ok; - -@RequestScoped -public class PostServiceImpl implements PostService { - - private PostRepository postRepository; - - public PostServiceImpl() { - } - - @Inject - public PostServiceImpl(PostRepository postRepository) { - this.postRepository = postRepository; - } - - public ApiResponse> getAll(int page, int pageSize, String postStatus) { - - if (postStatus != null && !postStatus.isEmpty()) { - PostStatus status = PostStatus.valueOf(postStatus); - return ok(this.postRepository.findAllByStatus(status)); - } else { - return ok(this.postRepository.findAll(new Page(page, pageSize))); - } - } - - @Override - @Secure(Rol.ADMIN) - public ApiResponse publicar(long id) { - return ok(cambiarStatus(id, PostStatus.PUBLICADO)); - } - - @Override - @Secure(Rol.ADMIN) - public ApiResponse retirar(long id) { - return ok(cambiarStatus(id, PostStatus.BORRADOR)); - } - - private Post cambiarStatus(long id, PostStatus status) { - Post post = this.getPost(id); - post.setStatus(status); - this.postRepository.save(post); - return post; - } - - @Override - public ApiResponse get(long id) { - return ok(getPost(id)); - } - - private Post getPost(long id) { - return this.postRepository - .findById(id) - .orElseThrow(() -> new IllegalArgumentException(MessageFormat.format("El post con el ID <{0}> no existe", id))); - } - - @Override - public ApiResponse delete(long id) { - this.postRepository.deleteById(id); - return ok(id); - } - - @Override - public ApiResponse add(CrearPost entity) { - Post post = new Post(); - savePost(entity, post); - return ok(post); - } - - private void savePost(CrearPost entity, Post post) { - post.setTitulo(entity.getTitulo()); - post.setContenido(entity.getContenido()); - post.setAutor(entity.getAutor()); - post.setStatus(PostStatus.BORRADOR); - this.postRepository.save(post); - } - - @Override - public ApiResponse update(long id, CrearPost entity) { - Post post = this.getPost(id); - savePost(entity, post); - return ok(post); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java deleted file mode 100644 index 987ee82..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java +++ /dev/null @@ -1,228 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.pronosticos.CrearPronosticoDTO; -import io.semantic.openscore.core.api.pronosticos.PartidoPronosticoDTO; -import io.semantic.openscore.core.api.pronosticos.PronosticoDTO; -import io.semantic.openscore.core.exceptions.PartidoBloqueadoException; -import io.semantic.openscore.core.mapping.PartidoMapper; -import io.semantic.openscore.core.mapping.PronosticoMapper; -import io.semantic.openscore.core.model.Partido; -import io.semantic.openscore.core.model.Pronostico; -import io.semantic.openscore.core.model.Usuario; -import io.semantic.openscore.core.repository.PartidoRepository; -import io.semantic.openscore.core.repository.PronosticoRepository; -import io.semantic.openscore.core.repository.UsuarioRepository; -import io.semantic.openscore.core.services.UserInfo; -import io.semantic.openscore.core.services.api.PronosticosService; -import io.semantic.openscore.core.validation.ApplicationValidator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; -import java.text.MessageFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.util.Date; -import java.util.List; - -import static io.semantic.openscore.core.services.RestUtil.ok; - -@RequestScoped -public class PronosticosServiceImpl implements PronosticosService { - - private Logger logger = LoggerFactory.getLogger(PronosticosServiceImpl.class); - - private UserInfo userInfo; - private PronosticoRepository pronosticoRepository; - private PartidoRepository partidoRepository; - private UsuarioRepository usuarioRepository; - private ApplicationValidator validator; - private PartidoMapper partidoMapper; - private PronosticoMapper pronosticoMapper; - - public PronosticosServiceImpl() { - } - - @Inject - public PronosticosServiceImpl(UserInfo userInfo, - PronosticoRepository pronosticoRepository, - PartidoRepository partidoRepository, - UsuarioRepository usuarioRepository, - ApplicationValidator validator, - PartidoMapper partidoMapper, - PronosticoMapper pronosticoMapper) { - this.userInfo = userInfo; - this.pronosticoRepository = pronosticoRepository; - this.partidoRepository = partidoRepository; - this.usuarioRepository = usuarioRepository; - this.validator = validator; - this.partidoMapper = partidoMapper; - this.pronosticoMapper = pronosticoMapper; - } - - @Override - public ApiResponse> getAll(int page, - int pageSize, - String grupo, - String fase, - long dia, - int fecha) { - - List partidos = getPartidos(grupo, dia, fase, fecha); - List pronosticos = this.pronosticoRepository.findByUsuario(userInfo.getUserId()); - - logger.info("Pronosticos encontrados para el usuario {}: {}", this.userInfo.getUsuario().get().getEmail(), pronosticos.size()); - - - List partidoDTOs = this.pronosticoMapper.asApiPronostico(partidos); - - partidoDTOs.forEach(partidoPronosticoDTO -> { - pronosticos.forEach(pronostico -> { - if (partidoPronosticoDTO.getId() == pronostico.getPartido().getId()) { - partidoPronosticoDTO.setPronostico(this.pronosticoMapper.asApi(pronostico)); - } - }); - }); - - - return ok(partidoDTOs); - } - - private List getPartidos(String grupo, long dia, String fase, int fecha) { - if (grupo != null && !grupo.isEmpty()) { - return this.partidoRepository.findAllByGrupo(grupo); - } else if (fase != null && !fase.isEmpty()) { - return this.partidoRepository.findAllByFase(fase); - } else if (fecha > 0) { - return this.partidoRepository.findAllByFecha(fecha); - } else if ( dia > 0) { - return this.partidoRepository.findAllByDia(dia); - } else { - return this.partidoRepository.findAll(); - } - } - - @Override - public ApiResponse get(long id) { - long idUsuario = this.userInfo.getUserId(); - Pronostico pronostico = getPronostico(id, - idUsuario); - return ok(this.pronosticoMapper.asApi(pronostico)); - } - - @Override - public ApiResponse delete(long id) { - this.pronosticoRepository.deleteById(id); - return ok(id); - } - - @Override - public ApiResponse add(CrearPronosticoDTO entity) { - throw new UnsupportedOperationException("La operacion ADD para PronosticoService no esta soportada"); - } - - @Override - public ApiResponse update(long id, - CrearPronosticoDTO entity) { - long idUsuario = this.userInfo.getUserId(); - validator.validate(entity); - - Pronostico pronostico = this.getPronostico(id, - idUsuario); - this.pronosticoMapper.updatePronostico(entity, - pronostico); - this.pronosticoRepository.save(pronostico); - return ok(this.pronosticoMapper.asApi(pronostico)); - } - - private Usuario getUsuario(long idUsuario) { - return this.usuarioRepository.findById(idUsuario).orElseThrow(() -> new IllegalArgumentException(MessageFormat - .format("El Usuario con ID {0} no fue encontrado", - idUsuario))); - } - - private Pronostico getPronostico(long id, - long idUsuario) { - return this.pronosticoRepository - .findById(id, - idUsuario) - .orElseThrow(() -> new IllegalArgumentException(MessageFormat - .format("El Pronostico con ID {0} no se encuentra para el usuario {1}", - id, - idUsuario))); - } - - private Partido getPartido(long id) { - return this.partidoRepository.findById(id) - .orElseThrow(() -> new IllegalArgumentException(MessageFormat - .format("El Partido con ID {0} no fue encontrado", - id))); - } - - @Override - @Transactional - public ApiResponse local(long idPartido) { - verificarSiElPartidoEstaBloqueado(idPartido); - long idUsuario = this.userInfo.getUserId(); - Pronostico pronostico = this.getPronosticoOrCreatePronostico(idPartido, - idUsuario); - pronostico.local(); - pronostico.setUsuario(this.userInfo.getUsuario().get()); - this.pronosticoRepository.save(pronostico); - return ok(this.pronosticoMapper.asApi(pronostico)); - - } - - private void verificarSiElPartidoEstaBloqueado(long idPartido) { - Partido partido = this.getPartido(idPartido); - if (partido.isBloqueado()) { - throw new PartidoBloqueadoException(partido.getLocal().getCodigo(), partido.getVisitante().getCodigo()); - } - } - - @Override - @Transactional - public ApiResponse empate(long idPartido) { - verificarSiElPartidoEstaBloqueado(idPartido); - long idUsuario = this.userInfo.getUserId(); - Pronostico pronostico = this.getPronosticoOrCreatePronostico(idPartido, - idUsuario); - pronostico.empate(); - pronostico.setUsuario(this.userInfo.getUsuario().get()); - this.pronosticoRepository.save(pronostico); - return ok(this.pronosticoMapper.asApi(pronostico)); - } - - @Override - @Transactional - public ApiResponse visitante(long idPartido) { - verificarSiElPartidoEstaBloqueado(idPartido); - long idUsuario = this.userInfo.getUserId(); - Pronostico pronostico = this.getPronosticoOrCreatePronostico(idPartido, - idUsuario); - pronostico.visitante(); - pronostico.setUsuario(this.userInfo.getUsuario().get()); - this.pronosticoRepository.save(pronostico); - return ok(this.pronosticoMapper.asApi(pronostico)); - } - - private Pronostico getPronosticoOrCreatePronostico(long idPartido, - long idUsuario) { - return this.pronosticoRepository.findByPartidoAndUsuario(idPartido, - idUsuario).orElseGet(() -> { - Pronostico pronostico = new Pronostico(); - Partido partido = getPartido(idPartido); - pronostico.setPartido(partido); - Usuario usuario = getUsuario(idUsuario); - usuario.addPronostico(pronostico); - - this.pronosticoRepository.save(pronostico); - this.usuarioRepository.save(usuario); - return pronostico; - }); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/RankingServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/RankingServiceImpl.java deleted file mode 100644 index fe679c7..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/RankingServiceImpl.java +++ /dev/null @@ -1,97 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.ranking.Ranking; -import io.semantic.openscore.core.model.Pais; -import io.semantic.openscore.core.model.Usuario; -import io.semantic.openscore.core.repository.PaisRepository; -import io.semantic.openscore.core.repository.UsuarioRepository; -import io.semantic.openscore.core.services.api.RankingService; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; -import java.text.MessageFormat; -import java.util.Comparator; -import java.util.List; -import java.util.stream.IntStream; - -import static io.semantic.openscore.core.services.RestUtil.ok; -import static java.util.stream.Collectors.toList; - -@RequestScoped -public class RankingServiceImpl implements RankingService { - - private UsuarioRepository usuarioRepository; - private PaisRepository paisRepository; - - public RankingServiceImpl() { - } - - @Inject - public RankingServiceImpl(UsuarioRepository usuarioRepository, - PaisRepository paisRepository) { - this.usuarioRepository = usuarioRepository; - this.paisRepository = paisRepository; - } - - @Override - public ApiResponse getRanking(long id) { - List usuarios = this.usuarioRepository.findAll(); - List rankings = this.calcularRankings(usuarios); - Ranking ranking = rankings - .stream() - .filter(r -> r.getUsuario() == id) - .findAny() - .orElseThrow(() -> new IllegalArgumentException(MessageFormat - .format("El Usuario id {0} no se encuentra en el sistema", id))); - return ok(ranking); - } - - @Override - public ApiResponse> getAllRanking(String pais, int size) { - - - List usuarios; - - if (pais == null || pais.isEmpty()) { - usuarios = this.usuarioRepository.findAll(); - } else { - usuarios = this.usuarioRepository.findByCountry(pais); - } - - List rankings = calcularRankings(usuarios); - if (size > 0) { - int s = rankings.size(); - if (s > size) { - s = size; - } - return ok(rankings.subList(0, s)); - } else { - return ok(rankings); - } - } - - @Transactional - List calcularRankings(List usuarios) { - List rankings = usuarios.stream() - .map(usuario -> { - Ranking ranking = new Ranking(); - ranking.setNombre(usuario.getNombre() + " " + usuario.getApellido()); - ranking.setPais(usuario.getPais().getNombre()); - ranking.setUsuario(usuario.getId()); - ranking.setPuntos(usuario.getPuntos()); - return ranking; - }) - .sorted(Comparator.comparingInt(Ranking::getPuntos).reversed()) - .collect(toList()); - - return IntStream - .range(0, rankings.size()) - .mapToObj(i -> { - Ranking r = rankings.get(i); - r.setRanking(i + 1); - return r; - }).collect(toList()); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/UsuariosServiceImpl.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/UsuariosServiceImpl.java deleted file mode 100644 index e9e508c..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/services/impl/UsuariosServiceImpl.java +++ /dev/null @@ -1,236 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.ApiResponse; -import io.semantic.openscore.core.api.TokenDTO; -import io.semantic.openscore.core.api.usuarios.*; -import io.semantic.openscore.core.cache.TokenCache; -import io.semantic.openscore.core.email.MailFactory; -import io.semantic.openscore.core.email.MailServer; -import io.semantic.openscore.core.logging.ServiceLogger; -import io.semantic.openscore.core.mapping.PaisMapper; -import io.semantic.openscore.core.mapping.UsuarioMapper; -import io.semantic.openscore.core.model.Pais; -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.model.Usuario; -import io.semantic.openscore.core.repository.Page; -import io.semantic.openscore.core.repository.PaisRepository; -import io.semantic.openscore.core.repository.UsuarioRepository; -import io.semantic.openscore.core.security.Secure; -import io.semantic.openscore.core.security.TokenGenerator; -import io.semantic.openscore.core.services.UserInfo; -import io.semantic.openscore.core.services.api.UsuariosService; -import io.semantic.openscore.core.validation.ApplicationValidator; -import io.semantic.openscore.core.validation.validators.EmailValidator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Instance; -import javax.inject.Inject; -import javax.ws.rs.Path; -import java.text.MessageFormat; -import java.util.*; -import java.util.stream.StreamSupport; - -import static io.semantic.openscore.core.services.RestUtil.ok; -import static java.util.stream.Collectors.toList; - -@Path("/usuarios") -@RequestScoped -public class UsuariosServiceImpl implements UsuariosService { - - private UserInfo userInfo; - private TokenCache tokenCache; - private MailServer mailSender; - private MailFactory mailFactory; - private List mailValidators; - private ServiceLogger serviceLogger; - private Logger logger = LoggerFactory.getLogger(UsuariosServiceImpl.class); - - private UsuarioRepository usuarioRepository; - private PaisRepository paisRepository; - private TokenGenerator tokenGenerator; - private ApplicationValidator validator; - private UsuarioMapper mapper; - private PaisMapper paisMapper; - - public UsuariosServiceImpl() { - } - - - @Inject - public UsuariosServiceImpl(UsuarioRepository usuarioRepository, - PaisRepository paisRepository, - TokenGenerator tokenGenerator, - ApplicationValidator appValidator, - UsuarioMapper mapper, - PaisMapper paisMapper, - UserInfo userInfo, - TokenCache tokenCache, - MailServer mailSender, - MailFactory mailFactory, - Instance mailValidators, - ServiceLogger serviceLogger) { - this.usuarioRepository = usuarioRepository; - this.paisRepository = paisRepository; - this.tokenGenerator = tokenGenerator; - this.validator = appValidator; - this.mapper = mapper; - this.paisMapper = paisMapper; - this.userInfo = userInfo; - this.tokenCache = tokenCache; - this.mailSender = mailSender; - this.mailFactory = mailFactory; - this.mailValidators = StreamSupport.stream(mailValidators.spliterator(), false).collect(toList()); - - this.serviceLogger = serviceLogger; - } - - - @Override - public ApiResponse registrarUsuario(CrearUsuarioDTO crearUsuario) { - return new ApiResponse<>(this.saveUser(crearUsuario)); - } - - @Override - public ApiResponse updateUsuario(long id, UpdateUsuarioDTO crearUsuario) { - if (this.userInfo.getUserId() == id) { - return new ApiResponse<>(new TokenDTO(this.tokenGenerator.generarToken(this.updateUser(id, crearUsuario)))); - } else { - throw new IllegalArgumentException("You are trying to modify an user that is not you"); - } - } - - private Usuario updateUser(long id, UpdateUsuarioDTO updateUsuario) { - this.validator.validate(updateUsuario); - Usuario usuario = this.findUsuario(id); - Pais pais = this.paisRepository.findByCodigo(updateUsuario.getPais()); - this.mapper.updateUsuario(updateUsuario, usuario); - usuario.setPais(pais); - this.usuarioRepository.save(usuario); - return usuario; - } - - - @Override - public ApiResponse recoverPassword(RecoverPassword updatePassword) { - this.validator.validate(updatePassword); - - this.tokenCache.getToken(updatePassword.getEmail()) - .map(x -> x.equals(updatePassword.getToken())) - .orElseThrow(() -> new IllegalArgumentException("No token was found to update password. Please try again")); - - Usuario user = this.usuarioRepository.findByEmail(updatePassword.getEmail()) - .orElseThrow(() -> new IllegalArgumentException(MessageFormat.format("User not found with email {0}. Please try again", - updatePassword.getEmail()))); - - user.setPassword(this.tokenGenerator.generarPassword(updatePassword.getPassword())); - this.usuarioRepository.save(user); - this.tokenCache.remove(user.getEmail()); - return ok(this.mapper.asApi(user)); - } - - @Override - public ApiResponse sendToken(String email) { - if (!this.usuarioRepository.exist(email)) { - throw new IllegalArgumentException(MessageFormat.format("User with email {0} does not exist in OpenScore", email)); - } - String token = this.tokenGenerator.generateRandomToken(); - this.tokenCache.add(email, token); - Map params = new HashMap<>(); - params.put("email", email); - params.put("token", token); - this.mailSender.send(this.mailFactory.getRecoverPasswordEmail(email, token)); - return ok(""); - } - - @Override - public ApiResponse updatePassword(UpdatePassword updatePassword) { - this.validator.validate(updatePassword); - long userId = this.userInfo.getUserId(); - - Usuario usuario = this.usuarioRepository.findById(userId).orElseThrow(() -> - new IllegalArgumentException("User is not logged in")); - - if (usuario.getPassword().equals(this.tokenGenerator.generarPassword(updatePassword.getOldPassword()))) { - usuario.setPassword(this.tokenGenerator.generarPassword(updatePassword.getPassword())); - this.usuarioRepository.save(usuario); - } else { - throw new IllegalArgumentException("Old password does not match"); - } - - return ok(this.mapper.asApi(usuario)); - } - - - private UsuarioDTO saveUser(CrearUsuarioDTO crearUsuario) { - this.validator.validate(crearUsuario); - Pais pais = this.paisRepository.findByCodigo(crearUsuario.getPais()); - Usuario usuario = this.mapper.asUsuario(crearUsuario); - usuario.setPassword(this.tokenGenerator.generarPassword(crearUsuario.getPassword())); - usuario.setRoles(new HashSet<>(Arrays.asList(Rol.USUARIO))); - usuario.setPais(pais); - this.usuarioRepository.save(usuario); - - UsuarioDTO usuarioDTO = this.mapper.asApi(usuario); - usuarioDTO.setPais(this.paisMapper.asApi(pais)); - - return usuarioDTO; - } - - @Override - @Secure - public ApiResponse deleteUsuario(long id) { - return null; - } - - @Override - public ApiResponse getUsuario(Long id) { - Usuario usuario = findUsuario(id); - UsuarioDTO usuarioDTO = this.mapper.asApi(usuario); - return new ApiResponse(usuarioDTO); - } - - private Usuario findUsuario(Long id) { - Optional usuarioOptional = this.usuarioRepository.findById(id); - return usuarioOptional.orElseThrow(() -> new IllegalArgumentException("User not found")); - } - - @Override - public ApiResponse getMiUsuario() { - return this.getUsuario(this.userInfo.getUserId()); - } - - public Usuario getUsuario(String email) { - Optional usuarioOptional = this.usuarioRepository.findByEmail(email); - return usuarioOptional.orElseThrow(() -> new IllegalArgumentException("User not found")); - } - - @Override - public ApiResponse login(LoginUsuarioDTO loginUsuario) { - Optional usuarioOptional = this.usuarioRepository.findByEmail(loginUsuario.getEmail().trim()); - Usuario usuario = usuarioOptional.orElseThrow(() -> new IllegalArgumentException("User or password not found")); - - TokenGenerator tokenGenerator = new TokenGenerator(); - - checkPassword(loginUsuario.getPassword(), usuario, tokenGenerator); - - UsuarioDTO usuarioDTO = this.mapper.asApi(usuario); - - TokenDTO tokenDTO = new TokenDTO(tokenGenerator.generarToken(usuario)); - - return new ApiResponse<>(tokenDTO); - } - - private void checkPassword(String password, Usuario usuario, TokenGenerator tokenGenerator) { - if (!usuario.getPassword().equals(tokenGenerator.generarPassword(password))) - throw new IllegalArgumentException("Invalid password"); - } - - @Override - public ApiResponse> getAll(int page, int pageSize, String filter) { - List usuarios = this.usuarioRepository.findAll(new Page(page, pageSize)); - List usuariosApi = this.mapper.asApi(usuarios); - return new ApiResponse<>(usuariosApi); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/template/TemplateEngine.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/template/TemplateEngine.java deleted file mode 100644 index f44bb0b..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/template/TemplateEngine.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.semantic.openscore.core.template; - -import com.mitchellbosecke.pebble.PebbleEngine; -import com.mitchellbosecke.pebble.template.PebbleTemplate; - -import javax.annotation.PostConstruct; -import javax.enterprise.context.ApplicationScoped; -import java.io.StringWriter; -import java.util.Map; - -@ApplicationScoped -public class TemplateEngine { - - private PebbleEngine engine; - - @PostConstruct - public void initialize() { - engine = new PebbleEngine.Builder().build(); - } - - public String evaluate(String templateName, Map params) { - try { - StringWriter stringWriter = new StringWriter(); - PebbleTemplate compiledTemplate = this.engine.getTemplate(buildTemplateName(templateName)); - compiledTemplate.evaluate(stringWriter, params); - return stringWriter.toString(); - } catch (Exception e) { - throw new TemplateEngineException("Can't process template", e); - } - } - - private String buildTemplateName(String templateName) { - return "templates/" + templateName + ".html"; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/template/TemplateEngineException.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/template/TemplateEngineException.java deleted file mode 100644 index e41b77a..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/template/TemplateEngineException.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.semantic.openscore.core.template; - -import io.semantic.openscore.core.exceptions.ApplicationException; - -public class TemplateEngineException extends ApplicationException { - public TemplateEngineException(String message, Throwable throwable) { - super(message, throwable); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/util/JsonConverter.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/util/JsonConverter.java deleted file mode 100644 index d845462..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/util/JsonConverter.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.semantic.openscore.core.util; - -public class JsonConverter { - -// private static final - - public static String toJson() { - return ""; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/ApplicationValidator.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/ApplicationValidator.java deleted file mode 100644 index 976df27..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/ApplicationValidator.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.semantic.openscore.core.validation; - -import io.semantic.openscore.core.exceptions.ValidationException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import javax.validation.ConstraintViolation; -import javax.validation.Validator; -import java.util.Set; - -@ApplicationScoped -public class ApplicationValidator { - - private Logger logger = LoggerFactory.getLogger(ApplicationValidator.class); - - private Validator validator; - - public ApplicationValidator() { - } - - @Inject - public ApplicationValidator(Validator validator) { - this.validator = validator; - } - - public void validate(Object object) { - try { - Set> errors = validator.validate(object); - if (!errors.isEmpty()) { - String message = ValidationException.generateMessage(errors); - logger.error(message); - throw new ValidationException(message, ValidationException.generateErrorsList(errors)); - } - } catch (javax.validation.ValidationException e) { - logger.error(e.getLocalizedMessage(), e); - throw new ValidationException(e.getMessage(), e); - } - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/annotations/Matches.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/annotations/Matches.java deleted file mode 100644 index 7d2b681..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/annotations/Matches.java +++ /dev/null @@ -1,36 +0,0 @@ -package io.semantic.openscore.core.validation.annotations; - -import io.semantic.openscore.core.validation.validators.MatchesValidator; - -import javax.validation.Constraint; -import javax.validation.Payload; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@Target({TYPE}) -@Retention(RUNTIME) -@Constraint(validatedBy = MatchesValidator.class) -@Documented -public @interface Matches { - - String message() default "{io.semantic.openscore.core.validation.Matches.message}"; - - Class[] groups() default {}; - - Class[] payload() default {}; - - String first(); - - String second(); - - @Target({TYPE}) - @Retention(RUNTIME) - @Documented - @interface List { - Matches[] value(); - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/annotations/Password.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/annotations/Password.java deleted file mode 100644 index 3c7010e..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/annotations/Password.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.semantic.openscore.core.validation.annotations; - -import io.semantic.openscore.core.validation.validators.PasswordValidator; - -import javax.validation.Constraint; -import javax.validation.Payload; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@Target({FIELD}) -@Retention(RUNTIME) -@Constraint(validatedBy = PasswordValidator.class) -@Documented -public @interface Password { - - String message() default "{io.semantic.openscore.core.validation.Password.message}"; - - Class[] groups() default {}; - - Class[] payload() default {}; - -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/EmailValidator.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/EmailValidator.java deleted file mode 100644 index 1d27d0c..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/EmailValidator.java +++ /dev/null @@ -1,6 +0,0 @@ -package io.semantic.openscore.core.validation.validators; - -public interface EmailValidator { - - boolean validate(String mail); -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/MatchesValidator.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/MatchesValidator.java deleted file mode 100644 index 89f8d9d..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/MatchesValidator.java +++ /dev/null @@ -1,47 +0,0 @@ -package io.semantic.openscore.core.validation.validators; - -import io.semantic.openscore.core.validation.annotations.Matches; -import org.apache.commons.beanutils.BeanUtils; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import java.util.Objects; - -public class MatchesValidator implements ConstraintValidator { - private String first; - private String second; - - @Override - public void initialize(Matches matches) { - first = matches.first(); - second = matches.second(); - } - - @Override - public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) { - - boolean isValid = false; - - try { - String propert1 = BeanUtils.getProperty(object, first); - String propert2 = BeanUtils.getProperty(object, second); - - isValid = Objects.equals(propert1, propert2); - } catch (Exception e) { - isValid = false; - } finally { - - if (!isValid) { - constraintValidatorContext.disableDefaultConstraintViolation(); - constraintValidatorContext.buildConstraintViolationWithTemplate( - "{io.semantic.openscore.core.validation.Matches.message}" - ).addConstraintViolation(); - } - - - return isValid; - } - - - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/PasswordValidator.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/PasswordValidator.java deleted file mode 100644 index 38cb470..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/PasswordValidator.java +++ /dev/null @@ -1,37 +0,0 @@ -package io.semantic.openscore.core.validation.validators; - -import io.semantic.openscore.core.validation.annotations.Password; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class PasswordValidator implements ConstraintValidator { - - - private static final String PASSWORD_PATTERN = "[\\w\\S]{6,30}"; - private Pattern pattern; - - @Override - public void initialize(Password password) { - pattern = Pattern.compile(PASSWORD_PATTERN); - } - - @Override - public boolean isValid(String passw, ConstraintValidatorContext constraintValidatorContext) { - - - Matcher matcher = pattern.matcher(passw); - boolean isValid = matcher.matches(); - - if (!isValid) { - constraintValidatorContext.disableDefaultConstraintViolation(); - constraintValidatorContext.buildConstraintViolationWithTemplate( - "{io.semantic.openscore.core.validation.Password.message}" - ).addConstraintViolation(); - } - - return isValid; - } -} diff --git a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/RedHatEmailValidator.java b/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/RedHatEmailValidator.java deleted file mode 100644 index a797a7d..0000000 --- a/packages/openscore-core/src/main/java/io/semantic/openscore/core/validation/validators/RedHatEmailValidator.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.semantic.openscore.core.validation.validators; - -public class RedHatEmailValidator implements EmailValidator { - - @Override - public boolean validate(String mail) { - return mail.endsWith("@redhat.com"); - } -} diff --git a/packages/openscore-core/src/main/resources/ValidationMessages.properties b/packages/openscore-core/src/main/resources/ValidationMessages.properties deleted file mode 100644 index 2679f5e..0000000 --- a/packages/openscore-core/src/main/resources/ValidationMessages.properties +++ /dev/null @@ -1,2 +0,0 @@ -io.semantic.openscore.core.validation.Matches.message=Field {first} and {second} doesn't match -io.semantic.openscore.core.validation.Password.message=Password is not valid. It should have at least 6 characters and no space. \ No newline at end of file diff --git a/packages/openscore-core/src/main/resources/configmap.properties b/packages/openscore-core/src/main/resources/configmap.properties deleted file mode 100644 index 790d2da..0000000 --- a/packages/openscore-core/src/main/resources/configmap.properties +++ /dev/null @@ -1,6 +0,0 @@ -POSTGRESQL_DATABASE=openscore -POSTGRESQL_SERVICE_PORT=5432 -POSTGRESQL_SERVICE_HOST=openscore-db -POSTGRESQL_PASSWORD=redhat01 -POSTGRESQL_USER=admin -POSTGRESQL_DATASOURCE=openscore diff --git a/packages/openscore-core/src/main/resources/data/partidos.yml b/packages/openscore-core/src/main/resources/data/partidos.yml deleted file mode 100644 index 19ef219..0000000 --- a/packages/openscore-core/src/main/resources/data/partidos.yml +++ /dev/null @@ -1,141 +0,0 @@ ---- -- local: BRA - visitante: VEN - grupo: GRUPO_A - lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 13-06-2021T18:00-0300 - fecha: "1" - fase: GRUPO -- local: COL - visitante: ECU - grupo: GRUPO_A - lugar: CUIABÁ, ARENA PANTANAL - dia: 13-06-2021T21:00-0300 - fecha: "1" - fase: GRUPO -- local: ARG - visitante: CHL - grupo: GRUPO_B - lugar: RIO DE JANEIRO, ESTADIO OLIMPICO - dia: 14-06-2021T18:00-0300 - fecha: "1" - fase: GRUPO -- local: PRY - visitante: BOL - grupo: GRUPO_B - lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO - dia: 14-06-2021T21:00-0300 - fecha: "1" - fase: GRUPO -- local: COL - visitante: VEN - grupo: GRUPO_A - lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO - dia: 17-06-2021T18:00-0300 - fecha: "2" - fase: GRUPO -- local: BRA - visitante: PER - grupo: GRUPO_A - lugar: RIO DE JANEIRO, ESTADIO OLIMPICO - dia: 17-06-2021T21:00-0300 - fecha: "2" - fase: GRUPO -- local: CHL - visitante: BOL - grupo: GRUPO_B - lugar: CUIABÁ, ARENA PANTANAL - dia: 18-06-2021T18:00-0300 - fecha: "2" - fase: GRUPO -- local: ARG - visitante: URY - grupo: GRUPO_B - lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 18-06-2021T21:00-0300 - fecha: "2" - fase: GRUPO -- local: VEN - visitante: ECU - grupo: GRUPO_A - lugar: RIO DE JANEIRO, ESTADIO OLIMPICO - dia: 20-06-2021T18:00-0300 - fecha: "3" - fase: GRUPO -- local: COL - visitante: PER - grupo: GRUPO_A - lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO - dia: 20-06-2021T21:00-0300 - fecha: "3" - fase: GRUPO -- local: URY - visitante: CHL - grupo: GRUPO_B - lugar: CUIABÁ, ARENA PANTANAL - dia: 21-06-2021T18:00-0300 - fecha: "3" - fase: GRUPO -- local: ARG - visitante: PRY - grupo: GRUPO_B - lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 21-06-2021T21:00-0300 - fecha: "3" - fase: GRUPO -- local: ECU - visitante: PER - grupo: GRUPO_A - lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO - dia: 23-06-2021T18:00-0300 - fecha: "4" - fase: GRUPO -- local: BRA - visitante: COL - grupo: GRUPO_A - lugar: RIO DE JANEIRO, ESTADIO OLIMPICO - dia: 23-06-2021T21:00-0300 - fecha: "4" - fase: GRUPO -- local: BOL - visitante: URY - grupo: GRUPO_B - lugar: CUIABÁ, ARENA PANTANAL - dia: 24-06-2021T18:00-0300 - fecha: "4" - fase: GRUPO -- local: CHL - visitante: PRY - grupo: GRUPO_B - lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 24-06-2021T21:00-0300 - fecha: "4" - fase: GRUPO -- local: BRA - visitante: ECU - grupo: GRUPO_A - lugar: GOIÂNIA, ESTADIO OLIMPICO PEDRO LUDOVICO - dia: 27-06-2021T18:00-0300 - fecha: "5" - fase: GRUPO -- local: VEN - visitante: PER - grupo: GRUPO_A - lugar: BRASILIA, ESTADIO NACIONAL DE BRASILIA - dia: 27-06-2021T18:00-0300 - fecha: "5" - fase: GRUPO -- local: URY - visitante: PRY - grupo: GRUPO_B - lugar: RIO DE JANEIRO, ESTADIO OLIMPICO - dia: 28-06-2021T21:00-0300 - fecha: "5" - fase: GRUPO -- local: BOL - visitante: ARG - grupo: GRUPO_B - lugar: CUIABÁ, ARENA PANTANAL - dia: 28-06-2021T21:00-0300 - fecha: "5" - fase: GRUPO diff --git a/packages/openscore-core/src/main/resources/data/preguntas.yml b/packages/openscore-core/src/main/resources/data/preguntas.yml deleted file mode 100644 index e2bd71a..0000000 --- a/packages/openscore-core/src/main/resources/data/preguntas.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -- codigo: PERRO - pregunta: What's the name of your first dog? -- codigo: MADRE - pregunta: What's your mother second name? -- codigo: EQUIPO - pregunta: What's you favorite sport team? \ No newline at end of file diff --git a/packages/openscore-core/src/main/resources/infinispan.xml b/packages/openscore-core/src/main/resources/infinispan.xml deleted file mode 100644 index 1692073..0000000 --- a/packages/openscore-core/src/main/resources/infinispan.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/packages/openscore-core/src/main/resources/info.properties b/packages/openscore-core/src/main/resources/info.properties deleted file mode 100644 index 111a51c..0000000 --- a/packages/openscore-core/src/main/resources/info.properties +++ /dev/null @@ -1,2 +0,0 @@ -info.version=${project.version} -info.environment=${project.environment} diff --git a/packages/openscore-core/src/main/resources/logback.xml b/packages/openscore-core/src/main/resources/logback.xml deleted file mode 100644 index 9cf17f4..0000000 --- a/packages/openscore-core/src/main/resources/logback.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/openscore-core/src/main/resources/templates/recover.html b/packages/openscore-core/src/main/resources/templates/recover.html deleted file mode 100644 index 29d8e82..0000000 --- a/packages/openscore-core/src/main/resources/templates/recover.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - -
                - - - - -
                -
                - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                - Empezá a palpitar el Mundial Rusia 2018 -
                - - - - - - - -
                - - - - - - - - - - - - - -
                Predecí los resultados de los partidos con Red Hat OpenScore, la plataforma diseñada por red hatters para red hatters, que te permitirá vivir el minuto a minuto de la copa del mundo.
                Acertá los resultados de los partidos y avanzá hacia la final para coronarte como el ganador del prode.
                ¡Podés ganar premios!
                -
                -
                - - - - - - - -
                - - - - - - - - - -
                - - - - - - - - - - https://openscore-ui-openscore.b9ad.pro-us-east-1.openshiftapps.com/#/pages/password?recover={{token}}&email={{email}} - - - - - -
                Para participar tenés que ingresar a:
                y crear tu usuario y contraseña.
                Una vez en la plataforma podrás:
                -
                - -
                - - - - - - - - - - - - -
                - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                01.
                02.
                03.
                04.
                05.
                -
                - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                Consultar el fixture
                del mundial
                Conocer las reglas
                Hacer las predicciones
                para el próximo partido
                Ver el ranking y en qué posición estás.
                Leer las noticias
                destacadas
                -
                -
                - -
                El juego ya empezó.
                Sé parte.
                - - - - - - - - - - - - - -
                Red HatFacebook Linkedin Twitter Youtube
                - -
                -
                -
                -
                - - \ No newline at end of file diff --git a/packages/openscore-core/src/main/webapp/WEB-INF/jboss-web.xml b/packages/openscore-core/src/main/webapp/WEB-INF/jboss-web.xml deleted file mode 100644 index e438392..0000000 --- a/packages/openscore-core/src/main/webapp/WEB-INF/jboss-web.xml +++ /dev/null @@ -1,3 +0,0 @@ - - openscore - \ No newline at end of file diff --git a/packages/openscore-core/src/test/java/io/semantic/openscore/core/model/UsuarioTest.java b/packages/openscore-core/src/test/java/io/semantic/openscore/core/model/UsuarioTest.java deleted file mode 100644 index 1f41bec..0000000 --- a/packages/openscore-core/src/test/java/io/semantic/openscore/core/model/UsuarioTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package io.semantic.openscore.core.model; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Spy; -import org.mockito.junit.MockitoJUnitRunner; - -import java.util.Arrays; -import java.util.HashSet; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class UsuarioTest { - - @Spy - private Usuario usuarioSinPronosticos; - - - @Spy - private Usuario usuario; - - @Mock - private Fase faseDeGrupos; - - - @Before - public void setUp() { - - when(faseDeGrupos.getPuntos()).thenReturn(1); - - Pronostico p1 = spy(new Pronostico()); - when(p1.isLocal()).thenReturn(true); - - Resultado resultado = new Resultado(); - - Partido partido = new Partido(); - partido.setFase(faseDeGrupos); - - resultado.setPartido(partido); - partido.setResultado(resultado); - - resultado.setLocal(1); - resultado.setVisitante(0); - - when(p1.getPartido()).thenReturn(partido); - - when(usuario.getPronosticos()).thenReturn(new HashSet<>(Arrays.asList(p1))); - - } - - - @Test - public void testCalcularPuntosSinPronostico() { - int puntos = usuarioSinPronosticos.getPuntos(); - assertEquals(0, puntos); - } - - @Test - public void testCalcularPuntosUnPartidoGanado() { - int puntos = usuario.getPuntos(); - assertEquals(1, puntos); - } - -} \ No newline at end of file diff --git a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/PaisRepositoryTest.java b/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/PaisRepositoryTest.java deleted file mode 100644 index 156ab83..0000000 --- a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/PaisRepositoryTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Pais; -import org.junit.Test; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - - -class PaisRepositoryTest extends RepositoryBaseTest { - - private PaisRepository paisRepository; - - @Override - protected void beforeEach() { - paisRepository = new PaisRepository(entityManager); - } - - @Test - void testExistPais() { - - - assertFalse(this.paisRepository.exist("ARG")); - - Pais pais = new Pais(); - pais.setNombre("Argentina"); - pais.setCodigo("ARG"); - - transaction(() -> this.paisRepository.save(pais)); - assertTrue(this.paisRepository.exist("ARG")); - - } -} \ No newline at end of file diff --git a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/RepositoryBaseTest.java b/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/RepositoryBaseTest.java deleted file mode 100644 index d4cf203..0000000 --- a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/RepositoryBaseTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.semantic.openscore.core.repository; - - -import org.junit.Before; - -import javax.persistence.EntityManager; -import javax.persistence.EntityTransaction; -import javax.persistence.Persistence; -import java.util.function.Supplier; - -public abstract class RepositoryBaseTest { - - protected EntityManager entityManager; - - @Before - public void setUp() { - entityManager = Persistence - .createEntityManagerFactory("test") - .createEntityManager(); - beforeEach(); - } - - abstract protected void beforeEach(); - - protected void transaction(Runnable runnable) { - EntityTransaction tx = this.entityManager.getTransaction(); - tx.begin(); - runnable.run(); - tx.commit(); - } - - protected T transaction(Supplier runnable) { - EntityTransaction tx = this.entityManager.getTransaction(); - tx.begin(); - T result = runnable.get(); - tx.commit(); - return result; - } -} diff --git a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/RepositoryTest.java b/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/RepositoryTest.java deleted file mode 100644 index c2cb9b5..0000000 --- a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/RepositoryTest.java +++ /dev/null @@ -1,120 +0,0 @@ -package io.semantic.openscore.core.repository; - -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.persistence.TypedQuery; -import java.util.List; -import java.util.Optional; - -import static org.junit.Assert.*; - - -class RepositoryTest extends RepositoryBaseTest { - - private Repository repository; - private Logger logger = LoggerFactory.getLogger(RepositoryTest.class); - - @Override - protected void beforeEach() { - this.repository = new TestRepository(entityManager); - } - - @Test - void testSaveElement() { - TestObject original = new TestObject(); - original.setName("OpenScore"); - - long id = transaction(() -> this.repository.save(original)); - - Optional testObject = this.repository.findById(id); - assertEquals(original.getName(), - testObject.get().getName()); - assertFalse(testObject.get().isDeleted()); - assertNotNull(testObject.get().getCreationDate()); - } - - - @Test - void testFindByQuery() { - TestObject original = new TestObject("OpenScore"); - transaction(() -> this.repository.save(original)); - TypedQuery query = this.repository.createQuery("from TestObject t where t.name = :name").setParameter("name", - "OpenScore"); - List elements = this.repository.findByQuery(query, - new Page(0, - 1)); - assertEquals(original.getName(), - elements.get(0).getName()); - } - - @Test - void testHardDeleteByQuery() { - TestObject original = new TestObject("OpenScore"); - transaction(() -> this.repository.save(original)); - TypedQuery query = this.repository.createQuery("from TestObject where name = :name").setParameter("name", - "OpenScore"); - assertEquals(1, - this.repository.findByQuery(query, - new Page(0, - 1)).size()); - transaction(() -> this.repository.hardDeleteByQuery(query)); - assertEquals(0, - this.repository.findByQuery(query, - new Page(0, - 1)).size()); - } - - @Test - void testHardDeleteById() { - TestObject original = new TestObject("OpenScore"); - long id = transaction(() -> this.repository.save(original)); - TypedQuery query = this.repository.createQuery("from TestObject where name = :name").setParameter("name", - "OpenScore"); - - assertEquals(1, - this.repository.findByQuery(query, - new Page(0, - 1)).size()); - - transaction(() -> this.repository.hardDeleteById(id)); - - assertEquals(0, - this.repository.findByQuery(query, - new Page(0, - 1)).size()); - } - - @Test - void testDeleteByQuery() { - TestObject original = new TestObject("OpenScore"); - long id = transaction(() -> this.repository.save(original)); - TypedQuery query = this.repository.createQuery("from TestObject where name = :name").setParameter("name", - "OpenScore"); - assertEquals(1, - this.repository.findByQuery(query, - new Page(0, - 1)).size()); - this.repository.deleteByQuery(query); - assertEquals(1, - this.repository.findByQuery(query, - new Page(0, - 1)).size()); - assertTrue(query.getSingleResult().isDeleted()); - } - - @Test - void testDeleteById() { - TestObject original = new TestObject("OpenScore"); - long id = transaction(() -> this.repository.save(original)); - TypedQuery query = this.repository.createQuery("from TestObject where name = :name").setParameter("name", - "OpenScore"); - assertEquals(1, - query.getResultList().size()); - this.repository.deleteById(id); - assertEquals(1, - query.getResultList().size()); - assertTrue(query.getSingleResult().isDeleted()); - } -} \ No newline at end of file diff --git a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/TestObject.java b/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/TestObject.java deleted file mode 100644 index 2e7a305..0000000 --- a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/TestObject.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.semantic.openscore.core.repository; - -import javax.persistence.Entity; - -import io.semantic.openscore.core.model.Storable; - -@Entity -public class TestObject extends Storable { - - private String name; - - public TestObject() { - } - - public TestObject(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/TestRepository.java b/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/TestRepository.java deleted file mode 100644 index fa1de08..0000000 --- a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/TestRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.semantic.openscore.core.repository; - -import javax.ejb.Stateless; -import javax.persistence.EntityManager; - -@Stateless -public class TestRepository extends Repository { - - public TestRepository(EntityManager entityManager) { - super(TestObject.class, - entityManager); - } - - @Override - public boolean exist(TestObject entity) { - return false; - } - -} diff --git a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/UsuarioRepositoryTest.java b/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/UsuarioRepositoryTest.java deleted file mode 100644 index fc5389b..0000000 --- a/packages/openscore-core/src/test/java/io/semantic/openscore/core/repository/UsuarioRepositoryTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package io.semantic.openscore.core.repository; - -import io.semantic.openscore.core.model.Pais; -import io.semantic.openscore.core.model.Usuario; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Optional; - -import static org.junit.Assert.assertEquals; - -public class UsuarioRepositoryTest extends RepositoryBaseTest { - - private UsuarioRepository repository; - private Logger logger = LoggerFactory.getLogger(RepositoryTest.class); - - @Test - public void testFindByEmail() { - String email = "john.frusciante@gmail.com"; - - Usuario newUser = new Usuario(); - - newUser.setNombre("John"); - newUser.setApellido("Frusciante"); - newUser.setEmail(email); - newUser.setPassword("anthony_kiedis"); - - Pais pais = new Pais(); - pais.setNombre("Argentina"); - pais.setCodigo("ARG"); - - PaisRepository paisRepository = new PaisRepository(this.entityManager); - transaction(() -> paisRepository.save(pais)); - - newUser.setPais(pais); - - transaction(() -> this.repository.save(newUser)); - - Optional user = this.repository.findByEmail(email); - - assertEquals(email, user.get().getEmail()); - } - - @Override - protected void beforeEach() { - this.repository = new UsuarioRepository(this.entityManager); - } -} \ No newline at end of file diff --git a/packages/openscore-core/src/test/java/io/semantic/openscore/core/security/GenerateToken.java b/packages/openscore-core/src/test/java/io/semantic/openscore/core/security/GenerateToken.java deleted file mode 100644 index 89f8122..0000000 --- a/packages/openscore-core/src/test/java/io/semantic/openscore/core/security/GenerateToken.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.semantic.openscore.core.security; - -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.model.Usuario; - -import java.util.Arrays; -import java.util.HashSet; - -public class GenerateToken { - - public static void main(String[] args) { - TokenGenerator tokenGenerator = new TokenGenerator(); - Usuario usuario = crearUsuario(tokenGenerator); - String token = tokenGenerator.generarToken(usuario); - System.out.println(token); - } - - public static Usuario crearUsuario(TokenGenerator tokenGenerator) { - Usuario usuario = new Usuario(); - usuario.setRoles(new HashSet<>(Arrays.asList(Rol.ADMIN, Rol.USUARIO))); - usuario.setEmail("admin@admin.com"); - usuario.setApellido("Admin"); - usuario.setNombre("Admin"); - usuario.setPassword(tokenGenerator.generarPassword("admin")); - return usuario; - } -} diff --git a/packages/openscore-core/src/test/java/io/semantic/openscore/core/security/TokenGeneratorTest.java b/packages/openscore-core/src/test/java/io/semantic/openscore/core/security/TokenGeneratorTest.java deleted file mode 100644 index ebf6092..0000000 --- a/packages/openscore-core/src/test/java/io/semantic/openscore/core/security/TokenGeneratorTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package io.semantic.openscore.core.security; - -import java.text.ParseException; - -import com.google.common.collect.Sets; -import com.nimbusds.jwt.SignedJWT; -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.model.Usuario; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class TokenGeneratorTest { - - private TokenGenerator tokenGenerator; - - @Before - public void setUp() { - this.tokenGenerator = new TokenGenerator(); - } - - @Test - public void testCrearToken() throws ParseException { - String nombre = "Lionel"; - String apellido = "Messi"; - String email = "lionel.messi@gmail.com"; - String username = "lmessi"; - - Usuario usuario = new Usuario(); - usuario.setNombre(nombre); - usuario.setApellido(apellido); - usuario.setEmail(email); - usuario.setRoles(Sets.newHashSet(Rol.ADMIN, - Rol.USUARIO)); - String token = this.tokenGenerator.generarToken(usuario); - - SignedJWT signedJWT = SignedJWT.parse(token); - - assertEquals(nombre, - signedJWT.getJWTClaimsSet().getStringClaim(TokenGenerator.NOMBRE)); - assertEquals(apellido, - signedJWT.getJWTClaimsSet().getStringClaim(TokenGenerator.APELLIDO)); - assertEquals(email, - signedJWT.getJWTClaimsSet().getStringClaim(TokenGenerator.EMAIL)); - assertNotNull(signedJWT.getJWTClaimsSet().getExpirationTime().getTime()); - assertTrue(signedJWT.getJWTClaimsSet().getStringListClaim(TokenGenerator.ROLES).contains(Rol.ADMIN.toString())); - } - - @Test - public void testCrearPassword() { - - String password = this.tokenGenerator.generarPassword("123"); - assertEquals(64, - password.length()); - } -} \ No newline at end of file diff --git a/packages/openscore-core/src/test/java/io/semantic/openscore/core/services/impl/UsuariosServiceImplTest.java b/packages/openscore-core/src/test/java/io/semantic/openscore/core/services/impl/UsuariosServiceImplTest.java deleted file mode 100644 index 7455547..0000000 --- a/packages/openscore-core/src/test/java/io/semantic/openscore/core/services/impl/UsuariosServiceImplTest.java +++ /dev/null @@ -1,149 +0,0 @@ -package io.semantic.openscore.core.services.impl; - -import io.semantic.openscore.core.api.usuarios.CrearUsuarioDTO; -import io.semantic.openscore.core.cache.TokenCache; -import io.semantic.openscore.core.email.MailFactory; -import io.semantic.openscore.core.email.MailProvider; -import io.semantic.openscore.core.email.MailServer; -import io.semantic.openscore.core.exceptions.ValidationException; -import io.semantic.openscore.core.logging.ServiceLogger; -import io.semantic.openscore.core.mapping.PaisMapper; -import io.semantic.openscore.core.mapping.UsuarioMapper; -import io.semantic.openscore.core.model.Pais; -import io.semantic.openscore.core.model.Rol; -import io.semantic.openscore.core.model.Usuario; -import io.semantic.openscore.core.repository.PaisRepository; -import io.semantic.openscore.core.repository.UsuarioRepository; -import io.semantic.openscore.core.security.TokenGenerator; -import io.semantic.openscore.core.services.UserInfo; -import io.semantic.openscore.core.services.api.UsuariosService; -import io.semantic.openscore.core.validation.ApplicationValidator; -import io.semantic.openscore.core.validation.validators.EmailValidator; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mapstruct.factory.Mappers; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; - -import javax.enterprise.inject.Instance; -import javax.validation.Validation; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - - -@RunWith(MockitoJUnitRunner.class) -public class UsuariosServiceImplTest { - - - private static final String APELLIDO = "Hendrix"; - private static final String NOMBRE = "Jimi"; - private static final String EMAIL = "jimi@hendrix.com"; - private static final String PAIS = "ARG"; - private static final String PASSWORD = "1234!56"; - - @Mock - private UsuarioRepository usuarioRepository; - - @Mock - private PaisRepository paisRepository; - - private UsuariosService usuariosService; - - @Captor - private ArgumentCaptor usuarioCaptor; - - private Pais pais; - - private TokenGenerator tokenGenerator; - - @Mock - Instance emailValidators; - - @Before - public void setUp() { - - tokenGenerator = new TokenGenerator(); - pais = new Pais("ARG", "Argentina"); - usuariosService = new UsuariosServiceImpl(usuarioRepository, - paisRepository, - tokenGenerator, - new ApplicationValidator(Validation.buildDefaultValidatorFactory().getValidator()), - Mappers.getMapper(UsuarioMapper.class), - Mappers.getMapper(PaisMapper.class), - mock(UserInfo.class), - mock(TokenCache.class), - mock(MailServer.class), - mock(MailFactory.class), - emailValidators, - mock(ServiceLogger.class)); - when(paisRepository.findByCodigo(eq(pais.getCodigo()))).thenReturn(pais); - } - - @Test - public void testSeGuardaUnUsuarioCorrecto() { - CrearUsuarioDTO crearUsuarioDTO = new CrearUsuarioDTO(); - crearUsuarioDTO.setApellido(APELLIDO); - crearUsuarioDTO.setNombre(NOMBRE); - crearUsuarioDTO.setEmail(EMAIL); - crearUsuarioDTO.setConfirmacionEmail(EMAIL); - crearUsuarioDTO.setPassword(PASSWORD); - crearUsuarioDTO.setConfirmacionPassword(PASSWORD); - crearUsuarioDTO.setPais(PAIS); - this.usuariosService.registrarUsuario(crearUsuarioDTO); - verify(usuarioRepository, times(1)).save(usuarioCaptor.capture()); - - assertEquals(NOMBRE, usuarioCaptor.getValue().getNombre()); - assertEquals(APELLIDO, usuarioCaptor.getValue().getApellido()); - assertEquals(EMAIL, usuarioCaptor.getValue().getEmail()); - assertEquals(this.tokenGenerator.generarPassword(PASSWORD), usuarioCaptor.getValue().getPassword()); - assertTrue(usuarioCaptor.getValue().getRoles().contains(Rol.USUARIO)); - assertEquals(new Pais(PAIS, "Argentina"), usuarioCaptor.getValue().getPais()); - - } - - @Test(expected = ValidationException.class) - public void testProblemaAlConfirmarEmail() { - CrearUsuarioDTO crearUsuarioDTO = new CrearUsuarioDTO(); - crearUsuarioDTO.setApellido(APELLIDO); - crearUsuarioDTO.setNombre(NOMBRE); - crearUsuarioDTO.setEmail(EMAIL); - crearUsuarioDTO.setConfirmacionEmail(EMAIL + "IMPOSIBLE_CONFIRMAR"); - crearUsuarioDTO.setPassword(PASSWORD); - crearUsuarioDTO.setConfirmacionPassword(PASSWORD); - crearUsuarioDTO.setPais(PAIS); - this.usuariosService.registrarUsuario(crearUsuarioDTO); - } - - @Test(expected = ValidationException.class) - public void testProblemaAlConfirmarPassword() { - CrearUsuarioDTO crearUsuarioDTO = new CrearUsuarioDTO(); - crearUsuarioDTO.setApellido(APELLIDO); - crearUsuarioDTO.setNombre(NOMBRE); - crearUsuarioDTO.setEmail(EMAIL); - crearUsuarioDTO.setConfirmacionEmail(EMAIL); - crearUsuarioDTO.setPassword(PASSWORD); - crearUsuarioDTO.setConfirmacionPassword(PASSWORD + "IMPOSIBLE_CONFIRMAR"); - crearUsuarioDTO.setPais(PAIS); - this.usuariosService.registrarUsuario(crearUsuarioDTO); - } - - @Test(expected = ValidationException.class) - public void testProblemaAlValidarUsuarioNoNulo() { - CrearUsuarioDTO crearUsuarioDTO = new CrearUsuarioDTO(); - crearUsuarioDTO.setApellido(APELLIDO); - crearUsuarioDTO.setNombre(""); - crearUsuarioDTO.setEmail(EMAIL); - crearUsuarioDTO.setConfirmacionEmail(EMAIL); - crearUsuarioDTO.setPassword(PASSWORD); - crearUsuarioDTO.setConfirmacionPassword(PASSWORD + "IMPOSIBLE_CONFIRMAR"); - crearUsuarioDTO.setPais(PAIS); - this.usuariosService.registrarUsuario(crearUsuarioDTO); - } - -} \ No newline at end of file diff --git a/packages/openscore-core/src/test/resources/META-INF/persistence.xml b/packages/openscore-core/src/test/resources/META-INF/persistence.xml deleted file mode 100644 index 230aa10..0000000 --- a/packages/openscore-core/src/test/resources/META-INF/persistence.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - org.hibernate.ejb.HibernatePersistence - io.semantic.openscore.core.model.Usuario - io.semantic.openscore.core.model.Pais - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/openscore-core/src/test/resources/docker/Dockerfile b/packages/openscore-core/src/test/resources/docker/Dockerfile deleted file mode 100644 index cc59463..0000000 --- a/packages/openscore-core/src/test/resources/docker/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM jboss/wildfly:10.1.0.Final -RUN /opt/jboss/wildfly/bin/add-user.sh admin redhat.1 --silent -ADD target/openscore-core.war /opt/jboss/wildfly/standalone/deployments/ROOT.war -CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0", "-Djava.net.preferIPv4Stack=true"] diff --git a/packages/openscore-core/src/test/resources/docker/docker-compose.yml b/packages/openscore-core/src/test/resources/docker/docker-compose.yml deleted file mode 100644 index 476cd24..0000000 --- a/packages/openscore-core/src/test/resources/docker/docker-compose.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: "3" -services: - wildfly: - build: - context: ../../../../ - dockerfile: ./src/test/resources/docker/Dockerfile - ports: - - "8080:8080" - - "9990:9990" diff --git a/packages/openscore-core/wildfly.sh b/packages/openscore-core/wildfly.sh deleted file mode 100755 index ba4e038..0000000 --- a/packages/openscore-core/wildfly.sh +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/bash - -mvn clean install -Dmaven.test.skip=true && docker-compose -f ./src/test/resources/docker/docker-compose.yml up --build diff --git a/packages/openscore-nextjs/components/MatchCard.tsx b/packages/openscore-nextjs/components/MatchCard.tsx index 956d205..33170b8 100644 --- a/packages/openscore-nextjs/components/MatchCard.tsx +++ b/packages/openscore-nextjs/components/MatchCard.tsx @@ -76,6 +76,7 @@ const StatusIndicator = ({ children }: PropsWithChildren) => ( ); const MatchCard = ({ partido, onUpdate }: MatchCardProps) => { + console.log(new Date(partido.dia)); return (
                Date: Tue, 11 Oct 2022 12:18:13 -0300 Subject: [PATCH 15/28] Se arregla la fecha del partido --- packages/openscore-core-quarkus/pom.xml | 2 +- .../openscore/core/model/Partido.java | 1 - .../core/repository/startup/PartidoData.java | 6 ++--- .../startup/steps/CrearPartidos.java | 2 +- .../startup/steps/FileBasedStartupStep.java | 4 ++-- .../openscore-nextjs/components/MatchCard.tsx | 24 +++++++++++++++---- 6 files changed, 26 insertions(+), 13 deletions(-) diff --git a/packages/openscore-core-quarkus/pom.xml b/packages/openscore-core-quarkus/pom.xml index 38232dd..ece819d 100644 --- a/packages/openscore-core-quarkus/pom.xml +++ b/packages/openscore-core-quarkus/pom.xml @@ -136,7 +136,7 @@ com.fasterxml.jackson.dataformat jackson-dataformat-yaml - 2.3.0 + 2.13.4 com.fasterxml.jackson.core diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java index 3316ebb..1e06ec1 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Partido.java @@ -111,7 +111,6 @@ private int calcularPuntos() { } public boolean isBloqueado() { - System.out.println(this.getDia().toInstant(ZoneOffset.UTC).toEpochMilli()); return this.getDia().toInstant(ZoneOffset.UTC).toEpochMilli() <= Instant.now().toEpochMilli() + 900000; } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java index 9e67fca..f27df2a 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/PartidoData.java @@ -5,7 +5,7 @@ public class PartidoData { private String local; private String visitante; private String dia; - private String fecha; + private int fecha; private String lugar; private String grupo; private String fase; @@ -58,11 +58,11 @@ public void setFase(String fase) { this.fase = fase; } - public String getFecha() { + public int getFecha() { return fecha; } - public void setFecha(String fecha) { + public void setFecha(int fecha) { this.fecha = fecha; } } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java index cbc4517..271eb0b 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearPartidos.java @@ -67,7 +67,7 @@ protected Partido map(PartidoData partidoData) { partido.setDia(diaBuilder.getMatchDate(partidoData.getDia())); partido.setLugar(partidoData.getLugar()); partido.setGrupo(getGrupo(partidoData.getGrupo())); - partido.setFecha(partido.getFecha()); + partido.setFecha(partidoData.getFecha()); partido.setFase(getFase(partidoData.getFase())); return partido; diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java index 8aec847..081ba4d 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/FileBasedStartupStep.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; import io.semantic.openscore.core.model.Storable; import io.semantic.openscore.core.repository.Repository; @@ -27,7 +27,7 @@ public abstract class FileBasedStartupStep implements Sta public FileBasedStartupStep(Class type, Repository existsService, TypeReference> typeReference) { this.type = type; this.typeReference = typeReference; - this.objectMapper = new ObjectMapper(new YAMLFactory()); + this.objectMapper = new YAMLMapper(); this.existService = existsService; } diff --git a/packages/openscore-nextjs/components/MatchCard.tsx b/packages/openscore-nextjs/components/MatchCard.tsx index 33170b8..2fc5abe 100644 --- a/packages/openscore-nextjs/components/MatchCard.tsx +++ b/packages/openscore-nextjs/components/MatchCard.tsx @@ -75,18 +75,32 @@ const StatusIndicator = ({ children }: PropsWithChildren) => (
                ); +const PhaseIndicator = ({ partido }: { partido: Partido }) => { + if (partido.fase.codigo === "GROUP") { + return ( +
                + {partido.fase.nombre} Phase {partido.fecha} of 3 -{" "} + {new Date(partido.dia).toLocaleString()} +
                + ); + } else { + return ( +
                + {partido.fase.nombre} + {new Date(partido.dia).toLocaleString()} +
                + ); + } +}; + const MatchCard = ({ partido, onUpdate }: MatchCardProps) => { - console.log(new Date(partido.dia)); return (
                FIFA World Cup - Qatar 2022
                -
                - {partido.fase.nombre} Phase {partido.fecha} of 3 -{" "} - {new Date(partido.dia).toLocaleString()} -
                +
                From 2f56e24e8d19767fa4384d42185aac794d8f26c1 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Tue, 11 Oct 2022 17:42:32 -0300 Subject: [PATCH 16/28] Se agrega el admin de teams y matches --- .../startup/steps/CrearEquipos.java | 6 +- .../src/main/resources/data/partidos.yml | 18 ++--- .../components/layout/MainLayout.tsx | 13 ---- .../{ => molecules}/EmptyScreen.tsx | 0 .../{ => molecules}/LoadingScreen.tsx | 0 .../components/{ => molecules}/MatchCard.tsx | 18 ++--- .../components/{ => molecules}/Navbar.tsx | 4 +- .../components/{ => molecules}/soccer.svg | 0 .../components/templates/MainLayout.tsx | 15 ++++ .../openscore-nextjs/pages/admin/matches.tsx | 15 ---- .../pages/admin/matches/index.tsx | 14 ++++ .../pages/admin/teams/index.tsx | 59 +++++++++++++++ packages/openscore-nextjs/pages/dashboard.tsx | 2 +- .../openscore-nextjs/pages/forecast/index.tsx | 8 +- packages/openscore-nextjs/pages/index.tsx | 4 +- .../openscore-nextjs/pages/leaderboard.tsx | 2 +- packages/openscore-nextjs/pages/rules.tsx | 2 +- packages/openscore-nextjs/routes.ts | 5 +- packages/openscore-nextjs/services/Service.ts | 2 +- .../partidos-list.component.html | 73 ++++++++++++------- 20 files changed, 170 insertions(+), 90 deletions(-) delete mode 100644 packages/openscore-nextjs/components/layout/MainLayout.tsx rename packages/openscore-nextjs/components/{ => molecules}/EmptyScreen.tsx (100%) rename packages/openscore-nextjs/components/{ => molecules}/LoadingScreen.tsx (100%) rename packages/openscore-nextjs/components/{ => molecules}/MatchCard.tsx (88%) rename packages/openscore-nextjs/components/{ => molecules}/Navbar.tsx (96%) rename packages/openscore-nextjs/components/{ => molecules}/soccer.svg (100%) create mode 100644 packages/openscore-nextjs/components/templates/MainLayout.tsx delete mode 100644 packages/openscore-nextjs/pages/admin/matches.tsx create mode 100644 packages/openscore-nextjs/pages/admin/matches/index.tsx create mode 100644 packages/openscore-nextjs/pages/admin/teams/index.tsx diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java index f373df4..b5e3eac 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/startup/steps/CrearEquipos.java @@ -45,9 +45,9 @@ public void run() { this.crearEquipoSiNoExiste("AUS", "Australia"); this.crearEquipoSiNoExiste("DNK", "Denmark"); this.crearEquipoSiNoExiste("TUN", "Tunisia"); - this.crearEquipoSiNoExiste("SPA", "Spain"); + this.crearEquipoSiNoExiste("ESP", "Spain"); this.crearEquipoSiNoExiste("CRI", "Costa Rica"); - this.crearEquipoSiNoExiste("GER", "Germany"); + this.crearEquipoSiNoExiste("DEU", "Germany"); this.crearEquipoSiNoExiste("JPN", "Japan"); this.crearEquipoSiNoExiste("BEL", "Belgium"); this.crearEquipoSiNoExiste("CAN", "Canada"); @@ -57,7 +57,7 @@ public void run() { this.crearEquipoSiNoExiste("SRB", "Serbia"); this.crearEquipoSiNoExiste("CHE", "Switzerland"); this.crearEquipoSiNoExiste("CMR", "Cameroon"); - this.crearEquipoSiNoExiste("POR", "Portugal"); + this.crearEquipoSiNoExiste("PRT", "Portugal"); this.crearEquipoSiNoExiste("GHA", "Ghana"); this.crearEquipoSiNoExiste("URY", "Uruguay"); this.crearEquipoSiNoExiste("KOR", "South Korea"); diff --git a/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml b/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml index 7d52892..26e34d0 100644 --- a/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml +++ b/packages/openscore-core-quarkus/src/main/resources/data/partidos.yml @@ -64,14 +64,14 @@ - fecha: 1 dia: 23-11-2022T13:0+0300 lugar: Khalifa International Stadium - local: GER + local: DEU visitante: JPN grupo: GRUPO_E fase: GRUPO - fecha: 1 dia: 23-11-2022T16:0+0300 lugar: Al Thumama Stadium - local: SPA + local: ESP visitante: CRI grupo: GRUPO_E fase: GRUPO @@ -99,7 +99,7 @@ - fecha: 1 dia: 24-11-2022T16:0+0300 lugar: Stadium 974 - local: POR + local: PRT visitante: GHA grupo: GRUPO_H fase: GRUPO @@ -190,8 +190,8 @@ - fecha: 2 dia: 27-11-2022T19:0+0300 lugar: Al Bayt Stadium - local: SPA - visitante: GER + local: ESP + visitante: DEU grupo: GRUPO_E fase: GRUPO - fecha: 2 @@ -218,7 +218,7 @@ - fecha: 2 dia: 28-11-2022T19:0+0300 lugar: Lusail Stadium - local: POR + local: PRT visitante: URY grupo: GRUPO_H fase: GRUPO @@ -296,14 +296,14 @@ dia: 1-12-2022T19:0+0300 lugar: Khalifa International Stadium local: JPN - visitante: SPA + visitante: ESP grupo: GRUPO_E fase: GRUPO - fecha: 3 dia: 1-12-2022T19:0+0300 lugar: Al Bayt Stadium local: CRI - visitante: GER + visitante: DEU grupo: GRUPO_E fase: GRUPO - fecha: 3 @@ -317,7 +317,7 @@ dia: 2-12-2022T15:0+0300 lugar: Education City Stadium local: KOR - visitante: POR + visitante: PRT grupo: GRUPO_H fase: GRUPO - fecha: 3 diff --git a/packages/openscore-nextjs/components/layout/MainLayout.tsx b/packages/openscore-nextjs/components/layout/MainLayout.tsx deleted file mode 100644 index d904e09..0000000 --- a/packages/openscore-nextjs/components/layout/MainLayout.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { PropsWithChildren, ReactElement } from "react"; -import Navbar from "../Navbar"; - -const MainLayout = ({ children }: PropsWithChildren) => ( -
                - -
                {children}
                -
                -); - -export const layout = (page: ReactElement) => {page}; - -export default MainLayout; diff --git a/packages/openscore-nextjs/components/EmptyScreen.tsx b/packages/openscore-nextjs/components/molecules/EmptyScreen.tsx similarity index 100% rename from packages/openscore-nextjs/components/EmptyScreen.tsx rename to packages/openscore-nextjs/components/molecules/EmptyScreen.tsx diff --git a/packages/openscore-nextjs/components/LoadingScreen.tsx b/packages/openscore-nextjs/components/molecules/LoadingScreen.tsx similarity index 100% rename from packages/openscore-nextjs/components/LoadingScreen.tsx rename to packages/openscore-nextjs/components/molecules/LoadingScreen.tsx diff --git a/packages/openscore-nextjs/components/MatchCard.tsx b/packages/openscore-nextjs/components/molecules/MatchCard.tsx similarity index 88% rename from packages/openscore-nextjs/components/MatchCard.tsx rename to packages/openscore-nextjs/components/molecules/MatchCard.tsx index 2fc5abe..cf26c80 100644 --- a/packages/openscore-nextjs/components/MatchCard.tsx +++ b/packages/openscore-nextjs/components/molecules/MatchCard.tsx @@ -1,15 +1,15 @@ import { AxiosError, AxiosPromise } from "axios"; import { PropsWithChildren, useState } from "react"; import { toast } from "react-toastify"; -import { ApiResponse } from "../model/ApiResponse"; -import { Partido } from "../model/Partido"; -import { PronosticoService } from "../services/PronosticoService"; +import { ApiResponse } from "../../model/ApiResponse"; +import { Partido } from "../../model/Partido"; +import { PronosticoService } from "../../services/PronosticoService"; const pronosticoService = new PronosticoService(); const TeamFlag = ({ src }: { src: string }) => (
                - +
                ); @@ -76,18 +76,18 @@ const StatusIndicator = ({ children }: PropsWithChildren) => ( ); const PhaseIndicator = ({ partido }: { partido: Partido }) => { - if (partido.fase.codigo === "GROUP") { + if (partido.fase.codigo === "GRUPO") { return (
                - {partido.fase.nombre} Phase {partido.fecha} of 3 -{" "} - {new Date(partido.dia).toLocaleString()} + {` ${partido.fase.nombre} Phase ${partido.fecha} of 3 - ${new Date( + partido.dia + ).toLocaleString()}`}
                ); } else { return (
                - {partido.fase.nombre} - {new Date(partido.dia).toLocaleString()} + {`${partido.fase.nombre} ${new Date(partido.dia).toLocaleString()}`}
                ); } diff --git a/packages/openscore-nextjs/components/Navbar.tsx b/packages/openscore-nextjs/components/molecules/Navbar.tsx similarity index 96% rename from packages/openscore-nextjs/components/Navbar.tsx rename to packages/openscore-nextjs/components/molecules/Navbar.tsx index 2503359..7ad562a 100644 --- a/packages/openscore-nextjs/components/Navbar.tsx +++ b/packages/openscore-nextjs/components/molecules/Navbar.tsx @@ -1,8 +1,8 @@ import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/router"; -import routes, { Route } from "../routes"; -import logo from "../images/logo-white.png"; +import routes, { Route } from "../../routes"; +import logo from "../../images/logo-white.png"; const NavItem = ({ route }: { route: Route }) => { const router = useRouter(); diff --git a/packages/openscore-nextjs/components/soccer.svg b/packages/openscore-nextjs/components/molecules/soccer.svg similarity index 100% rename from packages/openscore-nextjs/components/soccer.svg rename to packages/openscore-nextjs/components/molecules/soccer.svg diff --git a/packages/openscore-nextjs/components/templates/MainLayout.tsx b/packages/openscore-nextjs/components/templates/MainLayout.tsx new file mode 100644 index 0000000..32d03cf --- /dev/null +++ b/packages/openscore-nextjs/components/templates/MainLayout.tsx @@ -0,0 +1,15 @@ +import { PropsWithChildren, ReactElement } from "react"; +import Navbar from "../molecules/Navbar"; + +const MainTemplate = ({ children }: PropsWithChildren) => ( +
                + +
                {children}
                +
                +); + +export const layout = (page: ReactElement) => ( + {page} +); + +export default MainTemplate; diff --git a/packages/openscore-nextjs/pages/admin/matches.tsx b/packages/openscore-nextjs/pages/admin/matches.tsx deleted file mode 100644 index 5ccd004..0000000 --- a/packages/openscore-nextjs/pages/admin/matches.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import type { NextPage } from "next"; -import { layout } from "../../components/layout/MainLayout"; -import { NextPageWithLayout } from "../_app"; - -const Matches: NextPageWithLayout = () => { - return ( -
                -

                Matches

                -
                - ); -}; - -Matches.getLayout = layout; - -export default Matches; diff --git a/packages/openscore-nextjs/pages/admin/matches/index.tsx b/packages/openscore-nextjs/pages/admin/matches/index.tsx new file mode 100644 index 0000000..6783f66 --- /dev/null +++ b/packages/openscore-nextjs/pages/admin/matches/index.tsx @@ -0,0 +1,14 @@ +import { layout } from "../../../components/templates/MainLayout"; +import { NextPageWithLayout } from "../../_app"; + +const Matches: NextPageWithLayout = () => { + return ( +
                +

                Matches

                +
                + ); +}; + +Matches.getLayout = layout; + +export default Matches; diff --git a/packages/openscore-nextjs/pages/admin/teams/index.tsx b/packages/openscore-nextjs/pages/admin/teams/index.tsx new file mode 100644 index 0000000..4cc56df --- /dev/null +++ b/packages/openscore-nextjs/pages/admin/teams/index.tsx @@ -0,0 +1,59 @@ +import { useEffect, useState } from "react"; +import { layout } from "../../../components/templates/MainLayout"; +import { Equipo } from "../../../model/Equipo"; +import { EquiposService } from "../../../services/EquiposService"; +import { NextPageWithLayout } from "../../_app"; + +const TeamFlag = ({ src }: { src: string }) => ( +
                + +
                +); + +const Teams: NextPageWithLayout = () => { + const service = new EquiposService(); + const [list, setList] = useState([]); + + useEffect(() => { + service.getAll(1, 10).then((res) => { + console.log(res.data.data); + setList(res.data.data); + }); + }, [setList]); + + return ( +
                +

                Teams

                +
                + + + + + + + + + + + + {list.map((elem) => ( + + + + + + + + ))} + +
                IDCodigoNombreLogoAcciones
                {elem.id}{elem.codigo}{elem.nombre} + +
                +
                +
                + ); +}; + +Teams.getLayout = layout; + +export default Teams; diff --git a/packages/openscore-nextjs/pages/dashboard.tsx b/packages/openscore-nextjs/pages/dashboard.tsx index 3de3012..a7e542a 100644 --- a/packages/openscore-nextjs/pages/dashboard.tsx +++ b/packages/openscore-nextjs/pages/dashboard.tsx @@ -1,4 +1,4 @@ -import { layout } from "../components/layout/MainLayout"; +import { layout } from "../components/templates/MainLayout"; import { NextPageWithLayout } from "./_app"; const Dashboard: NextPageWithLayout = () => { diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx index 1999c21..e45b217 100644 --- a/packages/openscore-nextjs/pages/forecast/index.tsx +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -2,10 +2,10 @@ import Link from "next/link"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; import { SetterOrUpdater, useRecoilValue, useSetRecoilState } from "recoil"; -import EmptyScreen from "../../components/EmptyScreen"; -import { layout } from "../../components/layout/MainLayout"; -import LoadingScreen from "../../components/LoadingScreen"; -import MatchCard from "../../components/MatchCard"; +import EmptyScreen from "../../components/molecules/EmptyScreen"; +import { layout } from "../../components/templates/MainLayout"; +import LoadingScreen from "../../components/molecules/LoadingScreen"; +import MatchCard from "../../components/molecules/MatchCard"; import { Partido } from "../../model/Partido"; import { PronosticoService } from "../../services/PronosticoService"; import { diff --git a/packages/openscore-nextjs/pages/index.tsx b/packages/openscore-nextjs/pages/index.tsx index 47a5420..ee2d82a 100644 --- a/packages/openscore-nextjs/pages/index.tsx +++ b/packages/openscore-nextjs/pages/index.tsx @@ -1,5 +1,5 @@ -import EmptyScreen from "../components/EmptyScreen"; -import { layout } from "../components/layout/MainLayout"; +import EmptyScreen from "../components/molecules/EmptyScreen"; +import { layout } from "../components/templates/MainLayout"; import { NextPageWithLayout } from "./_app"; const Home: NextPageWithLayout = () => { diff --git a/packages/openscore-nextjs/pages/leaderboard.tsx b/packages/openscore-nextjs/pages/leaderboard.tsx index bb02a32..d0404e4 100644 --- a/packages/openscore-nextjs/pages/leaderboard.tsx +++ b/packages/openscore-nextjs/pages/leaderboard.tsx @@ -1,5 +1,5 @@ import type { NextPage } from "next"; -import { layout } from "../components/layout/MainLayout"; +import { layout } from "../components/templates/MainLayout"; import { NextPageWithLayout } from "./_app"; const leaderboard = [ diff --git a/packages/openscore-nextjs/pages/rules.tsx b/packages/openscore-nextjs/pages/rules.tsx index 13d55aa..7703318 100644 --- a/packages/openscore-nextjs/pages/rules.tsx +++ b/packages/openscore-nextjs/pages/rules.tsx @@ -1,5 +1,5 @@ import type { NextPage } from "next"; -import { layout } from "../components/layout/MainLayout"; +import { layout } from "../components/templates/MainLayout"; import { NextPageWithLayout } from "./_app"; const Rules: NextPageWithLayout = () => { diff --git a/packages/openscore-nextjs/routes.ts b/packages/openscore-nextjs/routes.ts index 84bf0ef..f499e10 100644 --- a/packages/openscore-nextjs/routes.ts +++ b/packages/openscore-nextjs/routes.ts @@ -12,7 +12,10 @@ const routes: Route[] = [ { name: "Admin", link: "/admin", - items: [{ name: "Matches", link: "/admin/matches" }], + items: [ + { name: "Matches", link: "/admin/matches" }, + { name: "Teams", link: "/admin/teams" }, + ], }, ]; diff --git a/packages/openscore-nextjs/services/Service.ts b/packages/openscore-nextjs/services/Service.ts index 66c482c..121d23d 100644 --- a/packages/openscore-nextjs/services/Service.ts +++ b/packages/openscore-nextjs/services/Service.ts @@ -6,7 +6,7 @@ export default abstract class Service { public getAll(page: number, pageSize: number, parameters?: any) { return rest.get>(this.serviceUrl, { - params: parameters, + params: { page: page, pageSize: pageSize, ...parameters }, }); } diff --git a/packages/openscore-ui/src/app/views/admin/partidos/partidos-list/partidos-list.component.html b/packages/openscore-ui/src/app/views/admin/partidos/partidos-list/partidos-list.component.html index 1d0c0b9..cbad9e2 100644 --- a/packages/openscore-ui/src/app/views/admin/partidos/partidos-list/partidos-list.component.html +++ b/packages/openscore-ui/src/app/views/admin/partidos/partidos-list/partidos-list.component.html @@ -1,20 +1,25 @@
                -
                + Create a new match +
                -
                - Match list -
                +
                Match list
                - - +
                - No available matches found
                - + No available matches found + +
                @@ -31,53 +36,65 @@ + -
                ID
                - {{partido.id}} + {{ partido.id }} - {{partido.local.nombre}} + {{ partido.local.nombre }} - {{partido.visitante.nombre}} + {{ partido.visitante.nombre }} - {{partido.dia | date: 'dd/MM/yyyy HH:mm (O)'}} + {{ partido.dia | date: "dd/MM/yyyy HH:mm (O)" }} Fecha {{ partido.fecha }} - Fecha {{partido.fecha}} + {{ partido.lugar }} - {{partido.lugar}} + {{ partido.resultado && partido.resultado.local }} - + {{ partido.resultado && partido.resultado.visitante }} - {{partido.resultado && partido.resultado.local}} - {{partido.resultado && partido.resultado.visitante}} + {{ partido.status }} - {{partido.status}} - - - -
                - -
                From 8bc35a6e5518a157133924ea52e2709f6fe1dd9c Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Tue, 11 Oct 2022 23:37:56 -0300 Subject: [PATCH 17/28] Se agregan las dos primeras pantallas de Admin --- .../openscore/core/repository/Repository.java | 4 + .../core/services/api/EquiposService.java | 19 +++- .../core/services/api/PartidosService.java | 4 + .../core/services/api/StandardService.java | 12 +- .../services/impl/EquiposServiceImpl.java | 36 +++--- .../services/impl/PartidosServiceImpl.java | 5 + .../components/atoms/StatusIndicator.tsx | 13 +++ .../components/molecules/MatchCard.tsx | 11 +- .../components/molecules/Pagination.tsx | 35 ++++++ .../pages/admin/matches/index.tsx | 106 ++++++++++++++++++ .../pages/admin/teams/index.tsx | 92 ++++++++++----- packages/openscore-nextjs/services/Service.ts | 4 + 12 files changed, 279 insertions(+), 62 deletions(-) create mode 100644 packages/openscore-nextjs/components/atoms/StatusIndicator.tsx create mode 100644 packages/openscore-nextjs/components/molecules/Pagination.tsx diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java index 018cbee..289a0fa 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java @@ -138,6 +138,10 @@ public List findAll() { return this.findByQuery(query); } + public long count() { + return this.findAll().size(); + } + public List findAll(Map parameters, Map sort) { String queryString = this.buildQuery(parameters, sort); TypedQuery query = this.createQuery(queryString); diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java index 0970fb1..505abc2 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/EquiposService.java @@ -1,13 +1,18 @@ package io.semantic.openscore.core.services.api; +import java.util.List; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + import io.semantic.openscore.core.api.ApiResponse; import io.semantic.openscore.core.api.equipos.CrearEquipoDTO; import io.semantic.openscore.core.api.equipos.EquipoDTO; -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import java.util.List; - @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public interface EquiposService extends StandardService { @@ -15,5 +20,9 @@ public interface EquiposService extends StandardService> getAll(@QueryParam("page") int page, - @QueryParam("pageSize") int pageSize); + @QueryParam("pageSize") int pageSize); + + @Path("/count") + @GET + ApiResponse count(); } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java index f73cdc2..27512b4 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java @@ -35,6 +35,10 @@ ApiResponse> getAll(@QueryParam("page") int page, @Path("/{id}") ApiResponse get(@PathParam("id") long id); + @GET + @Path("/count") + ApiResponse count(); + @GET @Path("/fechas") ApiResponse> getFechas(); diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/StandardService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/StandardService.java index dbc9dc1..f265a23 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/StandardService.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/StandardService.java @@ -1,12 +1,15 @@ package io.semantic.openscore.core.services.api; -import io.semantic.openscore.core.api.ApiResponse; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; -import javax.ws.rs.*; +import io.semantic.openscore.core.api.ApiResponse; public interface StandardService { - @Path("/{id}") @GET ApiResponse get(@PathParam("id") long id); @@ -22,5 +25,6 @@ public interface StandardService { @Path("/{id}") @POST ApiResponse update(@PathParam("id") long id, - Z entity); + Z entity); + } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java index 8d2bff0..2300ae7 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/EquiposServiceImpl.java @@ -1,5 +1,15 @@ package io.semantic.openscore.core.services.impl; +import static io.semantic.openscore.core.services.RestUtil.ok; + +import java.text.MessageFormat; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import javax.inject.Inject; +import javax.ws.rs.Path; + import io.semantic.openscore.core.api.ApiResponse; import io.semantic.openscore.core.api.equipos.CrearEquipoDTO; import io.semantic.openscore.core.api.equipos.EquipoDTO; @@ -14,20 +24,9 @@ import io.semantic.openscore.core.services.api.EquiposService; import io.semantic.openscore.core.validation.ApplicationValidator; -import javax.inject.Inject; -import javax.ws.rs.Path; -import javax.ws.rs.core.UriInfo; -import java.text.MessageFormat; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import static io.semantic.openscore.core.services.RestUtil.ok; - @Path("equipos") public class EquiposServiceImpl implements EquiposService { - private PaisRepository paisRepository; private EquiposRepository equiposRepository; private ApplicationValidator validator; @@ -38,9 +37,9 @@ public EquiposServiceImpl() { @Inject public EquiposServiceImpl(EquiposRepository equiposRepository, - PaisRepository paisRepository, - ApplicationValidator validator, - EquipoMapper mapper) { + PaisRepository paisRepository, + ApplicationValidator validator, + EquipoMapper mapper) { this.equiposRepository = equiposRepository; this.paisRepository = paisRepository; this.validator = validator; @@ -60,8 +59,8 @@ public ApiResponse> getAll(int page, int pageSize) { @Override public ApiResponse get(long id) { Equipo equipo = this.equiposRepository - .findById(id).orElseThrow(() -> - new RuntimeException(MessageFormat.format("El equipo con el ID: {0} no fue encontrado", id))); + .findById(id).orElseThrow(() -> new RuntimeException( + MessageFormat.format("El equipo con el ID: {0} no fue encontrado", id))); return ok(map(equipo)); } @@ -103,4 +102,9 @@ public ApiResponse update(long id, CrearEquipoDTO entity) { private EquipoDTO map(Equipo equipo) { return this.mapper.asApi(equipo); } + + @Override + public ApiResponse count() { + return ok(this.equiposRepository.count()); + } } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java index 5cc3d5a..bc961c0 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java @@ -148,4 +148,9 @@ private Partido getPartido(long partidoId) { .orElseThrow(() -> new IllegalArgumentException(MessageFormat .format("El partido <{0}> no fue encontrado", partidoId))); } + + @Override + public ApiResponse count() { + return ok(this.partidoRepository.count()); + } } diff --git a/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx b/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx new file mode 100644 index 0000000..77d8185 --- /dev/null +++ b/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx @@ -0,0 +1,13 @@ +import { PropsWithChildren } from "react"; + +const StatusIndicator = ({ children }: PropsWithChildren) => ( +
                + {children} +
                +); + +export default StatusIndicator; diff --git a/packages/openscore-nextjs/components/molecules/MatchCard.tsx b/packages/openscore-nextjs/components/molecules/MatchCard.tsx index cf26c80..ede8d79 100644 --- a/packages/openscore-nextjs/components/molecules/MatchCard.tsx +++ b/packages/openscore-nextjs/components/molecules/MatchCard.tsx @@ -4,6 +4,7 @@ import { toast } from "react-toastify"; import { ApiResponse } from "../../model/ApiResponse"; import { Partido } from "../../model/Partido"; import { PronosticoService } from "../../services/PronosticoService"; +import StatusIndicator from "../atoms/StatusIndicator"; const pronosticoService = new PronosticoService(); @@ -65,16 +66,6 @@ const ActiveNavLink = ({ ); }; -const StatusIndicator = ({ children }: PropsWithChildren) => ( -
                - {children} -
                -); - const PhaseIndicator = ({ partido }: { partido: Partido }) => { if (partido.fase.codigo === "GRUPO") { return ( diff --git a/packages/openscore-nextjs/components/molecules/Pagination.tsx b/packages/openscore-nextjs/components/molecules/Pagination.tsx new file mode 100644 index 0000000..75f84cd --- /dev/null +++ b/packages/openscore-nextjs/components/molecules/Pagination.tsx @@ -0,0 +1,35 @@ +export interface PaginationProps { + page: number; + setPage: (p: number) => void; + pageSize: number; + count: number; +} + +const Pagination = ({ page, setPage, pageSize, count }: PaginationProps) => { + const pages = Math.ceil(count / pageSize); + return ( + + ); +}; + +export default Pagination; diff --git a/packages/openscore-nextjs/pages/admin/matches/index.tsx b/packages/openscore-nextjs/pages/admin/matches/index.tsx index 6783f66..ff36ffb 100644 --- a/packages/openscore-nextjs/pages/admin/matches/index.tsx +++ b/packages/openscore-nextjs/pages/admin/matches/index.tsx @@ -1,10 +1,116 @@ +import { useEffect, useState } from "react"; +import { SetterOrUpdater } from "recoil"; +import StatusIndicator from "../../../components/atoms/StatusIndicator"; +import EmptyScreen from "../../../components/molecules/EmptyScreen"; +import LoadingScreen from "../../../components/molecules/LoadingScreen"; +import Pagination from "../../../components/molecules/Pagination"; import { layout } from "../../../components/templates/MainLayout"; +import { Equipo } from "../../../model/Equipo"; +import { Partido } from "../../../model/Partido"; +import { EquiposService } from "../../../services/EquiposService"; +import { PartidosService } from "../../../services/PartidosService"; import { NextPageWithLayout } from "../../_app"; +const TeamFlag = ({ src }: { src: string }) => ( +
                + +
                +); + +const refresh = ( + service: PartidosService, + setList: SetterOrUpdater, + page: number, + pageSize: number, + setBusy: SetterOrUpdater +) => { + setBusy(true); + service.getAll(page, pageSize).then((res) => { + setList(res.data.data); + setBusy(false); + }); +}; + const Matches: NextPageWithLayout = () => { + const service = new PartidosService(); + const [list, setList] = useState([]); + const [count, setCount] = useState(0); + const [page, setPage] = useState(0); + const [busy, setBusy] = useState(false); + + useEffect(() => { + refresh(service, setList, page, 10, setBusy); + + service.count().then((res) => { + setCount(res.data.data); + }); + }, [setList, setCount, page]); + return (

                Matches

                + + + + + + + + + + + + + + + + + + + {list.map((elem) => ( + + + + + + + + + + + + + ))} + + + + + + +
                IDLocalVisitorDateFaseFechaLocationResultStatusActions
                {elem.id} + {elem.local.nombre}{" "} + + + {elem.visitante.nombre}{" "} + + {new Date(elem.dia).toUTCString()}{elem.fase.nombre}{elem.fecha}{elem.lugar} + {`${elem.resultado?.local || "-"} : ${ + elem.resultado?.visitante || "-" + }`} + + {elem.status} +
                + { + setPage(p); + }} + pageSize={10} + count={count} + > +
                +
                +
                ); }; diff --git a/packages/openscore-nextjs/pages/admin/teams/index.tsx b/packages/openscore-nextjs/pages/admin/teams/index.tsx index 4cc56df..2625190 100644 --- a/packages/openscore-nextjs/pages/admin/teams/index.tsx +++ b/packages/openscore-nextjs/pages/admin/teams/index.tsx @@ -1,4 +1,8 @@ import { useEffect, useState } from "react"; +import { SetterOrUpdater } from "recoil"; +import EmptyScreen from "../../../components/molecules/EmptyScreen"; +import LoadingScreen from "../../../components/molecules/LoadingScreen"; +import Pagination from "../../../components/molecules/Pagination"; import { layout } from "../../../components/templates/MainLayout"; import { Equipo } from "../../../model/Equipo"; import { EquiposService } from "../../../services/EquiposService"; @@ -10,46 +14,80 @@ const TeamFlag = ({ src }: { src: string }) => (
                ); +const refresh = ( + service: EquiposService, + setList: SetterOrUpdater, + page: number, + pageSize: number, + setBusy: SetterOrUpdater +) => { + setBusy(true); + service.getAll(page, pageSize).then((res) => { + setList(res.data.data); + setBusy(false); + }); +}; + const Teams: NextPageWithLayout = () => { const service = new EquiposService(); const [list, setList] = useState([]); + const [count, setCount] = useState(0); + const [page, setPage] = useState(0); + const [busy, setBusy] = useState(false); useEffect(() => { - service.getAll(1, 10).then((res) => { - console.log(res.data.data); - setList(res.data.data); + refresh(service, setList, page, 10, setBusy); + + service.count().then((res) => { + setCount(res.data.data); }); - }, [setList]); + }, [setList, setCount, page]); return (

                Teams

                -
                - - - - - - - - - - - - {list.map((elem) => ( - - - - + + +
                IDCodigoNombreLogoAcciones
                {elem.id}{elem.codigo}{elem.nombre}
                + + + + + + + + + + + {list.map((elem) => ( + + + + + + + + ))} + + + - - ))} - -
                IDCodigoNombreLogoAcciones
                {elem.id}{elem.codigo}{elem.nombre} + +
                - + { + setPage(p); + }} + pageSize={10} + count={count} + >
                -
                + + + +
                ); }; diff --git a/packages/openscore-nextjs/services/Service.ts b/packages/openscore-nextjs/services/Service.ts index 121d23d..c87ae06 100644 --- a/packages/openscore-nextjs/services/Service.ts +++ b/packages/openscore-nextjs/services/Service.ts @@ -10,6 +10,10 @@ export default abstract class Service { }); } + public count() { + return rest.get>(`${this.serviceUrl}/count`); + } + public get(id: number) { return rest.get>(`${this.serviceUrl}/${id}`); } From ba9c4e52ada465296f70313781c1096334e6cbfd Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Tue, 11 Oct 2022 23:52:36 -0300 Subject: [PATCH 18/28] Se agregan paginados a los partidos --- .../semantic/openscore/core/services/api/PartidosService.java | 2 +- .../openscore/core/services/impl/PartidosServiceImpl.java | 4 ++-- packages/openscore-nextjs/pages/admin/matches/index.tsx | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java index 27512b4..906e810 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/api/PartidosService.java @@ -25,7 +25,7 @@ public interface PartidosService { @GET @Path("/") ApiResponse> getAll(@QueryParam("page") int page, - @QueryParam("size") int pageSize, + @QueryParam("pageSize") int pageSize, @QueryParam("grupo") String grupo, @QueryParam("fase") String fase, @QueryParam("fecha") long fecha, diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java index bc961c0..7f6d21a 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PartidosServiceImpl.java @@ -21,6 +21,7 @@ import io.semantic.openscore.core.repository.EquiposRepository; import io.semantic.openscore.core.repository.FaseRepository; import io.semantic.openscore.core.repository.GrupoRepository; +import io.semantic.openscore.core.repository.Page; import io.semantic.openscore.core.repository.PartidoRepository; import io.semantic.openscore.core.repository.startup.builder.DiaBuilder; import io.semantic.openscore.core.security.Secure; @@ -62,8 +63,7 @@ public ApiResponse> getAll(int page, long dia, String equipo) { - this.partidoRepository.findAll(); - List partidos = this.partidoRepository.findAll(); + List partidos = this.partidoRepository.findAll(new Page(page, pageSize)); return ok(this.partidoMapper.asApi(partidos)); } diff --git a/packages/openscore-nextjs/pages/admin/matches/index.tsx b/packages/openscore-nextjs/pages/admin/matches/index.tsx index ff36ffb..b49b573 100644 --- a/packages/openscore-nextjs/pages/admin/matches/index.tsx +++ b/packages/openscore-nextjs/pages/admin/matches/index.tsx @@ -5,9 +5,7 @@ import EmptyScreen from "../../../components/molecules/EmptyScreen"; import LoadingScreen from "../../../components/molecules/LoadingScreen"; import Pagination from "../../../components/molecules/Pagination"; import { layout } from "../../../components/templates/MainLayout"; -import { Equipo } from "../../../model/Equipo"; import { Partido } from "../../../model/Partido"; -import { EquiposService } from "../../../services/EquiposService"; import { PartidosService } from "../../../services/PartidosService"; import { NextPageWithLayout } from "../../_app"; From d5c806393bdd054b7d0ba02daf5f7f718038ec1b Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Wed, 12 Oct 2022 10:15:41 -0300 Subject: [PATCH 19/28] Se mejora la paginacion --- .../components/molecules/Pagination.tsx | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/openscore-nextjs/components/molecules/Pagination.tsx b/packages/openscore-nextjs/components/molecules/Pagination.tsx index 75f84cd..96dd505 100644 --- a/packages/openscore-nextjs/components/molecules/Pagination.tsx +++ b/packages/openscore-nextjs/components/molecules/Pagination.tsx @@ -10,20 +10,30 @@ const Pagination = ({ page, setPage, pageSize, count }: PaginationProps) => { return (
                +
                + +
                ); }; diff --git a/packages/openscore-nextjs/pages/rules.tsx b/packages/openscore-nextjs/pages/rules.tsx index 7703318..4bdd6a5 100644 --- a/packages/openscore-nextjs/pages/rules.tsx +++ b/packages/openscore-nextjs/pages/rules.tsx @@ -19,51 +19,74 @@ const Rules: NextPageWithLayout = () => { Mexico can participate, using the corporate e-mail address.
                -
                - 3. Participants may register any time during Copa América and - until the day before the final match. Points will be awarded only for - the matches for which predictions were entered, and, in consequence: 0 - (ZERO) points will be awarded for matches with no predictions entered. +
                +
                + 3. Participants may register any time during Copa América and + until the day before the final match. Points will be awarded only + for the matches for which predictions were entered, and, in + consequence: 0 (ZERO) points will be awarded for matches with no + predictions entered. +
                -
                - 4. Copa América consists of 28 matches, of which: 20 are - in the initial group stage, 4 in quarter-finals, 2 in semi-finals, 1 - for 3rd place and 1 final match. +
                +
                + 4. Copa América consists of 28 matches, of which: 20 + are in the initial group stage, 4 in quarter-finals, 2 in + semi-finals, 1 for 3rd place and 1 final match. +
                -
                - 5. Participants may enter predictions - until 15 minutes before the matches start. +
                +
                + 5. Participants may enter predictions + until 15 minutes before the matches start. +
                -
                - 6. For the predictions on quarter finals until the final match, - the 90 minutes of the match plus the additional time, if any, and - penalties will be taken into account. +
                +
                + 6. For the predictions on quarter finals until the final + match, the 90 minutes of the match plus the additional time, if any, + and penalties will be taken into account. +
                -
                - 7. Scoring for each match in the group stage will be of - 1 (ONE) point per correct prediction (Local, Tie, Visitor). +
                +
                + 7. Scoring for each match in the group stage will be of + 1 (ONE) point per correct prediction (Local, Tie, Visitor). +
                -
                - 8. Scoring for each match in quarter-finals will be - 2 (TWO) points per correct prediction (Local, Tie, Visitor). +
                +
                + 8. Scoring for each match in quarter-finals will be + 2 (TWO) points per correct prediction (Local, Tie, Visitor). +
                -
                - 9. Scoring for each match in semi-finals will be of - 3 (THREE) points per correct predicition (Local, Tie, Visitor). +
                +
                + 9. Scoring for each match in semi-finals will be of + 3 (THREE) points per correct predicition (Local, Tie, + Visitor). +
                -
                - 11. Scoring for the 3rd place match and the Final will be of - 4 (FOUR) points per correct prediction (Local, Tie, Visitor). +
                +
                + 11. Scoring for the 3rd place match and the Final will be of + 4 (FOUR) points per correct prediction (Local, Tie, Visitor). +
                -
                - 12. There will be three winners in each sub-region (the - top three): 3 (THREE) winners in Argentina/SolaEast, 3 (THREE) winners - in Brazil, 3 (THREE) winners in Chile, 3 (THREE) winners in Peru, 3 - (THREE) winners in Colombia/CEACA and 3 (THREE) winners in Mexico. +
                +
                + 12. There will be three winners in each sub-region{" "} + (the top three): 3 (THREE) winners in Argentina/SolaEast, 3 (THREE) + winners in Brazil, 3 (THREE) winners in Chile, 3 (THREE) winners in + Peru, 3 (THREE) winners in Colombia/CEACA and 3 (THREE) winners in + Mexico. +
                -
                - 13. In the case of a tie a random drawing will take - place to determine the winners. +
                +
                + 13. In the case of a tie a random drawing will take + place to determine the winners. +
                diff --git a/packages/openscore-nextjs/styles/components/_countdown.scss b/packages/openscore-nextjs/styles/components/_countdown.scss new file mode 100644 index 0000000..8384302 --- /dev/null +++ b/packages/openscore-nextjs/styles/components/_countdown.scss @@ -0,0 +1,15 @@ +.countdown { + display: flex; + flex-direction: row; + gap: 1rem; + &__item { + display: flex; + flex-direction: column; + font-weight: 600; + font-family: "Quicksand"; + + &--active { + color: $danger; + } + } +} diff --git a/packages/openscore-nextjs/styles/components/_match.scss b/packages/openscore-nextjs/styles/components/_match.scss index 46bfbe8..1a9d09e 100644 --- a/packages/openscore-nextjs/styles/components/_match.scss +++ b/packages/openscore-nextjs/styles/components/_match.scss @@ -53,4 +53,10 @@ transition: all 0.5s; } } + + .card-footer { + display: flex; + align-items: center; + justify-content: center; + } } diff --git a/packages/openscore-nextjs/styles/main.scss b/packages/openscore-nextjs/styles/main.scss index 13734fa..c4661eb 100644 --- a/packages/openscore-nextjs/styles/main.scss +++ b/packages/openscore-nextjs/styles/main.scss @@ -40,6 +40,7 @@ $theme-colors: ( @import "components/loading_screen"; @import "components/empty_screen"; @import "components/login"; +@import "components/countdown"; body { background-color: $gray-200; From 53c79e897fae4d3bae43496b87f4b620141f2743 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Wed, 12 Oct 2022 11:14:29 -0300 Subject: [PATCH 21/28] Se mejora el estilo de la tarjeta del partido --- packages/openscore-nextjs/components/molecules/MatchCard.tsx | 2 +- packages/openscore-nextjs/styles/components/_match.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/openscore-nextjs/components/molecules/MatchCard.tsx b/packages/openscore-nextjs/components/molecules/MatchCard.tsx index 334ba6d..68580cb 100644 --- a/packages/openscore-nextjs/components/molecules/MatchCard.tsx +++ b/packages/openscore-nextjs/components/molecules/MatchCard.tsx @@ -10,7 +10,7 @@ import StatusIndicator from "../atoms/StatusIndicator"; const pronosticoService = new PronosticoService(); const TeamFlag = ({ src }: { src: string }) => ( -
                +
                ); diff --git a/packages/openscore-nextjs/styles/components/_match.scss b/packages/openscore-nextjs/styles/components/_match.scss index 1a9d09e..a8fd01e 100644 --- a/packages/openscore-nextjs/styles/components/_match.scss +++ b/packages/openscore-nextjs/styles/components/_match.scss @@ -29,7 +29,7 @@ justify-content: center; & > img { - scale: 0.1; + scale: 0.25; } } From 074ded1938dde18b01ac69c9fc9ed0cdcd307727 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Wed, 12 Oct 2022 11:23:37 -0300 Subject: [PATCH 22/28] Se mejora la vista de la tarjeta --- .../components/molecules/MatchCard.tsx | 17 +++-------------- .../styles/components/_match.scss | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/packages/openscore-nextjs/components/molecules/MatchCard.tsx b/packages/openscore-nextjs/components/molecules/MatchCard.tsx index 68580cb..ae3a171 100644 --- a/packages/openscore-nextjs/components/molecules/MatchCard.tsx +++ b/packages/openscore-nextjs/components/molecules/MatchCard.tsx @@ -85,18 +85,6 @@ const PhaseIndicator = ({ partido }: { partido: Partido }) => { } }; -const getReturnValues = (countDown: number) => { - // calculate time left - const days = Math.floor(countDown / (1000 * 60 * 60 * 24)); - const hours = Math.floor( - (countDown % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60) - ); - const minutes = Math.floor((countDown % (1000 * 60 * 60)) / (1000 * 60)); - const seconds = Math.floor((countDown % (1000 * 60)) / 1000); - - return [days, hours, minutes, seconds]; -}; - const MatchCard = ({ partido, onUpdate }: MatchCardProps) => { return (
                {
                - {partido.resultado?.local || "-"} :{" "} - {partido.resultado?.visitante || "-"} + {`${partido.resultado?.local || "-"} : ${ + partido.resultado?.visitante || "-" + }`}
                {partido.local.nombre}
                diff --git a/packages/openscore-nextjs/styles/components/_match.scss b/packages/openscore-nextjs/styles/components/_match.scss index a8fd01e..ab82581 100644 --- a/packages/openscore-nextjs/styles/components/_match.scss +++ b/packages/openscore-nextjs/styles/components/_match.scss @@ -19,6 +19,12 @@ filter: grayscale(100%); } + &__score { + font-family: $display-font-family; + font-weight: 600; + font-size: 1.5rem; + } + &__flag { border-radius: 50%; overflow: hidden; @@ -33,6 +39,16 @@ } } + &__team { + font-family: $display-font-family; + margin-top: 0.5rem; + } + + &__status { + font-family: $display-font-family; + margin-top: 0.5rem; + } + &__selection { width: 80%; margin-left: auto; From 16f39ddf0490d16598bb78a0a5f9c3736b951572 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Wed, 12 Oct 2022 12:00:40 -0300 Subject: [PATCH 23/28] Se cambia un poco la tarjeta del partido --- .../components/molecules/MatchCard.tsx | 15 +++-- .../openscore-nextjs/pages/forecast/index.tsx | 60 ++++++++++++++++--- .../openscore-nextjs/states/ForecastState.ts | 39 +++++++++++- .../styles/components/_countdown.scss | 1 + .../styles/components/_match.scss | 3 +- 5 files changed, 101 insertions(+), 17 deletions(-) diff --git a/packages/openscore-nextjs/components/molecules/MatchCard.tsx b/packages/openscore-nextjs/components/molecules/MatchCard.tsx index ae3a171..00eb193 100644 --- a/packages/openscore-nextjs/components/molecules/MatchCard.tsx +++ b/packages/openscore-nextjs/components/molecules/MatchCard.tsx @@ -68,12 +68,13 @@ const ActiveNavLink = ({ }; const PhaseIndicator = ({ partido }: { partido: Partido }) => { + const dia = new Date(partido.dia); if (partido.fase.codigo === "GRUPO") { return ( -
                - {` ${partido.fase.nombre} Phase ${partido.fecha} of 3 - ${new Date( - partido.dia - ).toLocaleString()}`} +
                + {`Round Robin: ${partido.grupo.nombre} - ${ + partido.fecha + } of 3 - ${dia.toDateString()} ${dia.toLocaleTimeString()}`}
                ); } else { @@ -90,9 +91,11 @@ const MatchCard = ({ partido, onUpdate }: MatchCardProps) => {
                -
                -
                FIFA World Cup - Qatar 2022
                +
                +
                +
                + {/*
                FIFA World Cup - Qatar 2022
                */}
                diff --git a/packages/openscore-nextjs/pages/forecast/index.tsx b/packages/openscore-nextjs/pages/forecast/index.tsx index e45b217..cf9237b 100644 --- a/packages/openscore-nextjs/pages/forecast/index.tsx +++ b/packages/openscore-nextjs/pages/forecast/index.tsx @@ -9,6 +9,7 @@ import MatchCard from "../../components/molecules/MatchCard"; import { Partido } from "../../model/Partido"; import { PronosticoService } from "../../services/PronosticoService"; import { + filteredForecastState, ForecastFilter, forecastFilterState, forecastListState, @@ -16,16 +17,61 @@ import { import { NextPageWithLayout } from "../_app"; const filters = [ - { - name: "All", - link: "all", - filter: ForecastFilter.ALL, - }, { name: "Today", link: "today", filter: ForecastFilter.TODAY, }, + { + name: "Remaining", + link: "remaining", + filter: ForecastFilter.REMAINING, + }, + { + name: "Group A", + link: "group_a", + filter: ForecastFilter.GROUP_A, + }, + { + name: "Group B", + link: "group_b", + filter: ForecastFilter.GROUP_B, + }, + { + name: "Group C", + link: "group_c", + filter: ForecastFilter.GROUP_C, + }, + { + name: "Group D", + link: "group_d", + filter: ForecastFilter.GROUP_D, + }, + { + name: "Group E", + link: "group_e", + filter: ForecastFilter.GROUP_E, + }, + { + name: "Group F", + link: "group_f", + filter: ForecastFilter.GROUP_F, + }, + { + name: "Group G", + link: "group_g", + filter: ForecastFilter.GROUP_G, + }, + { + name: "Group H", + link: "group_h", + filter: ForecastFilter.GROUP_H, + }, + { + name: "All", + link: "all", + filter: ForecastFilter.ALL, + }, ]; const pronostico = new PronosticoService(); @@ -51,7 +97,7 @@ const getLink = (link: string) => `/forecast?filter=${link}`; const Forecasts: NextPageWithLayout = () => { const router = useRouter(); - const filteredForecast = useRecoilValue(forecastListState); + const filteredForecast = useRecoilValue(filteredForecastState); const setFilter = useSetRecoilState(forecastFilterState); const setForecast = useSetRecoilState(forecastListState); @@ -60,7 +106,7 @@ const Forecasts: NextPageWithLayout = () => { useEffect(() => { if (router.query["filter"] === undefined) { - router.push(`/forecast?filter=all`); + router.push(`/forecast?filter=today`); } setFilter(filter?.filter || ForecastFilter.ALL); refresh(setForecast, setBusy); diff --git a/packages/openscore-nextjs/states/ForecastState.ts b/packages/openscore-nextjs/states/ForecastState.ts index d690b05..e2dfcd0 100644 --- a/packages/openscore-nextjs/states/ForecastState.ts +++ b/packages/openscore-nextjs/states/ForecastState.ts @@ -4,6 +4,15 @@ import { Partido } from "../model/Partido"; export enum ForecastFilter { ALL, TODAY, + REMAINING, + GROUP_A, + GROUP_B, + GROUP_C, + GROUP_D, + GROUP_E, + GROUP_F, + GROUP_G, + GROUP_H, } export const forecastListState = atom({ @@ -22,14 +31,38 @@ export const filteredForecastState = selector({ const forecastList = get(forecastListState); const filter = get(forecastFilterState); - console.log(filter); switch (filter) { case ForecastFilter.TODAY: - forecastList.filter( + return forecastList.filter( (partido) => new Date(partido.dia).getDate() === new Date().getDate() ); + case ForecastFilter.REMAINING: + return forecastList.filter((partido) => { + return partido.pronostico === undefined; + }); + case ForecastFilter.GROUP_A: + return filterByGroup(forecastList, "A"); + case ForecastFilter.GROUP_B: + return filterByGroup(forecastList, "B"); + case ForecastFilter.GROUP_C: + return filterByGroup(forecastList, "C"); + case ForecastFilter.GROUP_D: + return filterByGroup(forecastList, "D"); + case ForecastFilter.GROUP_E: + return filterByGroup(forecastList, "E"); + case ForecastFilter.GROUP_F: + return filterByGroup(forecastList, "F"); + case ForecastFilter.GROUP_G: + return filterByGroup(forecastList, "G"); + case ForecastFilter.GROUP_H: + return filterByGroup(forecastList, "H"); default: - forecastList; + return forecastList; } }, }); + +const filterByGroup = (list: Partido[], grupo: string) => + list.filter( + (partido) => partido.grupo.nombre === `Group ${grupo.toUpperCase()}` + ); diff --git a/packages/openscore-nextjs/styles/components/_countdown.scss b/packages/openscore-nextjs/styles/components/_countdown.scss index 8384302..1c52702 100644 --- a/packages/openscore-nextjs/styles/components/_countdown.scss +++ b/packages/openscore-nextjs/styles/components/_countdown.scss @@ -2,6 +2,7 @@ display: flex; flex-direction: row; gap: 1rem; + font-size: 0.8rem; &__item { display: flex; flex-direction: column; diff --git a/packages/openscore-nextjs/styles/components/_match.scss b/packages/openscore-nextjs/styles/components/_match.scss index ab82581..f4aa600 100644 --- a/packages/openscore-nextjs/styles/components/_match.scss +++ b/packages/openscore-nextjs/styles/components/_match.scss @@ -70,7 +70,8 @@ } } - .card-footer { + .card-footer, + .card-header { display: flex; align-items: center; justify-content: center; From dccfeb359c07cb2a8aef6b9e001f7b5a886ca709 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Fri, 14 Oct 2022 10:28:18 -0300 Subject: [PATCH 24/28] Se mejoran los servicios de pronosticos y de resultados --- .../core/api/partidos/ResultadoDTO.java | 27 ++++ .../openscore/core/model/Resultado.java | 55 ++++++- .../openscore/core/repository/Repository.java | 4 +- .../services/impl/PronosticosServiceImpl.java | 88 +++++----- .../components/atoms/Result.tsx | 27 ++++ .../components/atoms/StatusIndicator.tsx | 21 ++- .../components/atoms/TeamFlag.tsx | 17 ++ .../components/molecules/MatchCard.tsx | 8 +- packages/openscore-nextjs/model/Resultado.ts | 7 +- .../pages/admin/matches/index.tsx | 17 +- .../pages/admin/matches/setresult.tsx | 151 ++++++++++++++++++ .../pages/admin/teams/index.tsx | 9 +- .../services/PartidosService.ts | 8 +- .../styles/components/_table.scss | 2 + packages/openscore-nextjs/styles/main.scss | 3 + .../styles/pages/_setresult.scss | 25 +++ 16 files changed, 389 insertions(+), 80 deletions(-) create mode 100644 packages/openscore-nextjs/components/atoms/Result.tsx create mode 100644 packages/openscore-nextjs/components/atoms/TeamFlag.tsx create mode 100644 packages/openscore-nextjs/pages/admin/matches/setresult.tsx create mode 100644 packages/openscore-nextjs/styles/components/_table.scss create mode 100644 packages/openscore-nextjs/styles/pages/_setresult.scss diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java index dd21c78..4f0954f 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java @@ -4,6 +4,9 @@ public class ResultadoDTO { private int local; private int visitante; + private boolean penales; + private int penalesLocal; + private int penalesVisitante; public int getLocal() { return local; @@ -20,4 +23,28 @@ public int getVisitante() { public void setVisitante(int visitante) { this.visitante = visitante; } + + public boolean isPenales() { + return penales; + } + + public void setPenales(boolean penales) { + this.penales = penales; + } + + public int getPenalesLocal() { + return penalesLocal; + } + + public void setPenalesLocal(int penalesLocal) { + this.penalesLocal = penalesLocal; + } + + public int getPenalesVisitante() { + return penalesVisitante; + } + + public void setPenalesVisitante(int penalesVisitante) { + this.penalesVisitante = penalesVisitante; + } } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java index 969091c..b3f90c1 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java @@ -2,7 +2,6 @@ import javax.persistence.Column; import javax.persistence.Embeddable; -import javax.persistence.Entity; import javax.persistence.OneToOne; @Embeddable @@ -14,6 +13,15 @@ public class Resultado { @Column(nullable = true) private int visitante; + @Column(nullable = true) + private boolean penales; + + @Column(nullable = true) + private int penalesLocal; + + @Column(nullable = true) + private int penalesVisitante; + @OneToOne private Partido partido; @@ -34,12 +42,23 @@ public void setVisitante(int visitante) { } public Ganador getGanador() { - if (local > visitante) { - return Ganador.LOCAL; - } else if (local < visitante) { - return Ganador.VISITANTE; + + if (penales) { + if (penalesLocal > penalesVisitante) { + return Ganador.LOCAL; + } else if (penalesLocal < penalesVisitante) { + return Ganador.VISITANTE; + } else { + return Ganador.EMPATE; + } } else { - return Ganador.EMPATE; + if (local > visitante) { + return Ganador.LOCAL; + } else if (local < visitante) { + return Ganador.VISITANTE; + } else { + return Ganador.EMPATE; + } } } @@ -50,4 +69,28 @@ public Partido getPartido() { public void setPartido(Partido partido) { this.partido = partido; } + + public int getPenalesLocal() { + return penalesLocal; + } + + public void setPenalesLocal(int penalesLocal) { + this.penalesLocal = penalesLocal; + } + + public int getPenalesVisitante() { + return penalesVisitante; + } + + public void setPenalesVisitante(int penalesVisitante) { + this.penalesVisitante = penalesVisitante; + } + + public boolean isPenales() { + return penales; + } + + public void setPenales(boolean penales) { + this.penales = penales; + } } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java index 289a0fa..e42c1ea 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/repository/Repository.java @@ -126,14 +126,14 @@ public void deleteById(long id) { } public List findAll(Page page) { - TypedQuery query = this.createQuery(MessageFormat.format("from {0}", + TypedQuery query = this.createQuery(MessageFormat.format("from {0} ORDER BY id ASC", this.persistentClass.getSimpleName())); return this.findByQuery(query, page); } public List findAll() { - TypedQuery query = this.createQuery(MessageFormat.format("from {0}", + TypedQuery query = this.createQuery(MessageFormat.format("from {0} ORDER BY id ASC", this.persistentClass.getSimpleName())); return this.findByQuery(query); } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java index 94ccfb3..a5a0a24 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/services/impl/PronosticosServiceImpl.java @@ -1,5 +1,17 @@ package io.semantic.openscore.core.services.impl; +import static io.semantic.openscore.core.services.RestUtil.ok; + +import java.text.MessageFormat; +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.semantic.openscore.core.api.ApiResponse; import io.semantic.openscore.core.api.pronosticos.CrearPronosticoDTO; import io.semantic.openscore.core.api.pronosticos.PartidoPronosticoDTO; @@ -16,20 +28,6 @@ import io.semantic.openscore.core.services.UserInfo; import io.semantic.openscore.core.services.api.PronosticosService; import io.semantic.openscore.core.validation.ApplicationValidator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; -import java.text.MessageFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.util.Date; -import java.util.List; - -import static io.semantic.openscore.core.services.RestUtil.ok; @ApplicationScoped public class PronosticosServiceImpl implements PronosticosService { @@ -49,12 +47,12 @@ public PronosticosServiceImpl() { @Inject public PronosticosServiceImpl(UserInfo userInfo, - PronosticoRepository pronosticoRepository, - PartidoRepository partidoRepository, - UsuarioRepository usuarioRepository, - ApplicationValidator validator, - PartidoMapper partidoMapper, - PronosticoMapper pronosticoMapper) { + PronosticoRepository pronosticoRepository, + PartidoRepository partidoRepository, + UsuarioRepository usuarioRepository, + ApplicationValidator validator, + PartidoMapper partidoMapper, + PronosticoMapper pronosticoMapper) { this.userInfo = userInfo; this.pronosticoRepository = pronosticoRepository; this.partidoRepository = partidoRepository; @@ -66,20 +64,27 @@ public PronosticosServiceImpl(UserInfo userInfo, @Override public ApiResponse> getAll(int page, - int pageSize, - String grupo, - String fase, - long dia, - int fecha) { + int pageSize, + String grupo, + String fase, + long dia, + int fecha) { List partidos = getPartidos(grupo, dia, fase, fecha); - List pronosticos = this.pronosticoRepository.findByUsuario(userInfo.getUserId()); - logger.info("Pronosticos encontrados para el usuario {}: {}", this.userInfo.getUsuario().get().getEmail(), pronosticos.size()); + List pronosticos = this.pronosticoRepository.findByUsuario(userInfo.getUserId()); + logger.info("Pronosticos encontrados para el usuario {}: {}", this.userInfo.getUsuario().get().getEmail(), + pronosticos.size()); List partidoDTOs = this.pronosticoMapper.asApiPronostico(partidos); + for (PartidoPronosticoDTO partido : partidoDTOs) { + if (partido.getResultado() != null) { + logger.info("The Object {}", partido.getResultado().isPenales()); + } + } + partidoDTOs.forEach(partidoPronosticoDTO -> { pronosticos.forEach(pronostico -> { if (partidoPronosticoDTO.getId() == pronostico.getPartido().getId()) { @@ -88,7 +93,6 @@ public ApiResponse> getAll(int page, }); }); - return ok(partidoDTOs); } @@ -99,7 +103,7 @@ private List getPartidos(String grupo, long dia, String fase, int fecha return this.partidoRepository.findAllByFase(fase); } else if (fecha > 0) { return this.partidoRepository.findAllByFecha(fecha); - } else if ( dia > 0) { + } else if (dia > 0) { return this.partidoRepository.findAllByDia(dia); } else { return this.partidoRepository.findAll(); @@ -127,7 +131,7 @@ public ApiResponse add(CrearPronosticoDTO entity) { @Override public ApiResponse update(long id, - CrearPronosticoDTO entity) { + CrearPronosticoDTO entity) { long idUsuario = this.userInfo.getUserId(); validator.validate(entity); @@ -146,7 +150,7 @@ private Usuario getUsuario(long idUsuario) { } private Pronostico getPronostico(long id, - long idUsuario) { + long idUsuario) { return this.pronosticoRepository .findById(id, idUsuario) @@ -211,18 +215,18 @@ public ApiResponse visitante(long idPartido) { } private Pronostico getPronosticoOrCreatePronostico(long idPartido, - long idUsuario) { + long idUsuario) { return this.pronosticoRepository.findByPartidoAndUsuario(idPartido, idUsuario).orElseGet(() -> { - Pronostico pronostico = new Pronostico(); - Partido partido = getPartido(idPartido); - pronostico.setPartido(partido); - Usuario usuario = getUsuario(idUsuario); - usuario.addPronostico(pronostico); - - this.pronosticoRepository.save(pronostico); - this.usuarioRepository.save(usuario); - return pronostico; - }); + Pronostico pronostico = new Pronostico(); + Partido partido = getPartido(idPartido); + pronostico.setPartido(partido); + Usuario usuario = getUsuario(idUsuario); + usuario.addPronostico(pronostico); + + this.pronosticoRepository.save(pronostico); + this.usuarioRepository.save(usuario); + return pronostico; + }); } } diff --git a/packages/openscore-nextjs/components/atoms/Result.tsx b/packages/openscore-nextjs/components/atoms/Result.tsx new file mode 100644 index 0000000..b74c7d1 --- /dev/null +++ b/packages/openscore-nextjs/components/atoms/Result.tsx @@ -0,0 +1,27 @@ +import { Partido } from "../../model/Partido"; + +const Result = ({ + partido, + className, +}: { + partido: Partido; + className?: string; +}) => { + return ( +
                {`${ + partido.resultado?.local == undefined ? "-" : partido.resultado.local + }${ + partido.resultado?.penales ? `(${partido.resultado.penalesLocal})` : "" + } : ${ + partido.resultado?.visitante == undefined + ? "-" + : partido.resultado.visitante + }${ + partido.resultado?.penales + ? `(${partido.resultado.penalesVisitante})` + : "" + }`}
                + ); +}; + +export default Result; diff --git a/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx b/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx index 77d8185..93c312d 100644 --- a/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx +++ b/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx @@ -1,11 +1,20 @@ -import { PropsWithChildren } from "react"; +import { PropsWithChildren, ReactNode } from "react"; + +const getCss = (status: ReactNode) => { + switch (status) { + case "BLOCKER": + return "text-bg-primary"; + case "FINISHED": + return "text-bg-success"; + case "PENDING": + return "text-bg-warning"; + default: + return "text-bg-primary"; + } +}; const StatusIndicator = ({ children }: PropsWithChildren) => ( -
                +
                {children}
                ); diff --git a/packages/openscore-nextjs/components/atoms/TeamFlag.tsx b/packages/openscore-nextjs/components/atoms/TeamFlag.tsx new file mode 100644 index 0000000..dcfa645 --- /dev/null +++ b/packages/openscore-nextjs/components/atoms/TeamFlag.tsx @@ -0,0 +1,17 @@ +const TeamFlag = ({ src }: { src: string | undefined }) => { + if (src) { + return ( +
                + +
                + ); + } else { + return ( +
                +
                NF
                +
                + ); + } +}; + +export default TeamFlag; diff --git a/packages/openscore-nextjs/components/molecules/MatchCard.tsx b/packages/openscore-nextjs/components/molecules/MatchCard.tsx index 00eb193..9109326 100644 --- a/packages/openscore-nextjs/components/molecules/MatchCard.tsx +++ b/packages/openscore-nextjs/components/molecules/MatchCard.tsx @@ -5,6 +5,7 @@ import { ApiResponse } from "../../model/ApiResponse"; import { Partido } from "../../model/Partido"; import { PronosticoService } from "../../services/PronosticoService"; import Countdown from "../atoms/Countdown"; +import Result from "../atoms/Result"; import StatusIndicator from "../atoms/StatusIndicator"; const pronosticoService = new PronosticoService(); @@ -87,6 +88,7 @@ const PhaseIndicator = ({ partido }: { partido: Partido }) => { }; const MatchCard = ({ partido, onUpdate }: MatchCardProps) => { + console.log(partido.resultado); return (
                { {/*
                FIFA World Cup - Qatar 2022
                */}
                -
                - {`${partido.resultado?.local || "-"} : ${ - partido.resultado?.visitante || "-" - }`} -
                +
                {partido.local.nombre}
                {partido.status} diff --git a/packages/openscore-nextjs/model/Resultado.ts b/packages/openscore-nextjs/model/Resultado.ts index 5ab5632..81ec3ec 100644 --- a/packages/openscore-nextjs/model/Resultado.ts +++ b/packages/openscore-nextjs/model/Resultado.ts @@ -1,4 +1,7 @@ export interface Resultado { - local: number; - visitante: number; + local?: number; + visitante?: number; + penales?: boolean; + penalesLocal?: number; + penalesVisitante?: number; } diff --git a/packages/openscore-nextjs/pages/admin/matches/index.tsx b/packages/openscore-nextjs/pages/admin/matches/index.tsx index b49b573..bcf88fc 100644 --- a/packages/openscore-nextjs/pages/admin/matches/index.tsx +++ b/packages/openscore-nextjs/pages/admin/matches/index.tsx @@ -1,5 +1,7 @@ +import Link from "next/link"; import { useEffect, useState } from "react"; import { SetterOrUpdater } from "recoil"; +import Result from "../../../components/atoms/Result"; import StatusIndicator from "../../../components/atoms/StatusIndicator"; import EmptyScreen from "../../../components/molecules/EmptyScreen"; import LoadingScreen from "../../../components/molecules/LoadingScreen"; @@ -81,20 +83,25 @@ const Matches: NextPageWithLayout = () => { {elem.fecha} {elem.lugar} - {`${elem.resultado?.local || "-"} : ${ - elem.resultado?.visitante || "-" - }`} + {elem.status} - + + + Set Result + + ))} - + { diff --git a/packages/openscore-nextjs/pages/admin/matches/setresult.tsx b/packages/openscore-nextjs/pages/admin/matches/setresult.tsx new file mode 100644 index 0000000..8e75122 --- /dev/null +++ b/packages/openscore-nextjs/pages/admin/matches/setresult.tsx @@ -0,0 +1,151 @@ +import { useEffect, useState } from "react"; +import { SetterOrUpdater } from "recoil"; +import TeamFlag from "../../../components/atoms/TeamFlag"; +import EmptyScreen from "../../../components/molecules/EmptyScreen"; +import LoadingScreen from "../../../components/molecules/LoadingScreen"; +import { layout } from "../../../components/templates/MainLayout"; +import { Partido } from "../../../model/Partido"; +import { Resultado } from "../../../model/Resultado"; +import { PartidosService } from "../../../services/PartidosService"; +import { NextPageWithLayout } from "../../_app"; + +import { Field, Form, Formik } from "formik"; +import StatusIndicator from "../../../components/atoms/StatusIndicator"; +import { useRouter } from "next/router"; + +const refresh = ( + service: PartidosService, + setItem: SetterOrUpdater, + id: number, + setBusy: SetterOrUpdater, + setEmpty: SetterOrUpdater +) => { + setBusy(true); + service.get(id).then((res) => { + console.log(res.data.data); + setItem(res.data.data); + setEmpty(res.data.data === undefined); + setBusy(false); + }); +}; + +interface FormValues { + finalizado: boolean; + resultado: Resultado; +} + +interface PenalesProps { + item: Resultado | undefined; + id: string; +} + +const Penales = ({ item, id }: PenalesProps) => { + if (item?.penales) { + return ( +
                + ( + ) +
                + ); + } else { + return <>; + } +}; + +const SetResult: NextPageWithLayout = () => { + var initialValues: Resultado = { + local: undefined, + visitante: undefined, + penales: false, + penalesLocal: undefined, + penalesVisitante: undefined, + }; + + const id: number = 1; + const router = useRouter(); + const service = new PartidosService(); + const [item, setItem] = useState(); + const [isEmpty, setEmpty] = useState(false); + const [busy, setBusy] = useState(false); + + useEffect(() => { + refresh(service, setItem, id, setBusy, setEmpty); + }, [setItem, setEmpty]); + + return ( +
                +

                Set Result

                + + + { + service + .resultado(id, values) + .then((res) => router.push("/admin/matches")); + actions.setSubmitting(false); + }} + > + {(values) => ( +
                + {item?.status} +
                + + +
                +
                +
                + + +
                +
                + + + : + + +
                +
                + + +
                +
                + +
                + + +
                +
                + )} +
                +
                +
                +
                + ); +}; + +SetResult.getLayout = layout; + +export default SetResult; diff --git a/packages/openscore-nextjs/pages/admin/teams/index.tsx b/packages/openscore-nextjs/pages/admin/teams/index.tsx index 2625190..fe8be40 100644 --- a/packages/openscore-nextjs/pages/admin/teams/index.tsx +++ b/packages/openscore-nextjs/pages/admin/teams/index.tsx @@ -1,5 +1,6 @@ import { useEffect, useState } from "react"; import { SetterOrUpdater } from "recoil"; +import TeamFlag from "../../../components/atoms/TeamFlag"; import EmptyScreen from "../../../components/molecules/EmptyScreen"; import LoadingScreen from "../../../components/molecules/LoadingScreen"; import Pagination from "../../../components/molecules/Pagination"; @@ -8,12 +9,6 @@ import { Equipo } from "../../../model/Equipo"; import { EquiposService } from "../../../services/EquiposService"; import { NextPageWithLayout } from "../../_app"; -const TeamFlag = ({ src }: { src: string }) => ( -
                - -
                -); - const refresh = ( service: EquiposService, setList: SetterOrUpdater, @@ -73,7 +68,7 @@ const Teams: NextPageWithLayout = () => { - + { diff --git a/packages/openscore-nextjs/services/PartidosService.ts b/packages/openscore-nextjs/services/PartidosService.ts index 1a9faa0..f8d557d 100644 --- a/packages/openscore-nextjs/services/PartidosService.ts +++ b/packages/openscore-nextjs/services/PartidosService.ts @@ -1,6 +1,7 @@ import { ApiResponse } from "../model/ApiResponse"; import { CrearPartido } from "../model/CrearPartido"; import { Partido } from "../model/Partido"; +import { Resultado } from "../model/Resultado"; import rest from "./Rest"; import Service from "./Service"; @@ -17,13 +18,10 @@ export class PartidosService extends Service< return rest.get>(`${this.serviceUrl}/fechas`); } - resultado(partidoId: number, local: number, visitante: number) { + resultado(partidoId: number, resultado: Resultado) { return rest.post>( `${this.serviceUrl}/${partidoId}/resultado`, - { - local: local, - visitante: visitante, - } + resultado ); } } diff --git a/packages/openscore-nextjs/styles/components/_table.scss b/packages/openscore-nextjs/styles/components/_table.scss new file mode 100644 index 0000000..b5c93fd --- /dev/null +++ b/packages/openscore-nextjs/styles/components/_table.scss @@ -0,0 +1,2 @@ +table { +} diff --git a/packages/openscore-nextjs/styles/main.scss b/packages/openscore-nextjs/styles/main.scss index c4661eb..a7e4bc8 100644 --- a/packages/openscore-nextjs/styles/main.scss +++ b/packages/openscore-nextjs/styles/main.scss @@ -41,6 +41,9 @@ $theme-colors: ( @import "components/empty_screen"; @import "components/login"; @import "components/countdown"; +@import "components/table"; + +@import "pages/setresult"; body { background-color: $gray-200; diff --git a/packages/openscore-nextjs/styles/pages/_setresult.scss b/packages/openscore-nextjs/styles/pages/_setresult.scss new file mode 100644 index 0000000..ce8b478 --- /dev/null +++ b/packages/openscore-nextjs/styles/pages/_setresult.scss @@ -0,0 +1,25 @@ +.setresult { + .result { + &__container { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + gap: 2rem; + } + &__team { + display: flex; + flex-direction: column; + } + &__score { + font-family: $display-font-family; + font-size: 2rem; + display: flex; + flex-direction: row; + } + &__penales { + display: flex; + flex-direction: row; + } + } +} From 89ac6cced320452ba2948b4150e42683d9a13a68 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Fri, 14 Oct 2022 11:24:28 -0300 Subject: [PATCH 25/28] Se agregan los estados de colores a los partidos --- .../components/molecules/MatchCard.tsx | 60 ++++++++++++++++++- packages/openscore-nextjs/model/Ganador.ts | 8 +++ .../admin/matches/{setresult.tsx => [id].tsx} | 4 +- .../pages/admin/matches/index.tsx | 2 +- .../styles/components/_match.scss | 21 ++++++- 5 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 packages/openscore-nextjs/model/Ganador.ts rename packages/openscore-nextjs/pages/admin/matches/{setresult.tsx => [id].tsx} (99%) diff --git a/packages/openscore-nextjs/components/molecules/MatchCard.tsx b/packages/openscore-nextjs/components/molecules/MatchCard.tsx index 9109326..0b4dc28 100644 --- a/packages/openscore-nextjs/components/molecules/MatchCard.tsx +++ b/packages/openscore-nextjs/components/molecules/MatchCard.tsx @@ -2,6 +2,7 @@ import { AxiosError, AxiosPromise } from "axios"; import { PropsWithChildren, useState } from "react"; import { toast } from "react-toastify"; import { ApiResponse } from "../../model/ApiResponse"; +import Ganador from "../../model/Ganador"; import { Partido } from "../../model/Partido"; import { PronosticoService } from "../../services/PronosticoService"; import Countdown from "../atoms/Countdown"; @@ -87,11 +88,68 @@ const PhaseIndicator = ({ partido }: { partido: Partido }) => { } }; +const getMatchResult = (partido: Partido) => { + var resultado = Ganador.NONE; + + if (partido.resultado) { + const { penales, penalesLocal, penalesVisitante, local, visitante } = + partido.resultado; + if (local !== undefined && visitante !== undefined) { + if ( + penales && + penalesLocal !== undefined && + penalesVisitante !== undefined + ) { + if (penalesLocal > penalesVisitante) { + resultado = Ganador.LOCAL; + } else if (penalesLocal < penalesVisitante) { + resultado = Ganador.VISITANTE; + } else { + resultado = Ganador.EMPATE; + } + } else { + if (local > visitante) { + resultado = Ganador.LOCAL; + } else if (local < visitante) { + resultado = Ganador.VISITANTE; + } else { + resultado = Ganador.EMPATE; + } + } + } + } + + return resultado; +}; + +const getMatchResultCss = (partido: Partido) => { + const result = getMatchResult(partido); + + if (partido.status === "FINISHED") { + switch (result) { + case Ganador.NONE: + return "not_finished"; + case Ganador.EMPATE: + return partido.pronostico?.empate ? "hit" : "not_hit"; + case Ganador.LOCAL: + return partido.pronostico?.local ? "hit" : "not_hit"; + case Ganador.VISITANTE: + return partido.pronostico?.visitante ? "hit" : "not_hit"; + default: + return "not_hit"; + } + } else { + return "not_finished"; + } +}; + const MatchCard = ({ partido, onUpdate }: MatchCardProps) => { console.log(partido.resultado); return (
                diff --git a/packages/openscore-nextjs/model/Ganador.ts b/packages/openscore-nextjs/model/Ganador.ts new file mode 100644 index 0000000..8bc3c75 --- /dev/null +++ b/packages/openscore-nextjs/model/Ganador.ts @@ -0,0 +1,8 @@ +enum Ganador { + LOCAL, + EMPATE, + VISITANTE, + NONE, +} + +export default Ganador; diff --git a/packages/openscore-nextjs/pages/admin/matches/setresult.tsx b/packages/openscore-nextjs/pages/admin/matches/[id].tsx similarity index 99% rename from packages/openscore-nextjs/pages/admin/matches/setresult.tsx rename to packages/openscore-nextjs/pages/admin/matches/[id].tsx index 8e75122..541376d 100644 --- a/packages/openscore-nextjs/pages/admin/matches/setresult.tsx +++ b/packages/openscore-nextjs/pages/admin/matches/[id].tsx @@ -10,8 +10,8 @@ import { PartidosService } from "../../../services/PartidosService"; import { NextPageWithLayout } from "../../_app"; import { Field, Form, Formik } from "formik"; -import StatusIndicator from "../../../components/atoms/StatusIndicator"; import { useRouter } from "next/router"; +import StatusIndicator from "../../../components/atoms/StatusIndicator"; const refresh = ( service: PartidosService, @@ -61,8 +61,8 @@ const SetResult: NextPageWithLayout = () => { penalesVisitante: undefined, }; - const id: number = 1; const router = useRouter(); + const { id } = router.query; const service = new PartidosService(); const [item, setItem] = useState(); const [isEmpty, setEmpty] = useState(false); diff --git a/packages/openscore-nextjs/pages/admin/matches/index.tsx b/packages/openscore-nextjs/pages/admin/matches/index.tsx index bcf88fc..c72407a 100644 --- a/packages/openscore-nextjs/pages/admin/matches/index.tsx +++ b/packages/openscore-nextjs/pages/admin/matches/index.tsx @@ -91,7 +91,7 @@ const Matches: NextPageWithLayout = () => { Set Result diff --git a/packages/openscore-nextjs/styles/components/_match.scss b/packages/openscore-nextjs/styles/components/_match.scss index f4aa600..5e3927d 100644 --- a/packages/openscore-nextjs/styles/components/_match.scss +++ b/packages/openscore-nextjs/styles/components/_match.scss @@ -10,12 +10,14 @@ margin-bottom: 1rem; } - &--blocked { + &--blocked, + &--finished { pointer-events: none; background-color: $gray-200; } - &--blocked &__flag { + &--blocked &__flag, + &--finished &__flag { filter: grayscale(100%); } @@ -57,6 +59,21 @@ grid-template-columns: 1fr 1fr 1fr; } + &__result--not_finished { + } + + &__result--hit { + border-color: $success !important; + border-style: solid; + border-width: 2px; + } + + &__result--not_hit { + border-color: $danger !important; + border-style: solid; + border-width: 2px; + } + .nav-link { cursor: pointer; &:hover { From 70ef3787445775692058f732033a247da83a9451 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Fri, 14 Oct 2022 20:17:55 -0300 Subject: [PATCH 26/28] Se agergan el equema de colores para identificar los ganadores y perdedores --- .../components/molecules/MatchCard.tsx | 31 +++++++++++++++++-- .../pages/admin/matches/[id].tsx | 18 ++++++----- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/packages/openscore-nextjs/components/molecules/MatchCard.tsx b/packages/openscore-nextjs/components/molecules/MatchCard.tsx index 0b4dc28..5e368b6 100644 --- a/packages/openscore-nextjs/components/molecules/MatchCard.tsx +++ b/packages/openscore-nextjs/components/molecules/MatchCard.tsx @@ -143,6 +143,33 @@ const getMatchResultCss = (partido: Partido) => { } }; +const Footer = ({ partido }: { partido: Partido }) => { + switch (getMatchResultCss(partido)) { + case "hit": + return ( +
                Well done!!!
                + ); + case "not_hit": + return ( +
                + Better luck next time! +
                + ); + default: + return ( +
                + +
                + ); + } + + return ( +
                + +
                + ); +}; + const MatchCard = ({ partido, onUpdate }: MatchCardProps) => { console.log(partido.resultado); return ( @@ -191,9 +218,7 @@ const MatchCard = ({ partido, onUpdate }: MatchCardProps) => {
                -
                - -
                +
                ); }; diff --git a/packages/openscore-nextjs/pages/admin/matches/[id].tsx b/packages/openscore-nextjs/pages/admin/matches/[id].tsx index 541376d..308bc24 100644 --- a/packages/openscore-nextjs/pages/admin/matches/[id].tsx +++ b/packages/openscore-nextjs/pages/admin/matches/[id].tsx @@ -16,17 +16,19 @@ import StatusIndicator from "../../../components/atoms/StatusIndicator"; const refresh = ( service: PartidosService, setItem: SetterOrUpdater, - id: number, + id: number | undefined, setBusy: SetterOrUpdater, setEmpty: SetterOrUpdater ) => { - setBusy(true); - service.get(id).then((res) => { - console.log(res.data.data); - setItem(res.data.data); - setEmpty(res.data.data === undefined); - setBusy(false); - }); + if (id !== undefined) { + setBusy(true); + service.get(id).then((res) => { + console.log(res.data.data); + setItem(res.data.data); + setEmpty(res.data.data === undefined); + setBusy(false); + }); + } }; interface FormValues { From f33bd4f97d5541a41defeffc72141f2e8675f4a9 Mon Sep 17 00:00:00 2001 From: Adriel Paredes Date: Fri, 14 Oct 2022 22:07:50 -0300 Subject: [PATCH 27/28] Se acomoda el resultado con los penales incluidos --- .../core/api/partidos/PartidoDTO.java | 2 -- .../core/api/partidos/ResultadoDTO.java | 24 +++++++++---------- .../openscore/core/model/Resultado.java | 24 +++++++++---------- .../components/atoms/StatusIndicator.tsx | 2 +- 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java index 75c26fe..40c8104 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/PartidoDTO.java @@ -4,8 +4,6 @@ import io.semantic.openscore.core.api.grupos.FaseDTO; import io.semantic.openscore.core.api.grupos.GrupoDTO; -import java.util.Date; - public class PartidoDTO { private long id; diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java index 4f0954f..a86118e 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/api/partidos/ResultadoDTO.java @@ -2,25 +2,25 @@ public class ResultadoDTO { - private int local; - private int visitante; + private Integer local; + private Integer visitante; private boolean penales; - private int penalesLocal; - private int penalesVisitante; + private Integer penalesLocal; + private Integer penalesVisitante; - public int getLocal() { + public Integer getLocal() { return local; } - public void setLocal(int local) { + public void setLocal(Integer local) { this.local = local; } - public int getVisitante() { + public Integer getVisitante() { return visitante; } - public void setVisitante(int visitante) { + public void setVisitante(Integer visitante) { this.visitante = visitante; } @@ -32,19 +32,19 @@ public void setPenales(boolean penales) { this.penales = penales; } - public int getPenalesLocal() { + public Integer getPenalesLocal() { return penalesLocal; } - public void setPenalesLocal(int penalesLocal) { + public void setPenalesLocal(Integer penalesLocal) { this.penalesLocal = penalesLocal; } - public int getPenalesVisitante() { + public Integer getPenalesVisitante() { return penalesVisitante; } - public void setPenalesVisitante(int penalesVisitante) { + public void setPenalesVisitante(Integer penalesVisitante) { this.penalesVisitante = penalesVisitante; } } diff --git a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java index b3f90c1..8ea0843 100644 --- a/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java +++ b/packages/openscore-core-quarkus/src/main/java/io/semantic/openscore/core/model/Resultado.java @@ -8,36 +8,36 @@ public class Resultado { @Column(nullable = true) - private int local; + private Integer local; @Column(nullable = true) - private int visitante; + private Integer visitante; @Column(nullable = true) private boolean penales; @Column(nullable = true) - private int penalesLocal; + private Integer penalesLocal; @Column(nullable = true) - private int penalesVisitante; + private Integer penalesVisitante; @OneToOne private Partido partido; - public int getLocal() { + public Integer getLocal() { return local; } - public void setLocal(int local) { + public void setLocal(Integer local) { this.local = local; } - public int getVisitante() { + public Integer getVisitante() { return visitante; } - public void setVisitante(int visitante) { + public void setVisitante(Integer visitante) { this.visitante = visitante; } @@ -70,19 +70,19 @@ public void setPartido(Partido partido) { this.partido = partido; } - public int getPenalesLocal() { + public Integer getPenalesLocal() { return penalesLocal; } - public void setPenalesLocal(int penalesLocal) { + public void setPenalesLocal(Integer penalesLocal) { this.penalesLocal = penalesLocal; } - public int getPenalesVisitante() { + public Integer getPenalesVisitante() { return penalesVisitante; } - public void setPenalesVisitante(int penalesVisitante) { + public void setPenalesVisitante(Integer penalesVisitante) { this.penalesVisitante = penalesVisitante; } diff --git a/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx b/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx index 93c312d..bfa4a9d 100644 --- a/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx +++ b/packages/openscore-nextjs/components/atoms/StatusIndicator.tsx @@ -5,7 +5,7 @@ const getCss = (status: ReactNode) => { case "BLOCKER": return "text-bg-primary"; case "FINISHED": - return "text-bg-success"; + return "text-bg-info"; case "PENDING": return "text-bg-warning"; default: From 95bb389ca5cc477c80e1e160123f6c2101b10961 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 07:11:38 +0000 Subject: [PATCH 28/28] Bump jackson-databind in /packages/openscore-core-quarkus Bumps [jackson-databind](https://github.com/FasterXML/jackson) from 2.13.3 to 2.13.4.1. - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) --- updated-dependencies: - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- packages/openscore-core-quarkus/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/openscore-core-quarkus/pom.xml b/packages/openscore-core-quarkus/pom.xml index ece819d..b676879 100644 --- a/packages/openscore-core-quarkus/pom.xml +++ b/packages/openscore-core-quarkus/pom.xml @@ -141,7 +141,7 @@ com.fasterxml.jackson.core jackson-databind - 2.13.3 + 2.13.4.1 junit