diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000000000000000000000000000000000000..9f663b5d4243a465a38b5ebcb6efabd29d48684f --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,26 @@ +version: 2.1 # use CircleCI 2.1 +orbs: + browser-tools: circleci/browser-tools@1.2.4 +jobs: # a collection of steps + build: # runs not using Workflows must have a `build` job as entry point + + working_directory: ~/faidare # directory where steps will run + + docker: # run the steps with Docker + - image: cimg/openjdk:11.0-browsers # ...with this image as the primary container; this is where all `steps` will run + - image: docker.elastic.co/elasticsearch/elasticsearch:7.13.2 + name: elasticsearch + environment: + transport.host: localhost + network.host: elasticsearch + http.port: 9200 + cluster.name: es-cluster + discovery.type: single-node + xpack.security.enabled: false + ES_JAVA_OPTS: -Xms750m -Xmx750m + + steps: # a collection of executable commands + - browser-tools/install-chrome + # check out source code to working directory + - checkout + - run: ./gradlew check build diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index f7c5237f03012eb05b1f612036e0d46b3bf7767f..a672bf5d30183e9d99c6a3d73d193677002ff6c8 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -10,11 +10,11 @@ buildscript { plugins { java jacoco - id("org.springframework.boot") version "2.5.4" - id("com.gorylenko.gradle-git-properties") version "2.3.1" + id("org.springframework.boot") version "2.6.4" + id("com.gorylenko.gradle-git-properties") version "2.4.0" id("io.spring.dependency-management") version "1.0.11.RELEASE" id("org.sonarqube") - id("org.owasp.dependencycheck") version "6.0.3" + id("org.owasp.dependencycheck") version "7.0.0" } java { @@ -91,7 +91,7 @@ tasks { } } -extra["springCloudVersion"] = "2020.0.3" +extra["springCloudVersion"] = "2021.0.1" dependencyManagement { imports { mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}") @@ -110,19 +110,17 @@ dependencies { implementation("org.springframework.boot:spring-boot-starter-thymeleaf") // Elasticsearch - implementation("org.elasticsearch:elasticsearch:7.13.2") - implementation("org.elasticsearch.client:elasticsearch-rest-high-level-client:7.13.2") + implementation("org.elasticsearch:elasticsearch") + implementation("org.elasticsearch.client:elasticsearch-rest-high-level-client") // Swagger - implementation("io.swagger:swagger-annotations:1.5.21") - implementation("io.springfox:springfox-swagger2:2.9.2") - implementation("io.springfox:springfox-swagger-ui:2.9.2") + implementation("org.springdoc:springdoc-openapi-ui:1.6.6") // Others - implementation("com.google.guava:guava:27.0.1-jre") - implementation("com.opencsv:opencsv:4.4") + implementation("com.google.guava:guava:31.1-jre") + implementation("com.opencsv:opencsv:5.6") // Test dependencies testImplementation("org.springframework.boot:spring-boot-starter-test") - testImplementation("org.jsoup:jsoup:1.14.2") + testImplementation("org.jsoup:jsoup:1.14.3") } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/CallsController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/CallsController.java index b2bc193af41580435493cc50f6d36cd4fe0be74d..3ab6049edda81056a456a667cbd5f99039f82ff9 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/CallsController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/CallsController.java @@ -1,31 +1,34 @@ package fr.inra.urgi.faidare.api.brapi.v1; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableSet; import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiCall; import fr.inra.urgi.faidare.domain.brapi.v1.response.BrapiListResponse; import fr.inra.urgi.faidare.domain.criteria.base.PaginationCriteriaImpl; import fr.inra.urgi.faidare.domain.data.CallVO; import fr.inra.urgi.faidare.domain.response.ApiResponseFactory; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springdoc.webmvc.api.OpenApiWebMvcResource; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; -import springfox.documentation.service.ApiDescription; -import springfox.documentation.service.Documentation; -import springfox.documentation.spring.web.DocumentationCache; -import springfox.documentation.spring.web.plugins.Docket; - -import javax.validation.Valid; -import java.util.Comparator; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; /** * @author gcornut */ -@Api(tags = {"Breeding API"}, description = "BrAPI endpoint") +@Tag(name = "Breeding API", description = "BrAPI endpoint") @RestController public class CallsController { private static final String BRAPI_PATH = "/brapi/v1/"; @@ -39,28 +42,28 @@ public class CallsController { "1.1", "1.2" ); + private final OpenApiWebMvcResource openApiResource; + private final ObjectMapper objectMapper; - private List<BrapiCall> implementedCalls; + private AtomicReference<List<BrapiCall>> implementedCalls = new AtomicReference<>(null); - private final DocumentationCache documentationCache; - - @Autowired - public CallsController(DocumentationCache documentationCache) { - this.documentationCache = documentationCache; + public CallsController(OpenApiWebMvcResource openApiResource, ObjectMapper objectMapper) { + this.openApiResource = openApiResource; + this.objectMapper = objectMapper; } /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Calls/Calls.md */ - @ApiOperation("List implemented Breeding API calls") + @Operation(summary = "List implemented Breeding API calls") @GetMapping("/brapi/v1/calls") - public BrapiListResponse<BrapiCall> calls(@Valid PaginationCriteriaImpl criteria) { - if (implementedCalls == null) { - implementedCalls = swaggerToBrapiCalls(); + public BrapiListResponse<BrapiCall> calls(@Valid PaginationCriteriaImpl criteria, HttpServletRequest request) throws JsonProcessingException { + if (implementedCalls.get() == null) { + implementedCalls.set(swaggerToBrapiCalls(request)); } return ApiResponseFactory.createSubListResponse( - criteria.getPageSize(), criteria.getPage(), implementedCalls + criteria.getPageSize(), criteria.getPage(), implementedCalls.get() ); } @@ -70,39 +73,25 @@ public class CallsController { * This must be done after swagger has time to generate the API * documentation and thus can't be done in this class constructor */ - private List<BrapiCall> swaggerToBrapiCalls() { - Documentation apiDocumentation = this.documentationCache.documentationByGroup(Docket.DEFAULT_GROUP_NAME); - - // Get all endpoints - return apiDocumentation.getApiListings().values().stream() - .flatMap(endpointListing -> endpointListing.getApis().stream()) - // Only with BrAPI path - .filter(endpointDescription -> endpointDescription.getPath().startsWith(BRAPI_PATH)) - // Group by endpoint path (ex: /brapi/v1/phenotype => [GET, POST, ...]) - .collect(Collectors.groupingBy(ApiDescription::getPath)) - .entrySet().stream() - // Convert to BrAPI call - .map(endpointGroup -> { - String path = endpointGroup.getKey(); - List<ApiDescription> endpoints = endpointGroup.getValue(); - - // BrAPI call path should not include the base BrAPI path + @SuppressWarnings("unchecked") + private List<BrapiCall> swaggerToBrapiCalls(HttpServletRequest request) throws JsonProcessingException { + String json = openApiResource.openapiJson(request, "/v3/api-docs", Locale.ENGLISH); + + Map<String, Object> map = objectMapper.readValue(json, + new TypeReference<Map<String, Object>>() {}); + + Map<String, Object> pathMap = (Map<String, Object>) map.get("paths"); + return pathMap.entrySet().stream() + .filter(entry -> entry.getKey().startsWith(BRAPI_PATH)) + .map(entry -> { + String path = entry.getKey(); + Map<String, Object> methodMap = (Map<String, Object>) entry.getValue(); + Set<String> methods = methodMap.keySet().stream().map(String::toUpperCase).collect(Collectors.toSet()); CallVO call = new CallVO(path.replace(BRAPI_PATH, "")); - - // List every endpoint for current path - Set<String> methods = endpoints.stream() - // List all operations for each endpoint - .flatMap(endpointDescription -> endpointDescription.getOperations().stream()) - // List all methods - .map(operation -> operation.getMethod().toString()) - .collect(Collectors.toSet()); call.setMethods(methods); - return call; }) - // Sort by call name .sorted(Comparator.comparing(CallVO::getCall)) .collect(Collectors.toList()); } - } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java index 2ea27ac7c0c900626eb9d72ec8bf6054d5ac112e..922258cce393b3ed7a118c8bd4370585fb07e68e 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java @@ -1,5 +1,10 @@ package fr.inra.urgi.faidare.api.brapi.v1; +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +import java.util.List; +import javax.validation.Valid; + import fr.inra.urgi.faidare.api.NotFoundException; import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasm; import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmAttributeValueList; @@ -18,19 +23,19 @@ import fr.inra.urgi.faidare.domain.response.PaginatedList; import fr.inra.urgi.faidare.domain.response.Pagination; import fr.inra.urgi.faidare.repository.es.GermplasmAttributeRepository; import fr.inra.urgi.faidare.service.es.GermplasmService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; - -@Api(tags = {"Breeding API"}, description = "BrAPI endpoint") +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "Breeding API", description = "BrAPI endpoint") @RestController public class GermplasmController { @@ -48,7 +53,7 @@ public class GermplasmController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Germplasm/GermplasmDetailsByGermplasmDbId.md */ - @ApiOperation("Get germplasm by id") + @Operation(summary = "Get germplasm by id") @GetMapping("/brapi/v1/germplasm/{germplasmDbId}") public BrapiResponse<BrapiGermplasm> getGermplasm(@PathVariable String germplasmDbId) { LOGGER.debug("germplasmDbId = " + germplasmDbId); @@ -59,7 +64,7 @@ public class GermplasmController { return ApiResponseFactory.createSingleObjectResponse(germplasm, null); } - @ApiOperation("List germplasm") + @Operation(summary = "List germplasm") @GetMapping("/brapi/v1/germplasm") public BrapiListResponse<? extends BrapiGermplasm> listGermplasm( @Valid PaginationCriteriaImpl paginationCriteria @@ -73,7 +78,7 @@ public class GermplasmController { /** * @link https://brapi.docs.apiary.io/#reference/germplasm/germplasm/get-germplasm-mcpd-by-germplasmdbid */ - @ApiOperation("Get germplasm mcpd by id") + @Operation(summary = "Get germplasm mcpd by id") @GetMapping("/brapi/v1/germplasm/{germplasmDbId}/mcpd") public BrapiResponse<GermplasmMcpdVO> getGermplasmMcpd(@PathVariable String germplasmDbId) { LOGGER.debug("germplasmDbId = " + germplasmDbId); @@ -88,7 +93,7 @@ public class GermplasmController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Germplasm/GermplasmSearchGET.md */ - @ApiOperation("Search germplasm") + @Operation(summary = "Search germplasm") @GetMapping(value = "/brapi/v1/germplasm-search") public BrapiListResponse<? extends BrapiGermplasm> searchGermplasm( @Valid GermplasmGETSearchCriteria criteria @@ -99,7 +104,7 @@ public class GermplasmController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Germplasm/GermplasmSearchPOST.md */ - @ApiOperation("Search germplasm") + @Operation(summary = "Search germplasm") @PostMapping(value = "/brapi/v1/germplasm-search", consumes = APPLICATION_JSON_VALUE) public BrapiListResponse<? extends BrapiGermplasm> searchGermplasm( @Valid @RequestBody(required = false) GermplasmPOSTSearchCriteria criteria @@ -116,7 +121,7 @@ public class GermplasmController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/GermplasmAttributes/GermplasmAttributeValuesByGermplasmDbId.md */ - @ApiOperation("List germplasm attributes") + @Operation(summary = "List germplasm attributes") @GetMapping("/brapi/v1/germplasm/{germplasmDbId}/attributes") public BrapiResponse<BrapiGermplasmAttributeValueList> listGermplasmAttributes( @PathVariable String germplasmDbId, @@ -139,7 +144,7 @@ public class GermplasmController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/GermplasmAttributes/GermplasmAttributeValuesByGermplasmDbId.md */ - @ApiOperation("Get germplasm pedigree") + @Operation(summary = "Get germplasm pedigree") @GetMapping("/brapi/v1/germplasm/{germplasmDbId}/pedigree") public BrapiResponse<BrapiPedigree> getPedigree( @PathVariable String germplasmDbId @@ -151,7 +156,7 @@ public class GermplasmController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Germplasm/Germplasm_GermplasmDbId_Progeny_GET.yaml */ - @ApiOperation("Get germplasm progeny") + @Operation(summary = "Get germplasm progeny") @GetMapping("/brapi/v1/germplasm/{germplasmDbId}/progeny") public BrapiResponse<BrapiProgeny> getProgeny( @PathVariable String germplasmDbId diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/LocationController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/LocationController.java index 2cfec94ad00c7dac6a23f8f22bd161739b56a856..87850e3d7447e5d6b4003f87caf6b9ac0c6ec9f6 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/LocationController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/LocationController.java @@ -1,5 +1,7 @@ package fr.inra.urgi.faidare.api.brapi.v1; +import javax.validation.Valid; + import fr.inra.urgi.faidare.api.NotFoundException; import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiLocation; import fr.inra.urgi.faidare.domain.brapi.v1.response.BrapiListResponse; @@ -8,19 +10,17 @@ import fr.inra.urgi.faidare.domain.criteria.LocationCriteria; import fr.inra.urgi.faidare.domain.response.ApiResponseFactory; import fr.inra.urgi.faidare.domain.response.PaginatedList; import fr.inra.urgi.faidare.repository.es.LocationRepository; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; -import javax.validation.Valid; - /** * @author gcornut */ -@Api(tags = {"Breeding API"}, description = "BrAPI endpoint") +@Tag(name = "Breeding API", description = "BrAPI endpoint") @RestController public class LocationController { @@ -34,7 +34,7 @@ public class LocationController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Locations/LocationDetails.md */ - @ApiOperation("Get location") + @Operation(summary = "Get location") @GetMapping("/brapi/v1/locations/{locationDbId}") public BrapiResponse<BrapiLocation> getLocation(@PathVariable String locationDbId) { BrapiLocation location = repository.getById(locationDbId); @@ -47,7 +47,7 @@ public class LocationController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Locations/ListLocations.md */ - @ApiOperation("List locations") + @Operation(summary = "List locations") @GetMapping("/brapi/v1/locations") public BrapiListResponse<? extends BrapiLocation> listLocations( @Valid LocationCriteria criteria diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/ObservationVariableController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/ObservationVariableController.java index e19b3f8e112e148b1ef33506590e6cd2f1cff221..b2fc03486e8b4c6d58f5cb90a99b130e267505c8 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/ObservationVariableController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/ObservationVariableController.java @@ -1,5 +1,8 @@ package fr.inra.urgi.faidare.api.brapi.v1; +import java.util.List; +import javax.validation.Valid; + import fr.inra.urgi.faidare.api.NotFoundException; import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiObservationVariable; import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiOntology; @@ -9,22 +12,19 @@ import fr.inra.urgi.faidare.domain.criteria.ObservationVariableCriteria; import fr.inra.urgi.faidare.domain.criteria.base.PaginationCriteriaImpl; import fr.inra.urgi.faidare.domain.response.ApiResponseFactory; import fr.inra.urgi.faidare.repository.file.CropOntologyRepository; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; -import javax.validation.Valid; -import java.util.List; - /** * @author gcornut */ -@Api(tags = {"Breeding API"}, description = "BrAPI endpoint") +@Tag(name = "Breeding API", description = "BrAPI endpoint") @RestController public class ObservationVariableController { @@ -38,7 +38,7 @@ public class ObservationVariableController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/ObservationVariables/VariableDetails.md */ - @ApiOperation("Get variable") + @Operation(summary = "Get variable") @GetMapping("/brapi/v1/variables/{observationVariableDbId}") public BrapiResponse<BrapiObservationVariable> getVariable(@PathVariable String observationVariableDbId) { BrapiObservationVariable variable = repository.getVariableById(observationVariableDbId); @@ -51,10 +51,10 @@ public class ObservationVariableController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/ObservationVariables/VariableOntologyList.md */ - @ApiOperation("List ontologies") + @Operation(summary = "List ontologies") @GetMapping("/brapi/v1/ontologies") public BrapiListResponse<? extends BrapiOntology> listOntologies( - @Valid @ApiParam PaginationCriteriaImpl criteria + @Valid @Parameter PaginationCriteriaImpl criteria ) { List<? extends BrapiOntology> ontologies = repository.getOntologies(); @@ -67,10 +67,10 @@ public class ObservationVariableController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/ObservationVariables/VariableList.md */ - @ApiOperation("List variables") + @Operation(summary = "List variables") @GetMapping("/brapi/v1/variables") public BrapiListResponse<? extends BrapiObservationVariable> listVariables( - @Valid @ApiParam ObservationVariableCriteria criteria + @Valid @Parameter ObservationVariableCriteria criteria ) { // Get variables by trait class or get all variables List<? extends BrapiObservationVariable> variables; diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/PhenotypeController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/PhenotypeController.java index 3aab607c9ed04fa95d046462bcc75a52dee191f1..f74e27bbed832f007229a257237e2074b0896123 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/PhenotypeController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/PhenotypeController.java @@ -1,26 +1,26 @@ package fr.inra.urgi.faidare.api.brapi.v1; +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +import javax.validation.Valid; + import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiObservationUnit; import fr.inra.urgi.faidare.domain.brapi.v1.response.BrapiListResponse; import fr.inra.urgi.faidare.domain.criteria.ObservationUnitCriteria; import fr.inra.urgi.faidare.domain.response.ApiResponseFactory; import fr.inra.urgi.faidare.domain.response.PaginatedList; import fr.inra.urgi.faidare.repository.es.ObservationUnitRepository; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import javax.validation.Valid; - -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; - /** * @author gcornut */ -@Api(tags = {"Breeding API"}, description = "BrAPI endpoint") +@Tag(name = "Breeding API", description = "BrAPI endpoint") @RestController public class PhenotypeController { @@ -34,7 +34,7 @@ public class PhenotypeController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Phenotypes/PhenotypeSearch.md */ - @ApiOperation("Search phenotypes") + @Operation(summary = "Search phenotypes") @PostMapping(value = "/brapi/v1/phenotypes-search", consumes = APPLICATION_JSON_VALUE) public BrapiListResponse<? extends BrapiObservationUnit> searchPhenotypes(@Valid @RequestBody(required = false) ObservationUnitCriteria criteria) { PaginatedList<? extends BrapiObservationUnit> result = repository.find(criteria); diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/ProgramController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/ProgramController.java index 8a892c8b057aad664d0c446adfab8cbbb550d4e9..89c1e49db7ade1e1fe3c05d1815b9d244e69ab4c 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/ProgramController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/ProgramController.java @@ -1,5 +1,9 @@ package fr.inra.urgi.faidare.api.brapi.v1; +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +import javax.validation.Valid; + import fr.inra.urgi.faidare.api.NotFoundException; import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiProgram; import fr.inra.urgi.faidare.domain.brapi.v1.response.BrapiListResponse; @@ -9,20 +13,20 @@ import fr.inra.urgi.faidare.domain.data.ProgramVO; import fr.inra.urgi.faidare.domain.response.ApiResponseFactory; import fr.inra.urgi.faidare.domain.response.PaginatedList; import fr.inra.urgi.faidare.repository.es.ProgramRepository; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; /** * @author gcornut */ -@Api(tags = {"Breeding API"}, description = "BrAPI endpoint") +@Tag(name = "Breeding API", description = "BrAPI endpoint") @RestController public class ProgramController { @@ -36,7 +40,7 @@ public class ProgramController { /** * Not officially present in BrAPI */ - @ApiOperation("Get program") + @Operation(summary = "Get program") @GetMapping("/brapi/v1/programs/{programDbId}") public BrapiResponse<BrapiProgram> getProgram(@PathVariable String programDbId) { ProgramVO program = repository.getById(programDbId); @@ -49,9 +53,9 @@ public class ProgramController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Programs/ListPrograms.md */ - @ApiOperation("List programs") + @Operation(summary = "List programs") @GetMapping("/brapi/v1/programs") - public BrapiListResponse<? extends BrapiProgram> listPrograms(@Valid @ApiParam ProgramCriteria criteria) { + public BrapiListResponse<? extends BrapiProgram> listPrograms(@Valid @Parameter ProgramCriteria criteria) { PaginatedList<ProgramVO> result = repository.find(criteria); return ApiResponseFactory.createListResponse(result.getPagination(), null, result); } @@ -59,7 +63,7 @@ public class ProgramController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Programs/ProgramSearch.md */ - @ApiOperation("Search programs") + @Operation(summary = "Search programs") @PostMapping(value = "/brapi/v1/programs-search", consumes = APPLICATION_JSON_VALUE) public BrapiListResponse<? extends BrapiProgram> searchPrograms(@Valid @RequestBody(required = false) ProgramCriteria criteria) { return listPrograms(criteria); diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/StudyController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/StudyController.java index 39b2f72d759ff78a549af444893992a7a9f438f3..2411dcfebfaab53cb91b77c6192144ed36571313 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/StudyController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/StudyController.java @@ -1,12 +1,26 @@ package fr.inra.urgi.faidare.api.brapi.v1; +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +import java.util.List; +import java.util.Set; +import javax.validation.Valid; + import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.inra.urgi.faidare.api.NotFoundException; -import fr.inra.urgi.faidare.domain.brapi.v1.data.*; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasm; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiObservationUnit; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiObservationVariable; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiStudyDetail; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiStudySummary; import fr.inra.urgi.faidare.domain.brapi.v1.response.BrapiListResponse; import fr.inra.urgi.faidare.domain.brapi.v1.response.BrapiResponse; -import fr.inra.urgi.faidare.domain.criteria.*; +import fr.inra.urgi.faidare.domain.criteria.GermplasmPOSTSearchCriteria; +import fr.inra.urgi.faidare.domain.criteria.ObservationUnitCriteria; +import fr.inra.urgi.faidare.domain.criteria.StudyObservationUnitCriteria; +import fr.inra.urgi.faidare.domain.criteria.StudySearchCriteria; +import fr.inra.urgi.faidare.domain.criteria.StudySummaryCriteria; import fr.inra.urgi.faidare.domain.criteria.base.PaginationCriteriaImpl; import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmVO; import fr.inra.urgi.faidare.domain.data.phenotype.ObservationUnitVO; @@ -21,22 +35,20 @@ import fr.inra.urgi.faidare.repository.es.ObservationUnitRepository; import fr.inra.urgi.faidare.repository.es.StudyRepository; import fr.inra.urgi.faidare.repository.file.CropOntologyRepository; import fr.inra.urgi.faidare.utils.StringFunctions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; -import java.util.Set; - -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; /** * @author gcornut */ -@Api(tags = {"Breeding API"}, description = "BrAPI endpoint") +@Tag(name = "Breeding API", description = "BrAPI endpoint") @RestController public class StudyController { @@ -61,7 +73,7 @@ public class StudyController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Studies/StudyDetails.md */ - @ApiOperation("Get study") + @Operation(summary = "Get study") @GetMapping("/brapi/v1/studies/{studyDbId}") public BrapiResponse<BrapiStudyDetail> getStudy(@PathVariable String studyDbId) throws Exception { studyDbId = StringFunctions.asUTF8(studyDbId); @@ -75,7 +87,7 @@ public class StudyController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Studies/ListStudySummaries.md */ - @ApiOperation("List studies") + @Operation(summary = "List studies") @GetMapping("/brapi/v1/studies") public BrapiListResponse<? extends BrapiStudySummary> listStudies(@Valid StudySummaryCriteria criteria) { if (criteria == null) { @@ -88,7 +100,7 @@ public class StudyController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Studies/SearchStudies.md */ - @ApiOperation("Search studies") + @Operation(summary = "Search studies") @GetMapping(value = "/brapi/v1/studies-search") public BrapiListResponse<? extends BrapiStudySummary> searchStudiesGet(@Valid StudySearchCriteria criteria) { return listStudies(criteria); @@ -97,7 +109,7 @@ public class StudyController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Studies/SearchStudies.md */ - @ApiOperation("Search studies") + @Operation(summary = "Search studies") @PostMapping(value = "/brapi/v1/studies-search", consumes = APPLICATION_JSON_VALUE) public BrapiListResponse<? extends BrapiStudySummary> searchStudiesPost(@RequestBody(required = false) @Valid StudySearchCriteria criteria) { return listStudies(criteria); @@ -106,7 +118,7 @@ public class StudyController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Studies/StudyObservationVariables.md */ - @ApiOperation("List study observation variables") + @Operation(summary = "List study observation variables") @GetMapping(value = {"/brapi/v1/studies/{studyDbId}/observationVariables", "/brapi/v1/studies/{studyDbId}/observationvariables"}) public BrapiListResponse<? extends BrapiObservationVariable> listStudyVariables( @PathVariable String studyDbId, @Valid PaginationCriteriaImpl criteria @@ -128,7 +140,7 @@ public class StudyController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Studies/ObservationUnitDetails.md */ - @ApiOperation("List study observation units") + @Operation(summary = "List study observation units") @GetMapping(value = {"/brapi/v1/studies/{studyDbId}/observationUnits", "/brapi/v1/studies/{studyDbId}/observationunits"}) public BrapiListResponse<? extends BrapiObservationUnit> listStudyObservationUnits( @PathVariable String studyDbId, @Valid StudyObservationUnitCriteria criteria @@ -146,7 +158,7 @@ public class StudyController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Studies/StudyGermplasmDetails.md */ - @ApiOperation("List study germplasm") + @Operation(summary = "List study germplasm") @GetMapping("/brapi/v1/studies/{studyDbId}/germplasm") public BrapiListResponse<? extends BrapiGermplasm> listStudyGermplasm( @PathVariable String studyDbId, @Valid PaginationCriteriaImpl criteria diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/TrialController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/TrialController.java index 7a49b76c5c3a5d69d2daccd2106e41cb7d36f6ae..f936d47e7fd492e9ee694e4699a7e44fb8e5a379 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/TrialController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/TrialController.java @@ -1,5 +1,7 @@ package fr.inra.urgi.faidare.api.brapi.v1; +import javax.validation.Valid; + import fr.inra.urgi.faidare.api.NotFoundException; import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiTrial; import fr.inra.urgi.faidare.domain.brapi.v1.response.BrapiListResponse; @@ -9,19 +11,17 @@ import fr.inra.urgi.faidare.domain.data.TrialVO; import fr.inra.urgi.faidare.domain.response.ApiResponseFactory; import fr.inra.urgi.faidare.domain.response.PaginatedList; import fr.inra.urgi.faidare.repository.es.TrialRepository; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; -import javax.validation.Valid; - /** * @author gcornut */ -@Api(tags = {"Breeding API"}, description = "BrAPI endpoint") +@Tag(name = "Breeding API", description = "BrAPI endpoint") @RestController public class TrialController { @@ -35,7 +35,7 @@ public class TrialController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Trials/GetTrialById.md */ - @ApiOperation("Get trial") + @Operation(summary = "Get trial") @GetMapping("/brapi/v1/trials/{trialDbId}") public BrapiResponse<BrapiTrial> getTrial(@PathVariable String trialDbId) { TrialVO program = repository.getById(trialDbId); @@ -48,7 +48,7 @@ public class TrialController { /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Trials/ListTrialSummaries.md */ - @ApiOperation("List trials") + @Operation(summary = "List trials") @GetMapping("/brapi/v1/trials") public BrapiListResponse<? extends BrapiTrial> listTrials(@Valid TrialCriteria criteria) { PaginatedList<? extends BrapiTrial> result = repository.find(criteria); diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/DataDiscoveryController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/DataDiscoveryController.java index b4bef53dadfe12a81db4da50aedfc7637d8f8e56..3956a70263a7b60b65fda9092f5eb794adfb599b 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/DataDiscoveryController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/DataDiscoveryController.java @@ -1,5 +1,12 @@ package fr.inra.urgi.faidare.api.faidare.v1; +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +import java.io.UnsupportedEncodingException; +import java.util.Collection; +import java.util.List; +import javax.validation.Valid; + import fr.inra.urgi.faidare.config.FaidareProperties; import fr.inra.urgi.faidare.domain.brapi.v1.response.BrapiListResponse; import fr.inra.urgi.faidare.domain.datadiscovery.criteria.DataDiscoveryCriteriaImpl; @@ -9,19 +16,17 @@ import fr.inra.urgi.faidare.domain.datadiscovery.response.DataDiscoveryResponse; import fr.inra.urgi.faidare.domain.response.ApiResponseFactory; import fr.inra.urgi.faidare.repository.es.DataDiscoveryRepository; import fr.inra.urgi.faidare.utils.StringFunctions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.io.UnsupportedEncodingException; -import java.util.Collection; -import java.util.List; - -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; -@Api(tags = {"FAIDARE API"}, description = "Extended FAIDARE API") +@Tag(name = "FAIDARE API", description = "Extended FAIDARE API") @RestController @RequestMapping(value = "/faidare/v1/datadiscovery") public class DataDiscoveryController { @@ -35,7 +40,7 @@ public class DataDiscoveryController { this.properties = properties; } - @ApiOperation("Suggest data discovery document field values") + @Operation(summary = "Suggest data discovery document field values") @PostMapping("/suggest") public Collection<String> suggest( @RequestParam String field, @@ -49,7 +54,7 @@ public class DataDiscoveryController { return dataDiscoveryRepository.suggest(field, StringFunctions.asUTF8(text), fetchSize, criteria); } - @ApiOperation("Search for data discovery documents") + @Operation(summary = "Search for data discovery documents") @PostMapping(value = "/search", consumes = APPLICATION_JSON_VALUE) public DataDiscoveryResponse search( @RequestBody @Valid DataDiscoveryCriteriaImpl criteria @@ -57,7 +62,7 @@ public class DataDiscoveryController { return dataDiscoveryRepository.find(criteria); } - @ApiOperation("Get list of data sources") + @Operation(summary = "Get list of data sources") @GetMapping("/sources") public BrapiListResponse<? extends DataSource> sources() { List<DataSourceImpl> dataSources = properties.getDataSources(); diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java index 70c262b935def1c8f2bf8a6037e8c7d0fec34598..1c92aa098bde6237f3b468a07a1b19b0f32f7e89 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java @@ -1,5 +1,12 @@ package fr.inra.urgi.faidare.api.faidare.v1; +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +import java.io.File; +import java.util.Collections; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + import com.google.common.base.Strings; import fr.inra.urgi.faidare.api.BadRequestException; import fr.inra.urgi.faidare.api.NotFoundException; @@ -11,22 +18,20 @@ import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmVO; import fr.inra.urgi.faidare.domain.datadiscovery.response.GermplasmSearchResponse; import fr.inra.urgi.faidare.domain.response.PaginatedList; import fr.inra.urgi.faidare.service.es.GermplasmService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.FileSystemResource; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; -import java.io.File; -import java.util.Collections; - -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; - -@Api(tags = {"FAIDARE API"}, description = "Extended FAIDARE API") +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "FAIDARE API", description = "Extended FAIDARE API") @RestController @RequestMapping(value = "/faidare/v1/germplasm") public class GnpISGermplasmController { @@ -39,7 +44,7 @@ public class GnpISGermplasmController { this.germplasmService = germplasmService; } - @ApiOperation(value = "Search germplasm by ID or PUI") + @Operation(summary = "Search germplasm by ID or PUI") @GetMapping public GermplasmVO get( @RequestParam(required = false) String id, @@ -147,7 +152,7 @@ public class GnpISGermplasmController { return null; } - @ApiOperation("Search list of germplasm") + @Operation(summary = "Search list of germplasm") @PostMapping(value = "/search", consumes = APPLICATION_JSON_VALUE) public GermplasmSearchResponse germplasmSearch(@RequestBody @Valid FaidareGermplasmPOSTShearchCriteria criteria) { try { diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/XRefDocumentController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/XRefDocumentController.java index 09c5c25d93cce30a19f6ddc52586ca990c60863c..af79dc6b08ff9b65485865590783088f1b5f5342 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/XRefDocumentController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/XRefDocumentController.java @@ -1,23 +1,23 @@ package fr.inra.urgi.faidare.api.faidare.v1; +import java.util.List; + import fr.inra.urgi.faidare.domain.response.PaginatedList; import fr.inra.urgi.faidare.domain.xref.XRefDocumentSearchCriteria; import fr.inra.urgi.faidare.domain.xref.XRefDocumentVO; import fr.inra.urgi.faidare.repository.es.XRefDocumentRepository; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - /** * Imported and adapted from unified-interface legacy */ -@Api(tags = {"FAIDARE API"}, description = "Extended FAIDARE API") +@Tag(name = "FAIDARE API", description = "Extended FAIDARE API") @RestController public class XRefDocumentController { @@ -28,7 +28,7 @@ public class XRefDocumentController { this.repository = repository; } - @ApiOperation("Find xref documents") + @Operation(summary = "Find xref documents") @GetMapping(value = "/faidare/v1/xref/documentbyfulltextid") public PaginatedList<XRefDocumentVO> documentByFullTextId( @RequestParam(required = false, value = "entryType") String entryType, diff --git a/backend/src/main/java/fr/inra/urgi/faidare/config/SwaggerConfig.java b/backend/src/main/java/fr/inra/urgi/faidare/config/SwaggerConfig.java index cfa2aad25a3a99b09833ab0b860a71287d265d3d..97173a1b3b4abb768df6548cffccf952b887e2de 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/config/SwaggerConfig.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/config/SwaggerConfig.java @@ -1,26 +1,18 @@ package fr.inra.urgi.faidare.config; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * @author gcornut */ @Configuration -@EnableSwagger2 public class SwaggerConfig { @Bean - public Docket api() { - return new Docket(DocumentationType.SWAGGER_2).select() - .apis(RequestHandlerSelectors.basePackage("fr.inra.urgi.faidare.api")) - .paths(PathSelectors.regex("/.*")) - .build(); + public OpenAPI springShopOpenAPI() { + return new OpenAPI().info(new Info().title("FAIDARE and BrAPI APIs")); } - } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/ESScrollIterator.java b/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/ESScrollIterator.java index 45080159421b1d797ffb41e23847458f96e3df8d..b6a070e563ebbf0dd9f86b42350674a59695ec2d 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/ESScrollIterator.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/ESScrollIterator.java @@ -7,7 +7,7 @@ import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchScrollRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; -import org.elasticsearch.common.unit.TimeValue; +import org.elasticsearch.core.TimeValue; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.sort.FieldSortBuilder; import org.elasticsearch.search.sort.SortOrder; diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index 843166e97189adc3b6376353d5fbbff4ebda6077..872aa5ac8f98353d31a9560d4d014461d93077ec 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -2,7 +2,9 @@ spring: config: import: 'optional:configserver:' name: faidare - + mvc: + pathmatch: + matching-strategy: ant-path-matcher cloud: config: uri: ${SPRING_CONFIG_URI:http://localhost:8888} @@ -103,6 +105,13 @@ server: servlet: context-path: /faidare-dev +springdoc: + packagesToScan: fr.inra.urgi.faidare.api + pathsToMatch: /faidare/**, /brapi/** + swagger-ui: + operationsSorter: alpha + tagsSorter: alpha + --- spring: config: diff --git a/backend/src/main/resources/templates/error.html b/backend/src/main/resources/templates/error.html index 0f8e26fcc19e3865164f91bfe8fb046cac6895c2..8ef29a8564ea61106df55bd8b2396cca23a305fa 100644 --- a/backend/src/main/resources/templates/error.html +++ b/backend/src/main/resources/templates/error.html @@ -2,7 +2,7 @@ <html xmlns:th="http://www.thymeleaf.org" - th:replace="~{layout/main :: layout(title=~{::title}, content=~{::main}, script=~{::script})}" + th:replace="~{layout/main :: layout(title=~{::title}, content=~{::main}, script=~{})}" > <head> <title>Error</title> @@ -17,5 +17,6 @@ Unexpected error: <span th:text="${error}">.</span> </p> </main> + <script th:inline="javascript"></script> </body> </html> diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a254e91df704a9acc0f2745c0e340d9b582..00e33edef6936b1ada8721cff42201db8c9d8675 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/web/build.gradle.kts b/web/build.gradle.kts index 44076adb023409ae78bfcc8bd986a412a52afc11..fd9828917cea4449637f247dbf3542b930a20016 100644 --- a/web/build.gradle.kts +++ b/web/build.gradle.kts @@ -3,13 +3,13 @@ import com.github.gradle.node.yarn.task.YarnTask plugins { base - id("com.github.node-gradle.node") version "3.0.1" + id("com.github.node-gradle.node") version "3.2.1" } node { - version.set("14.17.0") + version.set("16.14.0") npmVersion.set("6.14.10") - yarnVersion.set("1.22.10") + yarnVersion.set("1.22.17") download.set(true) } diff --git a/web/package.json b/web/package.json index d4dae567299cac36ee27d7aa43752435a21589ae..d940af62f9ba163d5f8fa70ea296821a16bfb0bc 100644 --- a/web/package.json +++ b/web/package.json @@ -15,28 +15,28 @@ "author": "", "license": "MIT", "dependencies": { - "@types/leaflet": "1.7.5", - "bootstrap": "5.1.1", + "@types/leaflet": "1.7.9", + "bootstrap": "5.1.3", "leaflet": "1.7.1" }, "devDependencies": { - "@types/bootstrap": "5.1.2", - "@types/leaflet.markercluster": "1.4.5", - "autoprefixer": "10.3.3", + "@types/bootstrap": "5.1.9", + "@types/leaflet.markercluster": "1.4.6", + "autoprefixer": "10.4.2", "clean-webpack-plugin": "4.0.0", - "css-loader": "6.2.0", - "css-minimizer-webpack-plugin": "3.0.2", - "leaflet.markercluster": "1.5.1", - "mini-css-extract-plugin": "2.2.2", - "postcss": "8.3.6", - "postcss-loader": "6.1.1", - "prettier": "2.3.2", - "sass": "1.39.0", - "sass-loader": "12.1.0", - "ts-loader": "9.2.5", - "typescript": "4.4.2", - "webpack": "5.51.1", - "webpack-cli": "4.8.0" + "css-loader": "6.7.1", + "css-minimizer-webpack-plugin": "3.4.1", + "leaflet.markercluster": "1.5.3", + "mini-css-extract-plugin": "2.6.0", + "postcss": "8.4.8", + "postcss-loader": "6.2.1", + "prettier": "2.5.1", + "sass": "1.49.9", + "sass-loader": "12.6.0", + "ts-loader": "9.2.7", + "typescript": "4.6.2", + "webpack": "5.70.0", + "webpack-cli": "4.9.2" }, "browserslist": [ "defaults" diff --git a/web/yarn.lock b/web/yarn.lock index 877a23dac04a277365934d2a8f391bfbfa49b98e..00732305b51ee97dc6110c11af39adc600beceec 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -38,18 +38,18 @@ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== -"@types/bootstrap@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/bootstrap/-/bootstrap-5.1.2.tgz#24f08f1957ff5859633f4bf620e921d296e6c3a2" - integrity sha512-dSQvMi2dMyNwJU6LZjP0pimuBowsMUvGScYdfqqeiDUoj9TxXZCpfu0cTl94U0Zvw/tdH9j/9ToOhi4LKNLZhg== +"@types/bootstrap@5.1.9": + version "5.1.9" + resolved "https://registry.yarnpkg.com/@types/bootstrap/-/bootstrap-5.1.9.tgz#55b9bea862667e351e9873ff94fad7cd0be10c5f" + integrity sha512-Tembe6lt7819EUzV5LSG9uuwULm4hdEGV9LZ8QBYpWc0J+a+9DdmJEwZ4FMaXGVJWwumTPSkJ8JQF0/KDAmXYg== dependencies: "@popperjs/core" "^2.9.2" "@types/jquery" "*" -"@types/eslint-scope@^3.7.0": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" - integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g== +"@types/eslint-scope@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" + integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== dependencies: "@types/eslint" "*" "@types/estree" "*" @@ -62,11 +62,16 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^0.0.50": +"@types/estree@*": version "0.0.50" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + "@types/geojson@*": version "7946.0.8" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" @@ -87,15 +92,15 @@ dependencies: "@types/sizzle" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.8": +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== -"@types/leaflet.markercluster@1.4.5": - version "1.4.5" - resolved "https://registry.yarnpkg.com/@types/leaflet.markercluster/-/leaflet.markercluster-1.4.5.tgz#dc4457e2dff9baaacc17c9c04c65ab69b5f361f7" - integrity sha512-R9Ql//z6muSGI5mPfr+FaKQQB7EIdQQyivYweVSdOrWr8WyNNFcSwfl+mqGYJFhRRCO/6lbZiM3scEyp9LdaFg== +"@types/leaflet.markercluster@1.4.6": + version "1.4.6" + resolved "https://registry.yarnpkg.com/@types/leaflet.markercluster/-/leaflet.markercluster-1.4.6.tgz#1159460b374ba5e329cb678d0e427f99dca75be5" + integrity sha512-MD+bUDzxHznY0zOlSBUAMNQUGB2+xpJPKrR2MNEoBAAKa3QTKJJySBtCqWyGLvYNNO+Cdyc2c64aF2IFwe4fcQ== dependencies: "@types/leaflet" "*" @@ -106,10 +111,10 @@ dependencies: "@types/geojson" "*" -"@types/leaflet@1.7.5": - version "1.7.5" - resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.7.5.tgz#7b2bcf1271fb7b8c305e3c468eaad65b6dbac472" - integrity sha512-+Myo00Yb5OuvUyrH+vUwn9DRgOaBJsF/etIMdMcNhWGBMo58Mo1cxLInvCd0ZpvItju/AeDYFB/Od2pLiHB3VA== +"@types/leaflet@1.7.9": + version "1.7.9" + resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.7.9.tgz#7993d34f14cfa88c45b3d490daba39a3a1be9a2b" + integrity sha512-H8vPgD49HKzqM41ArHGZM70g/tfhp8W+JcPxfnF+5H/Xvp+xiP+KQOUNWU8U89fqS1Jj3cpRY/+nbnaHFzwnFA== dependencies: "@types/geojson" "*" @@ -254,22 +259,22 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.4.tgz#f03ce6311c0883a83d04569e2c03c6238316d2aa" - integrity sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ== +"@webpack-cli/configtest@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356" + integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg== -"@webpack-cli/info@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.3.0.tgz#9d78a31101a960997a4acd41ffd9b9300627fe2b" - integrity sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w== +"@webpack-cli/info@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea" + integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA== dependencies: envinfo "^7.7.3" -"@webpack-cli/serve@^1.5.2": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.5.2.tgz#ea584b637ff63c5a477f6f21604b5a205b72c9ec" - integrity sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw== +"@webpack-cli/serve@^1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" + integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -291,11 +296,25 @@ acorn@^8.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -306,6 +325,16 @@ ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.8.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d" + integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -345,17 +374,17 @@ array-uniq@^1.0.1: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= -autoprefixer@10.3.3: - version "10.3.3" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.3.3.tgz#4bac89c74ef98e6a40fe1c5b76c0d1c91db153ce" - integrity sha512-yRzjxfnggrP/+qVHlUuZz5FZzEbkT+Yt0/Df6ScEMnbbZBLzYB2W0KLxoQCW+THm1SpOsM1ZPcTHAwuvmibIsQ== +autoprefixer@10.4.2: + version "10.4.2" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.2.tgz#25e1df09a31a9fba5c40b578936b90d35c9d4d3b" + integrity sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ== dependencies: - browserslist "^4.16.8" - caniuse-lite "^1.0.30001252" - colorette "^1.3.0" - fraction.js "^4.1.1" + browserslist "^4.19.1" + caniuse-lite "^1.0.30001297" + fraction.js "^4.1.2" normalize-range "^0.1.2" - postcss-value-parser "^4.1.0" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" balanced-match@^1.0.0: version "1.0.2" @@ -372,10 +401,10 @@ boolbase@^1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -bootstrap@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.1.1.tgz#9d6eed81e08feaccedf3adaca51fe4b73a2871df" - integrity sha512-/jUa4sSuDZWlDLQ1gwQQR8uoYSvLJzDd8m5o6bPKh3asLAMYVZKdRCjb1joUd5WXf0WwCNzd2EjwQQhupou0dA== +bootstrap@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.1.3.tgz#ba081b0c130f810fa70900acbc1c6d3c28fa8f34" + integrity sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q== brace-expansion@^1.1.7: version "1.1.11" @@ -392,7 +421,7 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.6, browserslist@^4.16.8: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.6: version "4.16.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.8.tgz#cb868b0b554f137ba6e33de0ecff2eda403c4fb0" integrity sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ== @@ -403,6 +432,17 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4 escalade "^3.1.1" node-releases "^1.1.75" +browserslist@^4.19.1: + version "4.20.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.0.tgz#35951e3541078c125d36df76056e94738a52ebe9" + integrity sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ== + dependencies: + caniuse-lite "^1.0.30001313" + electron-to-chromium "^1.4.76" + escalade "^3.1.1" + node-releases "^2.0.2" + picocolors "^1.0.0" + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -423,10 +463,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001251, caniuse-lite@^1.0.30001252: - version "1.0.30001252" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz#cb16e4e3dafe948fc4a9bb3307aea054b912019a" - integrity sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001251, caniuse-lite@^1.0.30001297, caniuse-lite@^1.0.30001313: + version "1.0.30001314" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz#65c7f9fb7e4594fca0a333bec1d8939662377596" + integrity sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw== chalk@^2.0.0: version "2.4.2" @@ -472,14 +512,6 @@ clean-webpack-plugin@4.0.0: dependencies: del "^4.1.1" -cli@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" - integrity sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ= - dependencies: - exit "0.1.2" - glob "^7.1.1" - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -518,11 +550,16 @@ colord@^2.0.1, colord@^2.6: resolved "https://registry.yarnpkg.com/colord/-/colord-2.7.0.tgz#706ea36fe0cd651b585eb142fe64b6480185270e" integrity sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q== -colorette@^1.2.1, colorette@^1.2.2, colorette@^1.3.0: +colorette@^1.2.2, colorette@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== +colorette@^2.0.14: + version "2.0.16" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -538,18 +575,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -console-browserify@1.1.x: - 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" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - cosmiconfig@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" @@ -582,30 +607,29 @@ css-declaration-sorter@^6.0.3: dependencies: timsort "^0.3.0" -css-loader@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.2.0.tgz#9663d9443841de957a3cb9bcea2eda65b3377071" - integrity sha512-/rvHfYRjIpymZblf49w8jYcRo2y9gj6rV8UroHGmBxKrIyGLokpycyKzp9OkitvqT29ZSpzJ0Ic7SpnJX3sC8g== +css-loader@6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" + integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== dependencies: icss-utils "^5.1.0" - postcss "^8.2.15" + postcss "^8.4.7" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" semver "^7.3.5" -css-minimizer-webpack-plugin@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz#8fadbdf10128cb40227bff275a4bb47412534245" - integrity sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ== +css-minimizer-webpack-plugin@3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f" + integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== dependencies: cssnano "^5.0.6" jest-worker "^27.0.2" - p-limit "^3.0.2" postcss "^8.3.5" - schema-utils "^3.0.0" + schema-utils "^4.0.0" serialize-javascript "^6.0.0" source-map "^0.6.1" @@ -695,11 +719,6 @@ csso@^4.2.0: dependencies: css-tree "^1.1.2" -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= - del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -713,14 +732,6 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.3.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" @@ -730,23 +741,11 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== -domhandler@2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" - integrity sha1-LeWaCCLVAn+r/28DLCsloqir5zg= - dependencies: - domelementtype "1" - domhandler@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" @@ -754,14 +753,6 @@ domhandler@^4.2.0: dependencies: domelementtype "^2.2.0" -domutils@1.5: - 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@^2.6.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" @@ -776,7 +767,12 @@ electron-to-chromium@^1.3.811: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.818.tgz#32ed024fa8316e5d469c96eecbea7d2463d80085" integrity sha512-c/Z9gIr+jDZAR9q+mn40hEc1NharBT+8ejkarjbCDnBNFviI6hvcC5j2ezkAXru//bTnQp5n6iPi0JA83Tla1Q== -enhanced-resolve@^5.0.0, enhanced-resolve@^5.8.0: +electron-to-chromium@^1.4.76: + version "1.4.80" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.80.tgz#299a1ea3e32810934b4e3c2e4d4cb53136fdab3f" + integrity sha512-COsbJCGVYCc/aAY4cd94x1Js3q0r406YKGbdL8LXHg0O9dEjuFEFU/vZneRxBxKo/f1lLHi0YyAR7sbFM+i8Bg== + +enhanced-resolve@^5.0.0: version "5.8.2" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== @@ -784,10 +780,13 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.8.0: graceful-fs "^4.2.4" tapable "^2.2.0" -entities@1.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" - integrity sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY= +enhanced-resolve@^5.9.2: + version "5.9.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz#0224dcd6a43389ebfb2d55efee517e5466772dd9" + integrity sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" entities@^2.0.0: version "2.2.0" @@ -806,10 +805,10 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-module-lexer@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.7.1.tgz#c2c8e0f46f2df06274cdaf0dd3f3b33e0a0b267d" - integrity sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw== +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== escalade@^3.1.1: version "3.1.1" @@ -866,12 +865,7 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -exit@0.1.2, exit@0.1.x: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -fast-deep-equal@^3.1.1: +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== @@ -901,10 +895,10 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" -fraction.js@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.1.tgz#ac4e520473dae67012d618aab91eda09bcb400ff" - integrity sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg== +fraction.js@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== fs.realpath@^1.0.0: version "1.0.0" @@ -938,7 +932,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.3, glob@^7.1.1, glob@^7.1.3: +glob@^7.0.3, glob@^7.1.3: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -966,6 +960,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -983,17 +982,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -htmlparser2@3.8.x: - version "3.8.3" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" - integrity sha1-mWwosZFRaovoZQGn15dX5ccMEGg= - dependencies: - domelementtype "1" - domhandler "2.3" - domutils "1.5" - entities "1.0" - readable-stream "1.1" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -1004,6 +992,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +immutable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" + integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== + import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -1028,7 +1021,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.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== @@ -1115,11 +1108,6 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -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= - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -1144,20 +1132,6 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -jshint@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.13.1.tgz#16bbbecdbb4564d3758d9de4f24926f8c7f8f835" - integrity sha512-vymzfR3OysF5P774x6zYv0bD4EpH6NWRxpq54wO9mA9RuY49yb1teKSICkLx2Ryx+mfzlVVNNbTBtsRtg78t7g== - dependencies: - cli "~1.0.0" - console-browserify "1.1.x" - exit "0.1.x" - htmlparser2 "3.8.x" - lodash "~4.17.21" - minimatch "~3.0.2" - shelljs "0.3.x" - strip-json-comments "1.0.x" - json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -1173,6 +1147,11 @@ json-schema-traverse@^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-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -1183,13 +1162,15 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== -leaflet.markercluster@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.5.1.tgz#4e352c8cbb9508e6175a20ac29cf179601907c4c" - integrity sha512-dRGndfMZibkWMBD7g8h+lJW0R0keTx1GGMErre7uhqnKiYBoMxR2VPX6Sy8oGNzg+FA7FKtTuO1hGh5HtV9s2g== - dependencies: - jshint "^2.13.1" - npm-ci "0.0.2" +klona@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + +leaflet.markercluster@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz#9cdb52a4eab92671832e1ef9899669e80efc4056" + integrity sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA== leaflet@1.7.1: version "1.7.1" @@ -1228,11 +1209,6 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@~4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -1275,14 +1251,14 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.2.2.tgz#df22f16bf43173050c6d652fa7d035318c310e04" - integrity sha512-eUjQ/q1rQIeHWgIx7ny/DNgXHcMXHdBwgrZQK7Ev8dbR+HxhroFM2Cb6kMiswOYaq05IRJhPuQqXWUABIjjA3g== +mini-css-extract-plugin@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz#578aebc7fc14d32c0ad304c2c34f08af44673f5e" + integrity sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w== dependencies: - schema-utils "^3.1.0" + schema-utils "^4.0.0" -minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -1294,6 +1270,11 @@ nanoid@^3.1.23: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== +nanoid@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== + neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -1304,6 +1285,11 @@ node-releases@^1.1.75: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== +node-releases@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" + integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== + 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" @@ -1319,11 +1305,6 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-ci@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/npm-ci/-/npm-ci-0.0.2.tgz#9f6b7620c2857802fb6da2681069e40a29e31072" - integrity sha1-n2t2IMKFeAL7baJoEGnkCinjEHI= - npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -1364,7 +1345,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2, p-limit@^3.1.0: +p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -1435,6 +1416,11 @@ path-type@^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.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" @@ -1514,13 +1500,13 @@ postcss-discard-overridden@^5.0.1: resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz#454b41f707300b98109a75005ca4ab0ff2743ac6" integrity sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q== -postcss-loader@6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.1.1.tgz#58dd0a3accd9bc87cc52eff75244db578d11301a" - integrity sha512-lBmJMvRh1D40dqpWKr9Rpygwxn8M74U9uaCSeYGNKLGInbk9mXBt1ultHf2dH9Ghk6Ue4UXlXWwGMH9QdUJ5ug== +postcss-loader@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" + integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== dependencies: cosmiconfig "^7.0.0" - klona "^2.0.4" + klona "^2.0.5" semver "^7.3.5" postcss-merge-longhand@^5.0.2: @@ -1727,7 +1713,21 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@8.3.6, postcss@^8.2.15, postcss@^8.3.5: +postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@8.4.8, postcss@^8.4.7: + version "8.4.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.8.tgz#dad963a76e82c081a0657d3a2f3602ce10c2e032" + integrity sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ== + dependencies: + nanoid "^3.3.1" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +postcss@^8.3.5: version "8.3.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== @@ -1736,10 +1736,10 @@ postcss@8.3.6, postcss@^8.2.15, postcss@^8.3.5: nanoid "^3.1.23" source-map-js "^0.6.2" -prettier@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" - integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== +prettier@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== punycode@^2.1.0: version "2.1.1" @@ -1753,16 +1753,6 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -readable-stream@1.1: - version "1.1.13" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" - integrity sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -1777,6 +1767,11 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" +require-from-string@^2.0.2: + 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== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -1814,20 +1809,22 @@ safe-buffer@^5.1.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -sass-loader@12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.1.0.tgz#b73324622231009da6fba61ab76013256380d201" - integrity sha512-FVJZ9kxVRYNZTIe2xhw93n3xJNYZADr+q69/s98l9nTCrWASo+DR2Ot0s5xTKQDDEosUkatsGeHxcH4QBp5bSg== +sass-loader@12.6.0: + version "12.6.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== dependencies: klona "^2.0.4" neo-async "^2.6.2" -sass@1.39.0: - version "1.39.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.39.0.tgz#6c64695d1c437767c8f1a4e471288e831f81d035" - integrity sha512-F4o+RhJkNOIG0b6QudYU8c78ZADKZjKDk5cyrf8XTKWfrgbtyVVXImFstJrc+1pkQDCggyidIOytq6gS4gCCZg== +sass@1.49.9: + version "1.49.9" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.9.tgz#b15a189ecb0ca9e24634bae5d1ebc191809712f9" + integrity sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A== dependencies: chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" schema-utils@^3.0.0, schema-utils@^3.1.0: version "3.1.1" @@ -1838,6 +1835,16 @@ schema-utils@^3.0.0, schema-utils@^3.1.0: ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" @@ -1871,16 +1878,16 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@0.3.x: - version "0.3.0" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" - integrity sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E= - signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +"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== + source-map-js@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" @@ -1909,21 +1916,11 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -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= - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E= - stylehacks@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.0.1.tgz#323ec554198520986806388c7fdaebc38d2c06fb" @@ -2004,20 +2001,20 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -ts-loader@9.2.5: - version "9.2.5" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.2.5.tgz#127733a5e9243bf6dafcb8aa3b8a266d8041dca9" - integrity sha512-al/ATFEffybdRMUIr5zMEWQdVnCGMUA9d3fXJ8dBVvBlzytPvIszoG9kZoR+94k6/i293RnVOXwMaWbXhNy9pQ== +ts-loader@9.2.7: + version "9.2.7" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.2.7.tgz#948654099ca96992b62ec47bd9cee5632006e101" + integrity sha512-Fxh44mKli9QezgbdCXkEJWxnedQ0ead7DXTH+lfXEPedu+Y9EtMJ2aQ9G3Dj1j7Q612E8931rww8NDZha4Tibg== dependencies: chalk "^4.1.0" enhanced-resolve "^5.0.0" micromatch "^4.0.0" semver "^7.3.4" -typescript@4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86" - integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ== +typescript@4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4" + integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg== uniqs@^2.0.0: version "2.0.0" @@ -2036,41 +2033,35 @@ util-deprecate@^1.0.2: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -v8-compile-cache@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - vendors@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== -watchpack@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" - integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== +watchpack@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" + integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webpack-cli@4.8.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.8.0.tgz#5fc3c8b9401d3c8a43e2afceacfa8261962338d1" - integrity sha512-+iBSWsX16uVna5aAYN6/wjhJy1q/GKk4KjKvfg90/6hykCTSgozbfz5iRgDTSJt/LgSbYxdBX3KBHeobIs+ZEw== +webpack-cli@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d" + integrity sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.4" - "@webpack-cli/info" "^1.3.0" - "@webpack-cli/serve" "^1.5.2" - colorette "^1.2.1" + "@webpack-cli/configtest" "^1.1.1" + "@webpack-cli/info" "^1.4.1" + "@webpack-cli/serve" "^1.6.1" + colorette "^2.0.14" commander "^7.0.0" execa "^5.0.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" interpret "^2.2.0" rechoir "^0.7.0" - v8-compile-cache "^2.2.0" webpack-merge "^5.7.3" webpack-merge@^5.7.3: @@ -2081,18 +2072,18 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.0.tgz#b16973bcf844ebcdb3afde32eda1c04d0b90f89d" - integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.51.1: - version "5.51.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.51.1.tgz#41bebf38dccab9a89487b16dbe95c22e147aac57" - integrity sha512-xsn3lwqEKoFvqn4JQggPSRxE4dhsRcysWTqYABAZlmavcoTmwlOb9b1N36Inbt/eIispSkuHa80/FJkDTPos1A== +webpack@5.70.0: + version "5.70.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.70.0.tgz#3461e6287a72b5e6e2f4872700bc8de0d7500e6d" + integrity sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw== dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.50" + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" @@ -2100,12 +2091,12 @@ webpack@5.51.1: acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.0" - es-module-lexer "^0.7.1" + enhanced-resolve "^5.9.2" + es-module-lexer "^0.9.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" json-parse-better-errors "^1.0.2" loader-runner "^4.2.0" mime-types "^2.1.27" @@ -2113,8 +2104,8 @@ webpack@5.51.1: schema-utils "^3.1.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.3" - watchpack "^2.2.0" - webpack-sources "^3.2.0" + watchpack "^2.3.1" + webpack-sources "^3.2.3" which@^2.0.1: version "2.0.2"