From ef5c2421dbdfce4c4eaac5efb28f37ee92c952ab Mon Sep 17 00:00:00 2001 From: Claudio Waldvogel Date: Tue, 21 Jun 2022 11:49:57 +0200 Subject: [PATCH 01/21] wip --- .../config/model/metrics/MetricsSettings.java | 12 +- .../definition/MetricDefinitionSettings.java | 4 + .../ocelot/config/default/basics.yml | 3 + .../hook/MethodHookGenerator.java | 6 +- .../hook/actions/MetricsRecorder.java | 35 +-- .../core/metrics/MeasureTagValueGuard.java | 217 ++++++++++++++++++ .../inspectit/ocelot/core/tags/TagUtils.java | 14 +- .../hook/actions/MetricsRecorderTest.java | 57 +++-- .../metrics/MeasureTagValueGuardTest.java | 101 ++++++++ 9 files changed, 386 insertions(+), 63 deletions(-) create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java index c0b086c555..35df26a906 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java @@ -38,6 +38,16 @@ public class MetricsSettings { */ private Duration frequency; + /** + * + */ + private Duration tagGuardScheduleDelay; + + /** + * + */ + private String tagGuardDatabaseFile; + @NotNull private Map<@NotBlank String, @NotNull @Valid MetricDefinitionSettings> definitions = Collections.emptyMap(); @@ -84,8 +94,6 @@ public class MetricsSettings { @NotNull private JmxMetricsRecorderSettings jmx; - - @AdditionalValidation public void noDuplicateViewNames(ViolationBuilder vios) { Map viewsToMeasuresMap = new HashMap<>(); diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java index cea15ee6b2..86ff1c16af 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java @@ -5,6 +5,7 @@ import rocks.inspectit.ocelot.config.model.metrics.MetricsSettings; import javax.validation.Valid; +import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.time.Duration; @@ -35,6 +36,9 @@ public enum MeasureType { @NotBlank private String unit; + @Min(1) + private int tagValueLimit = 1; + @NotNull @Builder.Default private MetricDefinitionSettings.MeasureType type = MeasureType.DOUBLE; diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml index ce164e4265..aee8e17ea3 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml @@ -75,6 +75,9 @@ inspectit: # - no measurement values are collected via instrumentation, however the instrumentation is still performed # - no views and measures are created enabled: true + tag-guard-schedule-delay: 30s + tag-guard-database-file : ${inspectit.env.agent-dir}/${inspectit.service-name}/tag-guard-database.json + # logging settings logging: diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java index 0d35f55500..c02ac84ca1 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java @@ -21,6 +21,7 @@ import rocks.inspectit.ocelot.core.instrumentation.hook.actions.model.MetricAccessor; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.span.*; import rocks.inspectit.ocelot.core.instrumentation.hook.tags.CommonTagsToAttributesManager; +import rocks.inspectit.ocelot.core.metrics.MeasureTagValueGuard; import rocks.inspectit.ocelot.core.metrics.MeasuresAndViewsManager; import rocks.inspectit.ocelot.core.privacy.obfuscation.ObfuscationManager; import rocks.inspectit.ocelot.core.selfmonitoring.ActionScopeFactory; @@ -66,6 +67,9 @@ public class MethodHookGenerator { @Autowired private ActionScopeFactory actionScopeFactory; + @Autowired + private MeasureTagValueGuard tagValueGuard; + /** * Builds an executable method hook based on the given configuration. * @@ -207,7 +211,7 @@ private Optional buildMetricsRecorder(MethodHookConfiguration confi .map(this::buildMetricAccessor) .collect(Collectors.toList()); - MetricsRecorder recorder = new MetricsRecorder(metricAccessors, commonTagsManager, metricsManager); + MetricsRecorder recorder = new MetricsRecorder(metricAccessors, commonTagsManager, metricsManager, tagValueGuard); return Optional.of(recorder); } else { return Optional.empty(); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorder.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorder.java index b614b95db8..1384a10e34 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorder.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorder.java @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.model.MetricAccessor; +import rocks.inspectit.ocelot.core.metrics.MeasureTagValueGuard; import rocks.inspectit.ocelot.core.metrics.MeasuresAndViewsManager; import rocks.inspectit.ocelot.core.tags.CommonTagsManager; import rocks.inspectit.ocelot.core.tags.TagUtils; @@ -37,46 +38,22 @@ public class MetricsRecorder implements IHookAction { */ private MeasuresAndViewsManager metricsManager; + private MeasureTagValueGuard tagValueGuard; + @Override public void execute(ExecutionContext context) { // then iterate all metrics and enter new scope for metric collection for (MetricAccessor metricAccessor : metrics) { Object value = metricAccessor.getVariableAccessor().get(context); + // only record metrics where a value is present + // this allows to disable the recording of a metric depending on the results of action executions if (value instanceof Number) { - // only record metrics where a value is present - // this allows to disable the recording of a metric depending on the results of action executions - TagContext tagContext = getTagContext(context, metricAccessor); + TagContext tagContext = tagValueGuard.getTagContext(context, metricAccessor); metricsManager.tryRecordingMeasurement(metricAccessor.getName(), (Number) value, tagContext); } } } - private TagContext getTagContext(ExecutionContext context, MetricAccessor metricAccessor) { - InspectitContextImpl inspectitContext = context.getInspectitContext(); - - // create builder - TagContextBuilder builder = Tags.getTagger().emptyBuilder(); - - // first common tags to allow overwrite by constant or data tags - commonTagsManager.getCommonTagKeys() - .forEach(commonTagKey -> Optional.ofNullable(inspectitContext.getData(commonTagKey.getName())) - .ifPresent(value -> builder.putLocal(commonTagKey, TagUtils.createTagValue(commonTagKey.getName(), value - .toString())))); - - // then constant tags to allow overwrite by data - metricAccessor.getConstantTags() - .forEach((key, value) -> builder.putLocal(TagKey.create(key), TagUtils.createTagValue(key, value))); - - // go over data tags and match the value to the key from the contextTags (if available) - metricAccessor.getDataTagAccessors() - .forEach((key, accessor) -> Optional.ofNullable(accessor.get(context)) - .ifPresent(tagValue -> builder.putLocal(TagKey.create(key), TagUtils.createTagValue(key, tagValue - .toString())))); - - // build and return - return builder.build(); - } - @Override public String getName() { return "Metrics Recorder"; diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java new file mode 100644 index 0000000000..60d8f936f8 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java @@ -0,0 +1,217 @@ +package rocks.inspectit.ocelot.core.metrics; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Maps; +import io.opencensus.tags.TagContext; +import io.opencensus.tags.TagContextBuilder; +import io.opencensus.tags.TagKey; +import io.opencensus.tags.Tags; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.NonNull; +import lombok.Value; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; +import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction; +import rocks.inspectit.ocelot.core.instrumentation.hook.actions.model.MetricAccessor; +import rocks.inspectit.ocelot.core.tags.CommonTagsManager; +import rocks.inspectit.ocelot.core.tags.TagUtils; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.Duration; +import java.util.*; +import java.util.concurrent.Future; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +@Component +@Slf4j +public class MeasureTagValueGuard { + + @Autowired + private InspectitEnvironment env; + + /** + * Common tags manager needed for gathering common tags when recording metrics. + */ + @Autowired + private CommonTagsManager commonTagsManager; + + @Autowired + private ScheduledExecutorService executorService; + + private PersistedTagsReaderWriter fileReaderWriter; + + private volatile boolean isShuttingDown = false; + + private Map> blockedTagKeysByMeasure = Maps.newHashMap(); + + private Set latestTags = Collections.synchronizedSet(new HashSet<>()); + + private Future blockTagValuesFuture; + + @PostConstruct + protected void init() { + fileReaderWriter = new PersistedTagsReaderWriter(env.getCurrentConfig() + .getMetrics() + .getTagGuardDatabaseFile(), new ObjectMapper()); + + blockTagValuesTask.run(); + scheduleTagGuardJob(); + } + + private void scheduleTagGuardJob() { + Duration tagGuardScheduleDelay = env.getCurrentConfig().getMetrics().getTagGuardScheduleDelay(); + blockTagValuesFuture = executorService.schedule(blockTagValuesTask, tagGuardScheduleDelay.toNanos(), TimeUnit.NANOSECONDS); + } + + @PreDestroy + protected void stop() { + isShuttingDown = true; + blockTagValuesFuture.cancel(true); + } + + Runnable blockTagValuesTask = () -> { + + Set copy = latestTags; + latestTags = Collections.synchronizedSet(new HashSet<>()); + + Map>> availableTagsByMeasure = fileReaderWriter.read(); + + copy.forEach(t -> { + String measureName = t.getMeasureName(); + Map newTags = t.getTags(); + int tagValueLimit = env.getCurrentConfig() + .getMetrics() + .getDefinitions() + .get(measureName) + .getTagValueLimit(); + + Map> tagValuesByTagKey = availableTagsByMeasure.computeIfAbsent(measureName, k -> Maps.newHashMap()); + newTags.forEach((tagKey, tagValue) -> { + Set tagValues = tagValuesByTagKey.computeIfAbsent(tagKey, (x) -> new HashSet<>()); + if (tagValues.size() > tagValueLimit) { + blockedTagKeysByMeasure.computeIfAbsent(tagKey, blocked -> Maps.newHashMap()) + .putIfAbsent(tagKey, true); + } else { + tagValues.add(tagValue); + } + }); + + }); + + fileReaderWriter.write(availableTagsByMeasure); + + if (!isShuttingDown) { + scheduleTagGuardJob(); + } + + }; + + public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAccessor metricAccessor) { + Map tags = Maps.newHashMap(); + String measureName = metricAccessor.getName(); + InspectitContextImpl inspectitContext = context.getInspectitContext(); + Map blockedTageKeys = blockedTagKeysByMeasure.getOrDefault(measureName, Maps.newHashMap()); + + // first common tags to allow to overwrite by constant or data tags + commonTagsManager.getCommonTagKeys().forEach(commonTagKey -> { + if (!blockedTageKeys.containsKey(commonTagKey.getName())) { + Optional.ofNullable(inspectitContext.getData(commonTagKey.getName())) + .ifPresent(value -> tags.put(commonTagKey.getName(), TagUtils.createTagValueAsString(commonTagKey.getName(), value.toString()))); + } else { + tags.put(commonTagKey.getName(), "Bist du ne ID?"); + } + }); + + // then constant tags to allow to overwrite by data + metricAccessor.getConstantTags().forEach((key, value) -> { + if (!blockedTageKeys.containsKey(key)) { + tags.put(key, TagUtils.createTagValueAsString(key, value)); + } else { + //blocked + } + }); + + // go over data tags and match the value to the key from the contextTags (if available) + metricAccessor.getDataTagAccessors().forEach((key, accessor) -> { + if (!blockedTageKeys.containsKey(key)) { + Optional.ofNullable(accessor.get(context)) + .ifPresent(tagValue -> tags.put(key, TagUtils.createTagValueAsString(key, tagValue.toString()))); + } else { + //blocked + } + }); + + TagContextBuilder tagContextBuilder = Tags.getTagger().emptyBuilder(); + tags.forEach((key, value) -> tagContextBuilder.putLocal(TagKey.create(key), TagUtils.createTagValue(key, value))); + + // Store the new tags for this measure as simple object and delay traversing trough tagKeys to async job + latestTags.add(new TagsHolder(measureName, tags)); + + return tagContextBuilder.build(); + + } + + @Value + @EqualsAndHashCode + private static class TagsHolder { + + String measureName; + + Map tags; + + } + + @AllArgsConstructor + static class PersistedTagsReaderWriter { + + @NonNull + private String fileName; + + @NonNull + private ObjectMapper mapper; + + public Map>> read() { + if (!StringUtils.isBlank(fileName)) { + Path path = Paths.get(fileName); + if (Files.exists(path)) { + try { + byte[] content = Files.readAllBytes(path); + @SuppressWarnings("unchecked") Map>> tags = mapper.readValue(content, Map.class); + return tags; + } catch (Exception e) { + log.error("Error loading tag value database from persistence file '{}'", fileName, e); + } + } else { + log.info("No tag value database available. Assuming first Agent deployment."); + } + } + return Maps.newHashMap(); + } + + public void write(Map>> tagValues) { + if (!StringUtils.isBlank(fileName)) { + try { + Path path = Paths.get(fileName); + Files.createDirectories(path.getParent()); + String tagValuesString = mapper.writeValueAsString(tagValues); + Files.write(path, tagValuesString.getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + log.error("Error writing tag value database to file '{}'", fileName, e); + } + } + } + } + +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/tags/TagUtils.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/tags/TagUtils.java index 86d7e045a1..e98a3714d7 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/tags/TagUtils.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/tags/TagUtils.java @@ -5,6 +5,8 @@ import io.opencensus.tags.TagValue; import lombok.extern.slf4j.Slf4j; +import java.util.function.Function; + @Slf4j public final class TagUtils { @@ -49,11 +51,19 @@ private TagUtils() { * @return the created TagValue with 'v' or '<invalid>' */ public static TagValue createTagValue(String tagKey, String value) { + return resolveTageValue(tagKey, value, TagValue::create); + } + + public static String createTagValueAsString(String tagKey, String value) { + return resolveTageValue(tagKey, value, s -> s); + } + + private static T resolveTageValue(String tagKey, String value, Function creator) { if (isTagValueValid(value)) { - return TagValue.create(value); + return creator.apply(value); } printWarning(tagKey, value); - return TagValue.create(""); + return creator.apply(""); } private static boolean isTagValueValid(String value) { diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorderTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorderTest.java index 926e5eeb5d..ce1979d10a 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorderTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorderTest.java @@ -8,13 +8,12 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InOrder; -import org.mockito.Mock; -import org.mockito.Mockito; +import org.mockito.*; import org.mockito.junit.jupiter.MockitoExtension; import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; import rocks.inspectit.ocelot.core.instrumentation.hook.VariableAccessor; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.model.MetricAccessor; +import rocks.inspectit.ocelot.core.metrics.MeasureTagValueGuard; import rocks.inspectit.ocelot.core.metrics.MeasuresAndViewsManager; import rocks.inspectit.ocelot.core.tags.CommonTagsManager; @@ -37,6 +36,10 @@ public class MetricsRecorderTest { @Mock IHookAction.ExecutionContext executionContext; + @Spy + @InjectMocks + MeasureTagValueGuard tagValueGuard; + @Mock InspectitContextImpl inspectitContext; @@ -44,6 +47,8 @@ public class MetricsRecorderTest { void setupMock() { when(commonTagsManager.getCommonTagKeys()).thenReturn(Collections.emptyList()); when(executionContext.getInspectitContext()).thenReturn(inspectitContext); + + } @Nested @@ -53,9 +58,8 @@ class Execute { void verifyNullValueDataMetricIgnored() { VariableAccessor variableAccess = Mockito.mock(VariableAccessor.class); when(variableAccess.get(any())).thenReturn(null); - MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.emptyMap(), Collections - .emptyMap()); - MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager); + MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.emptyMap(), Collections.emptyMap()); + MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager, tagValueGuard); rec.execute(executionContext); @@ -78,12 +82,10 @@ void verifyInvalidDataTypeHandled() { VariableAccessor dataB = Mockito.mock(VariableAccessor.class); when(dataA.get(any())).thenReturn(100.0); when(dataB.get(any())).thenReturn("notanumber"); - MetricAccessor metricAccessorA = new MetricAccessor("my_metric1", dataA, Collections.emptyMap(), Collections - .emptyMap()); - MetricAccessor metricAccessorB = new MetricAccessor("my_metric2", dataB, Collections.emptyMap(), Collections - .emptyMap()); + MetricAccessor metricAccessorA = new MetricAccessor("my_metric1", dataA, Collections.emptyMap(), Collections.emptyMap()); + MetricAccessor metricAccessorB = new MetricAccessor("my_metric2", dataB, Collections.emptyMap(), Collections.emptyMap()); - MetricsRecorder rec = new MetricsRecorder(Arrays.asList(metricAccessorA, metricAccessorB), commonTagsManager, metricsManager); + MetricsRecorder rec = new MetricsRecorder(Arrays.asList(metricAccessorA, metricAccessorB), commonTagsManager, metricsManager, tagValueGuard); rec.execute(executionContext); @@ -110,9 +112,8 @@ void commonTagsIncluded() { VariableAccessor variableAccess = Mockito.mock(VariableAccessor.class); when(variableAccess.get(any())).thenReturn(100L); - MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.emptyMap(), Collections - .emptyMap()); - MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager); + MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.emptyMap(), Collections.emptyMap()); + MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager, tagValueGuard); rec.execute(executionContext); @@ -129,9 +130,8 @@ void constantTags() { VariableAccessor variableAccess = Mockito.mock(VariableAccessor.class); when(variableAccess.get(any())).thenReturn(100L); - MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.singletonMap("constant", "tag"), Collections - .emptyMap()); - MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager); + MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.singletonMap("constant", "tag"), Collections.emptyMap()); + MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager, tagValueGuard); rec.execute(executionContext); @@ -150,9 +150,8 @@ void dataTagsNotAvailable() { VariableAccessor variableAccess = Mockito.mock(VariableAccessor.class); when(variableAccess.get(any())).thenReturn(100L); - MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.emptyMap(), Collections - .singletonMap("data", mockAccessor)); - MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager); + MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.emptyMap(), Collections.singletonMap("data", mockAccessor)); + MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager, tagValueGuard); rec.execute(executionContext); @@ -169,9 +168,8 @@ void dataTags() { VariableAccessor variableAccess = Mockito.mock(VariableAccessor.class); when(variableAccess.get(any())).thenReturn(100L); - MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.emptyMap(), Collections - .singletonMap("data", mockAccessor)); - MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager); + MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.emptyMap(), Collections.singletonMap("data", mockAccessor)); + MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager, tagValueGuard); rec.execute(executionContext); @@ -207,20 +205,22 @@ void multipleAccessorsMixedTags() { dataTags2.put("existing2", mockAccessorC); MetricAccessor metricAccessorB = new MetricAccessor("my_metric2", dataB, Collections.singletonMap("cA", "200"), dataTags2); - MetricsRecorder rec = new MetricsRecorder(Arrays.asList(metricAccessorA, metricAccessorB), commonTagsManager, metricsManager); + MetricsRecorder rec = new MetricsRecorder(Arrays.asList(metricAccessorA, metricAccessorB), commonTagsManager, metricsManager, tagValueGuard); rec.execute(executionContext); InOrder inOrder = inOrder(metricsManager); // first recording - TagContext expected1 = Tags.getTagger().emptyBuilder() + TagContext expected1 = Tags.getTagger() + .emptyBuilder() .putLocal(TagKey.create("cA"), TagValue.create("100")) .putLocal(TagKey.create("existing"), TagValue.create("data1")) .build(); inOrder.verify(metricsManager) .tryRecordingMeasurement(eq("my_metric1"), eq((Number) 100.0d), eq(expected1)); // second recording - TagContext expected2 = Tags.getTagger().emptyBuilder() + TagContext expected2 = Tags.getTagger() + .emptyBuilder() .putLocal(TagKey.create("cA"), TagValue.create("200")) .putLocal(TagKey.create("existing1"), TagValue.create("12")) .putLocal(TagKey.create("existing2"), TagValue.create("false")) @@ -239,9 +239,8 @@ void dataOverwritesConstant() { VariableAccessor variableAccess = Mockito.mock(VariableAccessor.class); when(variableAccess.get(any())).thenReturn(100L); - MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.singletonMap("data", "constant"), Collections - .singletonMap("data", mockAccessor)); - MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager); + MetricAccessor metricAccessor = new MetricAccessor("my_metric", variableAccess, Collections.singletonMap("data", "constant"), Collections.singletonMap("data", mockAccessor)); + MetricsRecorder rec = new MetricsRecorder(Collections.singletonList(metricAccessor), commonTagsManager, metricsManager, tagValueGuard); rec.execute(executionContext); diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java new file mode 100644 index 0000000000..c6be65330b --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java @@ -0,0 +1,101 @@ +package rocks.inspectit.ocelot.core.metrics; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Maps; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import rocks.inspectit.ocelot.config.model.InspectitConfig; +import rocks.inspectit.ocelot.config.model.metrics.MetricsSettings; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Duration; +import java.time.temporal.ChronoUnit; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class MeasureTagValueGuardTest { + + @Mock + private InspectitEnvironment environment; + + @Mock + private InspectitConfig inspectitConfig; + + @Mock + private MetricsSettings metricsSettings; + + @InjectMocks + private MeasureTagValueGuard guard = new MeasureTagValueGuard(); + + private Map>> tagValues; + + private static Map>> createTagValues() { + Set tagValue = new HashSet<>(); + tagValue.add("value1"); + tagValue.add("value2"); + tagValue.add("value3"); + + Map> tagKeys2Values = Maps.newHashMap(); + tagKeys2Values.put("tagKey_1", tagValue); + + Map>> measure2TagKeys = Maps.newHashMap(); + measure2TagKeys.put("measure_1", tagKeys2Values); + + return measure2TagKeys; + } + + + + + @Nested + public class ReaderWrite { + + @Test + public void testReadWriteTagsFromDisk() { + + String tempFileName = generateTempFilePath(); + + //when(environment.getCurrentConfig()).thenReturn(inspectitConfig); + //when(inspectitConfig.getMetrics()).thenReturn(metricsSettings); + //when(metricsSettings.getTagGuardScheduleDelay()).thenReturn(Duration.of(1, ChronoUnit.MILLIS)); + //when(metricsSettings.getTagGuardDatabaseFile()).thenReturn(generateTempFilePath()); + + MeasureTagValueGuard.PersistedTagsReaderWriter readerWriter = new MeasureTagValueGuard.PersistedTagsReaderWriter(tempFileName, new ObjectMapper()); + Map>> tagValues = createTagValues(); + readerWriter.write(tagValues); + Map>> loaded = readerWriter.read(); + + //Assertions.assertThat(tagValues).isEqualTo(loaded); + assertThat(loaded).flatExtracting("measure_1") + .flatExtracting("tagKey_1") + .containsExactlyInAnyOrder("value1", "value2", "value3"); + + } + + } + + private static String generateTempFilePath() { + try { + Path tempFile = Files.createTempFile("inspectit", ""); + System.out.println(tempFile); + Files.delete(tempFile); + tempFile.toFile().deleteOnExit(); + return tempFile.toString(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} \ No newline at end of file From e66de98af69805bc586a0209b480c6bfc6fa5f89 Mon Sep 17 00:00:00 2001 From: Marius Brill Date: Tue, 9 Aug 2022 16:30:05 +0200 Subject: [PATCH 02/21] Refactor AgentHealth Mechanism, Fire AgentHealthEvent in Tagguard --- .../config/model/metrics/MetricsSettings.java | 10 +- .../model/metrics/TagGuardSettings.java | 27 +++ .../definition/MetricDefinitionSettings.java | 1 + .../ocelot/config/default/basics.yml | 7 +- .../handler/impl/LogsCommandExecutor.java | 2 +- .../http/HttpConfigurationPoller.java | 8 +- .../core/metrics/MeasureTagValueGuard.java | 29 ++-- .../selfmonitoring/AgentHealthManager.java | 127 +++----------- .../event/listener/HealthEventListener.java | 14 ++ .../LogWritingHealthEventListener.java | 21 +++ .../MetricWritingHealthEventListener.java | 20 +++ .../PollerWritingHealthEventListener.java | 16 ++ .../{ => models}/AgentHealthChangedEvent.java | 10 +- .../selfmonitoring/logs/LogHealthMonitor.java | 87 ++++++++++ .../{ => logs}/LogMetricsRecorder.java | 3 +- .../{ => logs}/LogPreloader.java | 2 +- .../handler/impl/LogsCommandExecutorTest.java | 2 +- .../InternalProcessingAppenderTest.java | 2 +- .../AgentHealthManagerTest.java | 153 ----------------- .../logs/LogHealthMonitorTest.java | 161 ++++++++++++++++++ .../{ => logs}/LogMetricsIntTest.java | 3 +- .../{ => logs}/LogMetricsRecorderTest.java | 3 +- .../{ => logs}/LogPreloaderTest.java | 2 +- 23 files changed, 421 insertions(+), 289 deletions(-) create mode 100644 inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/HealthEventListener.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListener.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListener.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java rename inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/{ => models}/AgentHealthChangedEvent.java (72%) create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java rename inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/{ => logs}/LogMetricsRecorder.java (91%) rename inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/{ => logs}/LogPreloader.java (99%) create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java rename inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/{ => logs}/LogMetricsIntTest.java (96%) rename inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/{ => logs}/LogMetricsRecorderTest.java (93%) rename inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/{ => logs}/LogPreloaderTest.java (98%) diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java index 35df26a906..dc5bc11856 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java @@ -38,15 +38,7 @@ public class MetricsSettings { */ private Duration frequency; - /** - * - */ - private Duration tagGuardScheduleDelay; - - /** - * - */ - private String tagGuardDatabaseFile; + private TagGuardSettings tagGuard; @NotNull private Map<@NotBlank String, @NotNull @Valid MetricDefinitionSettings> definitions = Collections.emptyMap(); diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java new file mode 100644 index 0000000000..e0ce32cce6 --- /dev/null +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java @@ -0,0 +1,27 @@ +package rocks.inspectit.ocelot.config.model.metrics; + +import lombok.Data; +import lombok.NoArgsConstructor; +import rocks.inspectit.ocelot.config.validation.AdditionalValidations; + +import java.time.Duration; + +@Data +@NoArgsConstructor +@AdditionalValidations +public class TagGuardSettings { + + /** + * + */ + private Duration scheduleDelay; + + /** + * + */ + private String databaseFile; + + + private String overflowReplacement; + +} diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java index 86ff1c16af..79cf0ae182 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java @@ -37,6 +37,7 @@ public enum MeasureType { private String unit; @Min(1) + @Builder.Default private int tagValueLimit = 1; @NotNull diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml index aee8e17ea3..708f1da881 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml @@ -75,8 +75,11 @@ inspectit: # - no measurement values are collected via instrumentation, however the instrumentation is still performed # - no views and measures are created enabled: true - tag-guard-schedule-delay: 30s - tag-guard-database-file : ${inspectit.env.agent-dir}/${inspectit.service-name}/tag-guard-database.json + + tag-guard: + schedule-delay: 30s + database-file : ${inspectit.env.agent-dir}/${inspectit.service-name}/tag-guard-database.json + overflow-replacement: "TAG_LIMIT_EXCEEDED" # logging settings diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/handler/impl/LogsCommandExecutor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/handler/impl/LogsCommandExecutor.java index 7fc13c4034..a9c20a760f 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/handler/impl/LogsCommandExecutor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/handler/impl/LogsCommandExecutor.java @@ -10,7 +10,7 @@ import rocks.inspectit.ocelot.commons.models.command.CommandResponse; import rocks.inspectit.ocelot.commons.models.command.impl.LogsCommand; import rocks.inspectit.ocelot.core.command.handler.CommandExecutor; -import rocks.inspectit.ocelot.core.selfmonitoring.LogPreloader; +import rocks.inspectit.ocelot.core.selfmonitoring.logs.LogPreloader; /** * Executor for executing {@link LogsCommand}s. diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java index a3d4696cd3..25bb82c452 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java @@ -4,10 +4,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; import rocks.inspectit.ocelot.config.model.InspectitConfig; import rocks.inspectit.ocelot.config.model.config.HttpConfigSettings; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; -import rocks.inspectit.ocelot.core.selfmonitoring.event.AgentHealthChangedEvent; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; import rocks.inspectit.ocelot.core.service.DynamicallyActivatableService; import java.util.concurrent.ScheduledExecutorService; @@ -83,10 +84,9 @@ public void run() { } } - @EventListener - void agentHealthChanged(AgentHealthChangedEvent event) { + public void updateAgentHealth(AgentHealth agentHealth) { if (currentState != null) { - currentState.updateAgentHealth(event.getNewHealth()); + currentState.updateAgentHealth(agentHealth); } } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java index 60d8f936f8..878d3651cc 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java @@ -14,10 +14,12 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.model.MetricAccessor; +import rocks.inspectit.ocelot.core.selfmonitoring.AgentHealthManager; import rocks.inspectit.ocelot.core.tags.CommonTagsManager; import rocks.inspectit.ocelot.core.tags.TagUtils; @@ -38,9 +40,14 @@ @Slf4j public class MeasureTagValueGuard { + private static final String tagOverFlowMessageTemplate = "Overflow for tag %s"; + @Autowired private InspectitEnvironment env; + @Autowired + private AgentHealthManager agentHealthManager; + /** * Common tags manager needed for gathering common tags when recording metrics. */ @@ -64,14 +71,15 @@ public class MeasureTagValueGuard { protected void init() { fileReaderWriter = new PersistedTagsReaderWriter(env.getCurrentConfig() .getMetrics() - .getTagGuardDatabaseFile(), new ObjectMapper()); + .getTagGuard() + .getDatabaseFile(), new ObjectMapper()); blockTagValuesTask.run(); scheduleTagGuardJob(); } private void scheduleTagGuardJob() { - Duration tagGuardScheduleDelay = env.getCurrentConfig().getMetrics().getTagGuardScheduleDelay(); + Duration tagGuardScheduleDelay = env.getCurrentConfig().getMetrics().getTagGuard().getScheduleDelay(); blockTagValuesFuture = executorService.schedule(blockTagValuesTask, tagGuardScheduleDelay.toNanos(), TimeUnit.NANOSECONDS); } @@ -83,6 +91,7 @@ protected void stop() { Runnable blockTagValuesTask = () -> { + Set copy = latestTags; latestTags = Collections.synchronizedSet(new HashSet<>()); @@ -126,12 +135,8 @@ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAcce // first common tags to allow to overwrite by constant or data tags commonTagsManager.getCommonTagKeys().forEach(commonTagKey -> { - if (!blockedTageKeys.containsKey(commonTagKey.getName())) { - Optional.ofNullable(inspectitContext.getData(commonTagKey.getName())) - .ifPresent(value -> tags.put(commonTagKey.getName(), TagUtils.createTagValueAsString(commonTagKey.getName(), value.toString()))); - } else { - tags.put(commonTagKey.getName(), "Bist du ne ID?"); - } + Optional.ofNullable(inspectitContext.getData(commonTagKey.getName())) + .ifPresent(value -> tags.put(commonTagKey.getName(), TagUtils.createTagValueAsString(commonTagKey.getName(), value.toString()))); }); // then constant tags to allow to overwrite by data @@ -139,7 +144,9 @@ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAcce if (!blockedTageKeys.containsKey(key)) { tags.put(key, TagUtils.createTagValueAsString(key, value)); } else { - //blocked + String overflowReplacement = env.getCurrentConfig().getMetrics().getTagGuard().getOverflowReplacement(); + tags.put(key, TagUtils.createTagValueAsString(key, overflowReplacement)); + agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, key)); } }); @@ -149,7 +156,9 @@ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAcce Optional.ofNullable(accessor.get(context)) .ifPresent(tagValue -> tags.put(key, TagUtils.createTagValueAsString(key, tagValue.toString()))); } else { - //blocked + String overflowReplacement = env.getCurrentConfig().getMetrics().getTagGuard().getOverflowReplacement(); + tags.put(key, TagUtils.createTagValueAsString(key, overflowReplacement)); + agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, key)); } }); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java index ec4db1373b..da5ef5d075 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java @@ -1,25 +1,18 @@ package rocks.inspectit.ocelot.core.selfmonitoring; -import ch.qos.logback.classic.spi.ILoggingEvent; -import com.google.common.annotations.VisibleForTesting; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; -import rocks.inspectit.ocelot.core.logging.logback.InternalProcessingAppender; -import rocks.inspectit.ocelot.core.selfmonitoring.event.AgentHealthChangedEvent; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; import java.time.Duration; import java.time.LocalDateTime; import java.util.Comparator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; /** * Manages the {@link AgentHealth} and publishes {@link AgentHealthChangedEvent}s when it changes. @@ -27,18 +20,10 @@ @Component @Slf4j @RequiredArgsConstructor -public class AgentHealthManager implements InternalProcessingAppender.LogEventConsumer { - - private static final String LOG_CHANGE_STATUS = "The agent status changed from {} to {}."; +public class AgentHealthManager { private final ApplicationContext ctx; - private final ScheduledExecutorService executor; - - private final InspectitEnvironment env; - - private final SelfMonitoringService selfMonitoringService; - /** * Map of {@code eventClass -> agentHealth}, whereas the {@code agentHealth} is reset whenever an event of type * {@code eventClass} occurs (see {@link #onInvalidationEvent(Object)}. @@ -54,26 +39,11 @@ public class AgentHealthManager implements InternalProcessingAppender.LogEventCo private AgentHealth lastNotifiedHealth = AgentHealth.OK; - @Override - public void onLoggingEvent(ILoggingEvent event, Class invalidator) { - if (AgentHealthManager.class.getCanonicalName().equals(event.getLoggerName())) { - // ignore own logs, which otherwise would tend to cause infinite loops - return; - } - - AgentHealth eventHealth = AgentHealth.fromLogLevel(event.getLevel()); - - if (invalidator == null) { - handleTimeoutHealth(eventHealth); - } else { - handleInvalidatableHealth(eventHealth, invalidator); - } - - triggerEventAndMetricIfHealthChanged(); - } + private final InspectitEnvironment env; - private void handleInvalidatableHealth(AgentHealth eventHealth, Class invalidator) { + public void handleInvalidatableHealth(AgentHealth eventHealth, Class invalidator, String eventMessage) { invalidatableHealth.merge(invalidator, eventHealth, AgentHealth::mostSevere); + triggerEventAndMetricIfHealthChanged(eventMessage); } private void handleTimeoutHealth(AgentHealth eventHealth) { @@ -84,6 +54,26 @@ private void handleTimeoutHealth(AgentHealth eventHealth) { } } + public void invalidateIncident(Class eventClass, String eventMessage) { + invalidatableHealth.remove(eventClass); + triggerEventAndMetricIfHealthChanged(eventMessage); + } + + private void triggerEventAndMetricIfHealthChanged(String message) { + if (getCurrentHealth() != lastNotifiedHealth) { + synchronized (this) { + AgentHealth currHealth = getCurrentHealth(); + if (currHealth != lastNotifiedHealth) { + AgentHealth lastHealth = lastNotifiedHealth; + lastNotifiedHealth = currHealth; + + AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, lastHealth, currHealth, message); + ctx.publishEvent(event); + } + } + } + } + /** * Returns the current agent health, which is the most severe out of instrumentation and general status. * @@ -105,77 +95,14 @@ public AgentHealth getCurrentHealth() { return AgentHealth.mostSevere(generalHealth, invHealth); } - @Override - public void onInvalidationEvent(Object invalidator) { - invalidatableHealth.remove(invalidator.getClass()); - triggerEventAndMetricIfHealthChanged(); - } - - @PostConstruct - @VisibleForTesting - void registerAtAppender() { - InternalProcessingAppender.register(this); - } - - @PostConstruct - @VisibleForTesting - void startHealthCheckScheduler() { - checkHealthAndSchedule(); - } - - @PostConstruct - @VisibleForTesting - void sendInitialHealthMetric() { - selfMonitoringService.recordMeasurement("health", AgentHealth.OK.ordinal()); - } - - @PreDestroy - @VisibleForTesting - void unregisterFromAppender() { - InternalProcessingAppender.unregister(this); - } - - /** - * Checks whether the current health has changed since last check and schedules another check. - * The next check will run dependent on the earliest status timeout in the future: - *
    - *
  • does not exist -> run again after validity period
  • - *
  • exists -> run until that timeout is over
  • - *
- */ - private void checkHealthAndSchedule() { - triggerEventAndMetricIfHealthChanged(); - + public Duration getNextHealthTimeoutDuration() { Duration validityPeriod = env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getValidityPeriod(); - Duration delay = generalHealthTimeouts.values() + return generalHealthTimeouts.values() .stream() .filter(d -> d.isAfter(LocalDateTime.now())) .max(Comparator.naturalOrder()) .map(d -> Duration.between(d, LocalDateTime.now())) .orElse(validityPeriod); - - executor.schedule(this::checkHealthAndSchedule, delay.toMillis(), TimeUnit.MILLISECONDS); } - private void triggerEventAndMetricIfHealthChanged() { - if (getCurrentHealth() != lastNotifiedHealth) { - synchronized (this) { - AgentHealth currHealth = getCurrentHealth(); - if (currHealth != lastNotifiedHealth) { - AgentHealth lastHealth = lastNotifiedHealth; - lastNotifiedHealth = currHealth; - if (currHealth.isMoreSevereOrEqualTo(lastHealth)) { - log.warn(LOG_CHANGE_STATUS, lastHealth, currHealth); - } else { - log.info(LOG_CHANGE_STATUS, lastHealth, currHealth); - } - - selfMonitoringService.recordMeasurement("health", currHealth.ordinal()); - - AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, lastHealth, currHealth); - ctx.publishEvent(event); - } - } - } - } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/HealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/HealthEventListener.java new file mode 100644 index 0000000000..af4f01ca5e --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/HealthEventListener.java @@ -0,0 +1,14 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; + +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import rocks.inspectit.ocelot.core.instrumentation.config.event.InstrumentationConfigurationChangedEvent; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; + +public interface HealthEventListener { + + @Async + @EventListener + void onAgentHealthEvent(AgentHealthChangedEvent event); + +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListener.java new file mode 100644 index 0000000000..1d124131b5 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListener.java @@ -0,0 +1,21 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; + +import lombok.extern.slf4j.Slf4j; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; + +@Slf4j +public class LogWritingHealthEventListener implements HealthEventListener { + + private static final String LOG_CHANGE_STATUS = "The agent status changed from {} to {}. Reason: {}"; + + @Override + public void onAgentHealthEvent(AgentHealthChangedEvent event) { + + if (event.getNewHealth().isMoreSevereOrEqualTo(event.getOldHealth())) { + log.warn(LOG_CHANGE_STATUS, event.getOldHealth(), event.getOldHealth(), event.getMessage()); + } else { + log.info(LOG_CHANGE_STATUS, event.getOldHealth(), event.getOldHealth(), event.getMessage()); + } + + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListener.java new file mode 100644 index 0000000000..466def582d --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListener.java @@ -0,0 +1,20 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; + +import org.springframework.beans.factory.annotation.Autowired; +import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; + +import java.util.HashMap; + +public class MetricWritingHealthEventListener implements HealthEventListener { + + @Autowired + private SelfMonitoringService selfMonitoringService; + + @Override + public void onAgentHealthEvent(AgentHealthChangedEvent event) { + HashMap tags = new HashMap<>(); + tags.put("message", event.getMessage()); + selfMonitoringService.recordMeasurement("health", event.getNewHealth().ordinal(), tags); + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java new file mode 100644 index 0000000000..ff481dc8cd --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java @@ -0,0 +1,16 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; + +import org.springframework.beans.factory.annotation.Autowired; +import rocks.inspectit.ocelot.core.config.propertysources.http.HttpConfigurationPoller; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; + +public class PollerWritingHealthEventListener implements HealthEventListener { + + @Autowired + HttpConfigurationPoller httpConfigurationPoller; + + @Override + public void onAgentHealthEvent(AgentHealthChangedEvent event) { + httpConfigurationPoller.updateAgentHealth(event.getNewHealth()); + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/AgentHealthChangedEvent.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java similarity index 72% rename from inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/AgentHealthChangedEvent.java rename to inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java index eb288a40c2..ba7fdd5ea3 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/AgentHealthChangedEvent.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java @@ -1,10 +1,10 @@ -package rocks.inspectit.ocelot.core.selfmonitoring.event; +package rocks.inspectit.ocelot.core.selfmonitoring.event.models; import lombok.Getter; import lombok.NonNull; import org.springframework.context.ApplicationEvent; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; -import rocks.inspectit.ocelot.core.selfmonitoring.LogPreloader; +import rocks.inspectit.ocelot.core.selfmonitoring.logs.LogPreloader; /** * Fired by {@link LogPreloader} whenever the agent health changed. @@ -23,10 +23,14 @@ public class AgentHealthChangedEvent extends ApplicationEvent { @Getter private AgentHealth newHealth; - public AgentHealthChangedEvent(Object source, @NonNull AgentHealth oldHealth, @NonNull AgentHealth newHealth) { + @Getter + private String message; + + public AgentHealthChangedEvent(Object source, @NonNull AgentHealth oldHealth, @NonNull AgentHealth newHealth, String message) { super(source); this.oldHealth = oldHealth; this.newHealth = newHealth; + this.message = message; } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java new file mode 100644 index 0000000000..c6c1801dd5 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java @@ -0,0 +1,87 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.logs; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import com.google.common.annotations.VisibleForTesting; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.logging.logback.InternalProcessingAppender; +import rocks.inspectit.ocelot.core.selfmonitoring.AgentHealthManager; +import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.time.Duration; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +@Component +@Slf4j +@RequiredArgsConstructor +public class LogHealthMonitor implements InternalProcessingAppender.LogEventConsumer { + + @Autowired + AgentHealthManager agentHealthManager; + + private final ScheduledExecutorService executor; + + private final InspectitEnvironment env; + + private final SelfMonitoringService selfMonitoringService; + + @Override + public void onLoggingEvent(ILoggingEvent event, Class invalidator) { + if (AgentHealthManager.class.getCanonicalName().equals(event.getLoggerName())) { + // ignore own logs, which otherwise would tend to cause infinite loops + return; + } + AgentHealth eventHealth = AgentHealth.fromLogLevel(event.getLevel()); + agentHealthManager.handleInvalidatableHealth(eventHealth, invalidator, "Logging health change"); //TODO We need a more speaking message here + } + + @Override + public void onInvalidationEvent(Object invalidator) { + agentHealthManager.invalidateIncident(invalidator.getClass(), "Logging health change"); //TODO We need a more speaking message here + } + + @PostConstruct + @VisibleForTesting + void registerAtAppender() { + InternalProcessingAppender.register(this); + } + + @PostConstruct + @VisibleForTesting + void startHealthCheckScheduler() { + checkHealthAndSchedule(); + } + + @PostConstruct + @VisibleForTesting + void sendInitialHealthMetric() { + selfMonitoringService.recordMeasurement("health", AgentHealth.OK.ordinal()); + } + + @PreDestroy + @VisibleForTesting + void unregisterFromAppender() { + InternalProcessingAppender.unregister(this); + } + + /** + * Checks whether the current health has changed since last check and schedules another check. + * The next check will run dependent on the earliest status timeout in the future: + *
    + *
  • does not exist -> run again after validity period
  • + *
  • exists -> run until that timeout is over
  • + *
validityPeriod + */ + private void checkHealthAndSchedule() { + Duration delay = agentHealthManager.getNextHealthTimeoutDuration(); + + executor.schedule(this::checkHealthAndSchedule, delay.toMillis(), TimeUnit.MILLISECONDS); + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/LogMetricsRecorder.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogMetricsRecorder.java similarity index 91% rename from inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/LogMetricsRecorder.java rename to inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogMetricsRecorder.java index a000c4f2e3..23a5215bc0 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/LogMetricsRecorder.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogMetricsRecorder.java @@ -1,9 +1,10 @@ -package rocks.inspectit.ocelot.core.selfmonitoring; +package rocks.inspectit.ocelot.core.selfmonitoring.logs; import ch.qos.logback.classic.spi.ILoggingEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.core.logging.logback.InternalProcessingAppender; +import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/LogPreloader.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogPreloader.java similarity index 99% rename from inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/LogPreloader.java rename to inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogPreloader.java index a26c16455f..59ecee0456 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/LogPreloader.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogPreloader.java @@ -1,4 +1,4 @@ -package rocks.inspectit.ocelot.core.selfmonitoring; +package rocks.inspectit.ocelot.core.selfmonitoring.logs; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/command/handler/impl/LogsCommandExecutorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/command/handler/impl/LogsCommandExecutorTest.java index f7e76a5989..7c5fb01c74 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/command/handler/impl/LogsCommandExecutorTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/command/handler/impl/LogsCommandExecutorTest.java @@ -18,7 +18,7 @@ import rocks.inspectit.ocelot.config.model.selfmonitoring.LogPreloadingSettings; import rocks.inspectit.ocelot.core.SpringTestBase; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; -import rocks.inspectit.ocelot.core.selfmonitoring.LogPreloader; +import rocks.inspectit.ocelot.core.selfmonitoring.logs.LogPreloader; import java.io.File; import java.io.IOException; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/logging/logback/InternalProcessingAppenderTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/logging/logback/InternalProcessingAppenderTest.java index 11cb8e6c65..7fa28dc987 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/logging/logback/InternalProcessingAppenderTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/logging/logback/InternalProcessingAppenderTest.java @@ -11,7 +11,7 @@ import org.slf4j.LoggerFactory; import rocks.inspectit.ocelot.core.instrumentation.InstrumentationManager; import rocks.inspectit.ocelot.core.instrumentation.config.event.InstrumentationConfigurationChangedEvent; -import rocks.inspectit.ocelot.core.selfmonitoring.LogMetricsRecorderTest; +import rocks.inspectit.ocelot.core.selfmonitoring.logs.LogMetricsRecorderTest; import static org.mockito.Mockito.*; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java index 1ade277b13..0c71b22ea4 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java @@ -1,158 +1,5 @@ package rocks.inspectit.ocelot.core.selfmonitoring; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.classic.spi.LoggingEvent; -import org.junit.jupiter.api.*; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.junit.jupiter.MockitoExtension; -import org.slf4j.LoggerFactory; -import org.springframework.context.ApplicationContext; -import rocks.inspectit.ocelot.commons.models.health.AgentHealth; -import rocks.inspectit.ocelot.config.model.InspectitConfig; -import rocks.inspectit.ocelot.config.model.selfmonitoring.AgentHealthSettings; -import rocks.inspectit.ocelot.config.model.selfmonitoring.SelfMonitoringSettings; -import rocks.inspectit.ocelot.core.config.InspectitEnvironment; -import rocks.inspectit.ocelot.core.instrumentation.config.event.InstrumentationConfigurationChangedEvent; -import rocks.inspectit.ocelot.core.selfmonitoring.event.AgentHealthChangedEvent; - -import java.time.Duration; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; -import static org.mockito.Mockito.*; - -/** - * Tests {@link AgentHealthManager} - */ -@ExtendWith(MockitoExtension.class) public class AgentHealthManagerTest { - private static final long VALIDITY_PERIOD_MILLIS = 500; - - private static InspectitConfig config; - - private ScheduledExecutorService executorService; - - private InspectitEnvironment environment; - - private ApplicationContext context; - - private AgentHealthManager healthManager; - - @BeforeAll - static void createInspectitConfig() { - config = new InspectitConfig(); - AgentHealthSettings agentHealth = new AgentHealthSettings(); - agentHealth.setValidityPeriod(Duration.ofMillis(VALIDITY_PERIOD_MILLIS)); - SelfMonitoringSettings selfMonitoring = new SelfMonitoringSettings(); - selfMonitoring.setAgentHealth(agentHealth); - config.setSelfMonitoring(selfMonitoring); - } - - @BeforeEach - void setupStatusManager() { - executorService = new ScheduledThreadPoolExecutor(1); - - environment = mock(InspectitEnvironment.class); - when(environment.getCurrentConfig()).thenReturn(config); - - context = mock(ApplicationContext.class); - - healthManager = new AgentHealthManager(context, executorService, environment, mock(SelfMonitoringService.class)); - healthManager.startHealthCheckScheduler(); - } - - @AfterEach - void shutdownExecutorService() { - executorService.shutdown(); - } - - private ILoggingEvent createLoggingEvent(Level level) { - return new LoggingEvent("com.dummy.Method", (Logger) LoggerFactory.getLogger(AgentHealthManagerTest.class), level, "Dummy Info", new Throwable(), new String[]{}); - } - - private void verifyExactlyOneEventWasPublished(AgentHealth status) { - ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(AgentHealthChangedEvent.class); - verify(context).publishEvent(statusCaptor.capture()); - assertThat(statusCaptor.getValue().getNewHealth()).isEqualTo(status); - verifyNoMoreInteractions(context); - } - - @Nested - class OnLogEvent { - - @Test - void logInstrumentationEvents() { - assertThat(healthManager.getCurrentHealth()).withFailMessage("Initial status shall be OK") - .isEqualTo(AgentHealth.OK); - - healthManager.onLoggingEvent(createLoggingEvent(Level.INFO), InstrumentationConfigurationChangedEvent.class); - healthManager.onLoggingEvent(createLoggingEvent(Level.DEBUG), InstrumentationConfigurationChangedEvent.class); - assertThat(healthManager.getCurrentHealth()).withFailMessage("INFO and DEBUG messages shall not change the status") - .isEqualTo(AgentHealth.OK); - - verifyNoInteractions(context); - - healthManager.onLoggingEvent(createLoggingEvent(Level.WARN), InstrumentationConfigurationChangedEvent.class); - assertThat(healthManager.getCurrentHealth()).withFailMessage("Status after WARN message shall be WARNING") - .isEqualTo(AgentHealth.WARNING); - verifyExactlyOneEventWasPublished(AgentHealth.WARNING); - - clearInvocations(context); - - healthManager.onLoggingEvent(createLoggingEvent(Level.ERROR), InstrumentationConfigurationChangedEvent.class); - assertThat(healthManager.getCurrentHealth()).withFailMessage("Status after ERROR message shall be ERROR") - .isEqualTo(AgentHealth.ERROR); - verifyExactlyOneEventWasPublished(AgentHealth.ERROR); - - clearInvocations(context); - - healthManager.onLoggingEvent(createLoggingEvent(Level.INFO), InstrumentationConfigurationChangedEvent.class); - assertThat(healthManager.getCurrentHealth()).withFailMessage("INFO messages shall not change the status") - .isEqualTo(AgentHealth.ERROR); - verifyNoMoreInteractions(context); - - clearInvocations(context); - - healthManager.onInvalidationEvent(new InstrumentationConfigurationChangedEvent(this, null, null)); - assertThat(healthManager.getCurrentHealth()).withFailMessage("When new instrumentation was triggered, status shall be OK") - .isEqualTo(AgentHealth.OK); - verifyExactlyOneEventWasPublished(AgentHealth.OK); - } - - @Test - void logGeneralEvents() { - assertThat(healthManager.getCurrentHealth()).withFailMessage("Initial status shall be OK") - .isEqualTo(AgentHealth.OK); - - healthManager.onLoggingEvent(createLoggingEvent(Level.INFO), null); - healthManager.onLoggingEvent(createLoggingEvent(Level.DEBUG), null); - assertThat(healthManager.getCurrentHealth()).withFailMessage("INFO and DEBUG messages shall not change the status") - .isEqualTo(AgentHealth.OK); - - verifyNoInteractions(context); - - healthManager.onLoggingEvent(createLoggingEvent(Level.ERROR), null); - assertThat(healthManager.getCurrentHealth()).withFailMessage("Status after ERROR message shall be ERROR") - .isEqualTo(AgentHealth.ERROR); - verifyExactlyOneEventWasPublished(AgentHealth.ERROR); - - clearInvocations(context); - - await().atMost(VALIDITY_PERIOD_MILLIS * 2, TimeUnit.MILLISECONDS) - .untilAsserted(() -> assertThat(healthManager.getCurrentHealth()).withFailMessage("ERROR status should jump back to OK after timeout") - .isEqualTo(AgentHealth.OK)); - - await().atMost(VALIDITY_PERIOD_MILLIS * 2, TimeUnit.MILLISECONDS) - .untilAsserted(() -> verifyExactlyOneEventWasPublished(AgentHealth.OK)); - } - - } - } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java new file mode 100644 index 0000000000..a46672b960 --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java @@ -0,0 +1,161 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.logs; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.classic.spi.LoggingEvent; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.junit.jupiter.MockitoExtension; +import org.slf4j.LoggerFactory; +import org.springframework.context.ApplicationContext; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.config.model.InspectitConfig; +import rocks.inspectit.ocelot.config.model.selfmonitoring.AgentHealthSettings; +import rocks.inspectit.ocelot.config.model.selfmonitoring.SelfMonitoringSettings; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.instrumentation.config.event.InstrumentationConfigurationChangedEvent; +import rocks.inspectit.ocelot.core.selfmonitoring.AgentHealthManager; +import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; + +import java.time.Duration; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; +import static org.mockito.Mockito.*; + +/** + * Tests {@link AgentHealthManager} + */ +@ExtendWith(MockitoExtension.class) +public class LogHealthMonitorTest { + + private static final long VALIDITY_PERIOD_MILLIS = 500; + + private static InspectitConfig config; + + private ScheduledExecutorService executorService; + + private InspectitEnvironment environment; + + private ApplicationContext context; + + private LogHealthMonitor healthMonitor; + + @BeforeAll + static void createInspectitConfig() { + config = new InspectitConfig(); + AgentHealthSettings agentHealth = new AgentHealthSettings(); + agentHealth.setValidityPeriod(Duration.ofMillis(VALIDITY_PERIOD_MILLIS)); + SelfMonitoringSettings selfMonitoring = new SelfMonitoringSettings(); + selfMonitoring.setAgentHealth(agentHealth); + config.setSelfMonitoring(selfMonitoring); + } + + @BeforeEach + void setupStatusManager() { + executorService = new ScheduledThreadPoolExecutor(1); + + environment = mock(InspectitEnvironment.class); + when(environment.getCurrentConfig()).thenReturn(config); + + context = mock(ApplicationContext.class); + + healthMonitor = new LogHealthMonitor(context, executorService, environment, mock(SelfMonitoringService.class)); + healthMonitor.startHealthCheckScheduler(); + } + + @AfterEach + void shutdownExecutorService() { + executorService.shutdown(); + } + + private ILoggingEvent createLoggingEvent(Level level) { + return new LoggingEvent("com.dummy.Method", (Logger) LoggerFactory.getLogger(LogHealthMonitor.class), level, "Dummy Info", new Throwable(), new String[]{}); + } + + private void verifyExactlyOneEventWasPublished(AgentHealth status) { + ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(AgentHealthChangedEvent.class); + verify(context).publishEvent(statusCaptor.capture()); + assertThat(statusCaptor.getValue().getNewHealth()).isEqualTo(status); + verifyNoMoreInteractions(context); + } + + @Nested + class OnLogEvent { + + @Test + void logInstrumentationEvents() { + Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("Initial status shall be OK") + .isEqualTo(AgentHealth.OK); + + healthMonitor.onLoggingEvent(createLoggingEvent(Level.INFO), InstrumentationConfigurationChangedEvent.class); + healthMonitor.onLoggingEvent(createLoggingEvent(Level.DEBUG), InstrumentationConfigurationChangedEvent.class); + Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("INFO and DEBUG messages shall not change the status") + .isEqualTo(AgentHealth.OK); + + verifyNoInteractions(context); + + healthMonitor.onLoggingEvent(createLoggingEvent(Level.WARN), InstrumentationConfigurationChangedEvent.class); + Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("Status after WARN message shall be WARNING") + .isEqualTo(AgentHealth.WARNING); + verifyExactlyOneEventWasPublished(AgentHealth.WARNING); + + clearInvocations(context); + + healthMonitor.onLoggingEvent(createLoggingEvent(Level.ERROR), InstrumentationConfigurationChangedEvent.class); + Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("Status after ERROR message shall be ERROR") + .isEqualTo(AgentHealth.ERROR); + verifyExactlyOneEventWasPublished(AgentHealth.ERROR); + + clearInvocations(context); + + healthMonitor.onLoggingEvent(createLoggingEvent(Level.INFO), InstrumentationConfigurationChangedEvent.class); + Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("INFO messages shall not change the status") + .isEqualTo(AgentHealth.ERROR); + verifyNoMoreInteractions(context); + + clearInvocations(context); + + healthMonitor.onInvalidationEvent(new InstrumentationConfigurationChangedEvent(this, null, null)); + Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("When new instrumentation was triggered, status shall be OK") + .isEqualTo(AgentHealth.OK); + verifyExactlyOneEventWasPublished(AgentHealth.OK); + } + + @Test + void logGeneralEvents() { + Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("Initial status shall be OK") + .isEqualTo(AgentHealth.OK); + + healthMonitor.onLoggingEvent(createLoggingEvent(Level.INFO), null); + healthMonitor.onLoggingEvent(createLoggingEvent(Level.DEBUG), null); + Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("INFO and DEBUG messages shall not change the status") + .isEqualTo(AgentHealth.OK); + + verifyNoInteractions(context); + + healthMonitor.onLoggingEvent(createLoggingEvent(Level.ERROR), null); + Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("Status after ERROR message shall be ERROR") + .isEqualTo(AgentHealth.ERROR); + verifyExactlyOneEventWasPublished(AgentHealth.ERROR); + + clearInvocations(context); + + await().atMost(VALIDITY_PERIOD_MILLIS * 2, TimeUnit.MILLISECONDS) + .untilAsserted(() -> Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("ERROR status should jump back to OK after timeout") + .isEqualTo(AgentHealth.OK)); + + await().atMost(VALIDITY_PERIOD_MILLIS * 2, TimeUnit.MILLISECONDS) + .untilAsserted(() -> verifyExactlyOneEventWasPublished(AgentHealth.OK)); + } + + } + +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/LogMetricsIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogMetricsIntTest.java similarity index 96% rename from inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/LogMetricsIntTest.java rename to inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogMetricsIntTest.java index 676454eece..1bb25069cb 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/LogMetricsIntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogMetricsIntTest.java @@ -1,4 +1,4 @@ -package rocks.inspectit.ocelot.core.selfmonitoring; +package rocks.inspectit.ocelot.core.selfmonitoring.logs; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.ILoggingEvent; @@ -12,6 +12,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import rocks.inspectit.ocelot.core.logging.logback.InternalProcessingAppender; +import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/LogMetricsRecorderTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogMetricsRecorderTest.java similarity index 93% rename from inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/LogMetricsRecorderTest.java rename to inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogMetricsRecorderTest.java index cd09e988c1..07840e491d 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/LogMetricsRecorderTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogMetricsRecorderTest.java @@ -1,4 +1,4 @@ -package rocks.inspectit.ocelot.core.selfmonitoring; +package rocks.inspectit.ocelot.core.selfmonitoring.logs; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.spi.ILoggingEvent; @@ -10,6 +10,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.LoggerFactory; +import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/LogPreloaderTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogPreloaderTest.java similarity index 98% rename from inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/LogPreloaderTest.java rename to inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogPreloaderTest.java index 14d6348ac0..c9974b8c8c 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/LogPreloaderTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogPreloaderTest.java @@ -1,4 +1,4 @@ -package rocks.inspectit.ocelot.core.selfmonitoring; +package rocks.inspectit.ocelot.core.selfmonitoring.logs; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; From 9c65a12dd2d0a857e95ff4ec232f4062827dd44d Mon Sep 17 00:00:00 2001 From: Dimi-Ma Date: Fri, 20 Jan 2023 10:42:08 +0100 Subject: [PATCH 03/21] rebased to main --- .circleci/config.yml | 2 +- .github/workflows/agent_test.yml | 7 +- .../workflows/configurationserver_test.yml | 5 +- CONTRIBUTING.md | 6 + build.gradle | 4 - codequality/idea/code_style.xml | 10 +- .../build.gradle | 5 +- .../.eslintrc | 12 +- .../.gitignore | 9 +- .../.yarnrc.yml | 1 + .../README.md | 28 +- .../next.config.js | 4 +- .../package-lock.json | 20528 ---------------- .../package.json | 81 +- .../MethodConfigurationEditor.js | 2 +- .../editor/visual-editor/YamlParser.js | 2 +- .../src/components/layout/Menubar.js | 17 +- .../alerting/rules/editor/VariableView.js | 1 - .../views/configuration/ConfigurationView.js | 35 +- .../views/configuration/FileToolbar.js | 20 +- .../views/configuration/FileTree.js | 161 +- .../configuration/dialogs/CreateDialog.js | 2 +- .../configuration/dialogs/UploadDialog.js | 194 + .../views/dialogs/DownloadDialogue.js | 25 +- .../views/dialogs/ServiceStateDialog.js | 83 + .../views/mappings/ContentTypeMapper.js | 9 +- .../components/views/status/StatusTable.js | 165 +- .../src/components/views/status/StatusView.js | 115 +- .../dialogs/AgentHealthStateDialogue.js | 156 + .../src/data/constants.js | 6 + .../functions/export-selection.function.js | 28 + .../src/redux/ducks/configuration/actions.js | 41 +- .../src/redux/ducks/configuration/reducers.js | 7 + .../redux/ducks/configuration/selectors.js | 13 +- .../src/redux/ducks/configuration/types.js | 2 + .../src/redux/ducks/initial-states.js | 2 + .../src/redux/middlewares/logger.js | 34 +- .../src/redux/utils/createReducer.js | 10 +- .../yarn.lock | 11803 ++++----- .../build.gradle | 12 +- .../AgentCommandManager.java | 6 +- .../impl/EnvironmentCommandHandler.java | 87 + .../agentstatus/AgentMetaInformation.java | 11 + .../ocelot/agentstatus/AgentStatus.java | 4 +- .../agentstatus/AgentStatusManager.java | 23 +- .../ocelot/rest/agent/AgentController.java | 18 + .../ocelot/rest/agent/AgentService.java | 144 + .../rest/command/AgentCommandController.java | 7 + .../HighlightRulesMapController.java | 10 +- .../AgentCommandManagerTest.java | 7 +- .../impl/EnvironmentCommandHandlerTest.java | 75 + .../rest/agent/AgentControllerIntTest.java | 78 +- .../ocelot/rest/agent/AgentServiceTest.java | 134 + .../HighlightRulesMapControllerIntTest.java | 22 +- inspectit-ocelot-agent/build.gradle | 5 +- .../inspectit/ocelot/agent/AgentMain.java | 30 +- inspectit-ocelot-bootstrap/build.gradle | 4 +- .../inspectit/ocelot/bootstrap/IAgent.java | 1 + inspectit-ocelot-config/build.gradle | 11 +- .../commons/models/command/Command.java | 4 +- .../models/command/CommandResponse.java | 2 + .../command/impl/EnvironmentCommand.java | 50 + .../models/health/AgentHealthIncident.java | 32 + .../models/health/AgentHealthState.java | 23 + .../ocelot/config/model/InspectitConfig.java | 2 +- .../model/exporters/CompressionMethod.java | 13 + .../metrics/OtlpMetricsExporterSettings.java | 25 + .../trace/OtlpTraceExporterSettings.java | 20 + .../instrumentation/InternalSettings.java | 9 +- .../rules/InstrumentationRuleSettings.java | 10 + .../definition/MetricDefinitionSettings.java | 1 + .../selfmonitoring/ActionTracingMode.java | 27 + .../selfmonitoring/AgentHealthSettings.java | 12 + .../SelfMonitoringSettings.java | 4 + .../ocelot/config/default/exporters.yml | 36 +- .../default/instrumentation/ignores.yml | 4 + .../rules/_shared/capture-timings.yml | 3 + .../rules/_shared/service-graph.yml | 10 +- .../instrumentation/rules/_shared/tracing.yml | 4 +- .../instrumentation/rules/db/jdbc/_shared.yml | 3 + .../instrumentation/rules/db/jdbc/metrics.yml | 4 + .../rules/db/jdbc/service-graph.yml | 1 + .../instrumentation/rules/db/jdbc/tracing.yml | 4 + .../rules/http/_shared/http-metrics.yml | 5 + .../_shared/http-path-parametrization.yml | 2 + .../rules/http/_shared/http-tracing.yml | 4 + .../rules/http/apache-client/_shared.yml | 2 + .../rules/http/apache-client/http-metric.yml | 1 + .../rules/http/apache-client/propagation.yml | 1 + .../http/apache-client/service-graph.yml | 2 + .../rules/http/apache-client/tracing.yml | 1 + .../rules/http/httpurlconnection/_shared.yml | 6 + .../http/httpurlconnection/http-metric.yml | 1 + .../http/httpurlconnection/propagation.yml | 2 + .../http/httpurlconnection/service-graph.yml | 2 + .../rules/http/httpurlconnection/tracing.yml | 2 + .../rules/http/servlet-api/_shared.yml | 2 + .../rules/http/servlet-api/http-metric.yml | 1 + .../rules/http/servlet-api/propagation.yml | 3 + .../rules/http/servlet-api/service-graph.yml | 2 + .../rules/http/servlet-api/tracing.yml | 1 + .../instrumentation/rules/method-metric.yml | 1 + .../instrumentation/rules/method-tracing.yml | 1 + .../ocelot/config/default/self-monitoring.yml | 9 + .../InspectIT Agent/tag-guard-database.json | 1 + inspectit-ocelot-core/build.gradle | 27 +- .../java/com/mindprod/jarcheck/JarCheck.java | 222 + .../inspectit/ocelot/core/AgentImpl.java | 8 +- .../rocks/inspectit/ocelot/core/Test.java | 2 - .../core/command/HttpCommandFetcher.java | 2 +- .../impl/EnvironmentCommandExecutor.java | 55 + .../http/HttpConfigurationPoller.java | 5 +- .../http/HttpPropertySourceState.java | 21 +- .../core/exporter/InfluxExporterService.java | 2 + .../exporter/OtlpMetricsExporterService.java | 34 +- .../exporter/OtlpTraceExporterService.java | 22 +- .../InstrumentationManager.java | 7 +- .../InstrumentationTriggerer.java | 16 +- .../TypeDescriptionWithClassLoader.java | 69 + .../actions/bound/BoundGenericAction.java | 19 +- .../bound/ConstantOnlyBoundGenericAction.java | 2 +- .../bound/DynamicBoundGenericAction.java | 2 +- .../template/VoidGenericActionTemplate.java | 2 +- .../InstrumentationConfigurationResolver.java | 97 +- .../config/InstrumentationRuleResolver.java | 96 +- .../MethodHookConfigurationResolver.java | 42 +- .../config/RuleDependencyTreePrinter.java | 17 +- .../config/callsorting/CallDependencies.java | 2 +- .../callsorting/GenericActionCallSorter.java | 6 +- .../config/model/ActionCallConfig.java | 12 +- .../ClassInstrumentationConfiguration.java | 30 +- .../config/model/InstrumentationRule.java | 10 + .../config/model/MethodHookConfiguration.java | 14 + .../event/ClassInstrumentedEvent.java | 4 +- .../event/TransformerShutdownEvent.java | 7 +- .../hook/ActionCallGenerator.java | 33 +- .../instrumentation/hook/HookManager.java | 116 +- .../core/instrumentation/hook/MethodHook.java | 97 +- .../hook/MethodHookGenerator.java | 48 +- .../hook/actions/IHookAction.java | 5 + .../hook/actions/TracingHookAction.java | 129 + .../injection/JigsawModuleInstrumenter.java | 103 +- .../special/CallableContextAttachSensor.java | 9 +- .../special/ClassLoaderDelegation.java | 111 +- .../ExecutorContextPropagationSensor.java | 9 +- .../special/RunnableContextAttachSensor.java | 9 +- ...duledExecutorContextPropagationSensor.java | 9 +- .../special/SpecialSensor.java | 32 +- .../ThreadStartContextPropagationSensor.java | 9 +- .../Log4J2TraceIdAutoInjector.java | 9 +- .../Log4JTraceIdAutoInjector.java | 9 +- .../AbstractClassTransformer.java} | 220 +- .../transformer/AsyncClassTransformer.java | 52 + .../transformer/ClassTransformer.java | 37 + .../ClassTransformerProxyGenerator.java | 110 + .../transformer/SyncClassTransformer.java | 127 + .../core/metrics/MeasureTagValueGuard.java | 7 +- .../system/ProcessorMetricsRecorder.java | 2 +- .../OpenTelemetryControllerImpl.java | 31 +- .../selfmonitoring/AgentHealthManager.java | 100 +- .../LogWritingHealthEventListener.java | 8 +- .../MetricWritingHealthEventListener.java | 15 + .../PollerWritingHealthEventListener.java | 18 +- .../event/models/AgentHealthChangedEvent.java | 8 + .../selfmonitoring/logs/LogHealthMonitor.java | 38 +- ...DynamicallyActivatableServiceObserver.java | 44 + .../DynamicallyActivatableService.java | 7 + .../ocelot/core/utils/RingBuffer.java | 45 + .../impl/EnvironmentCommandExecutorTest.java | 118 + .../http/HttpPropertySourceStateTest.java | 2 +- .../ExporterServiceIntegrationTestBase.java | 17 +- .../OtlpMetricsExporterServiceIntTest.java | 105 +- .../OtlpTraceExporterServiceIntTest.java | 39 +- .../InstrumentationTriggererIntTest.java | 1 + ...trumentationConfigurationResolverTest.java | 95 +- .../InstrumentationRuleResolverTest.java | 118 +- .../MethodHookConfigurationResolverTest.java | 34 +- .../config/RuleDependencyTreePrinterTest.java | 10 +- .../GenericActionCallSorterTest.java | 4 +- .../instrumentation/hook/HookManagerTest.java | 77 + .../hook/MethodHookGeneratorTest.java | 18 +- .../instrumentation/hook/MethodHookTest.java | 11 +- .../AsyncClassTransformerTest.java | 78 +- .../ClassTransformerProxyGeneratorTest.java | 136 + .../transformer/SyncClassTransformerTest.java | 109 + .../OpenTelemetryControllerImplIntTest.java | 2 - .../AgentHealthManagerTest.java | 160 +- .../logs/LogHealthMonitorTest.java | 1 + ...micallyActivatableServiceObserverTest.java | 66 + .../src/test/resources/otel-config.yaml | 5 + .../docs/assets/action-tracing.png | Bin 0 -> 108903 bytes .../docs/assets/config-btn.png | Bin 0 -> 565 bytes .../docs/assets/download-archive-btn.png | Bin 0 -> 498 bytes .../docs/assets/logs-btn.png | Bin 0 -> 223 bytes .../docs/assets/service-states-btn.png | Bin 0 -> 331 bytes .../docs/assets/status-table-view-ui.png | Bin 0 -> 88044 bytes .../docs/breaking-changes/breaking-changes.md | 2 +- .../docs/config-server/status-table-view.md | 19 + .../docs/instrumentation/process.md | 20 +- .../docs/metrics/metric-exporters.md | 14 +- .../docs/tracing/self-monitoring.md | 48 + .../docs/tracing/trace-exporters.md | 17 +- .../website/README.md | 6 + .../website/pages/en/versions.js | 6 +- .../website/sidebars.json | 6 +- .../breaking-changes/breaking-changes.md | 4 +- .../configuration/configuration-sources.md | 97 + .../open-census-configuration.md | 35 + .../open-telemetry-configuration.md | 37 + .../getting-started/installation.md | 157 + .../getting-started/quick-start.md | 22 + .../configuration/configuration-sources.md | 97 + .../open-census-configuration.md | 35 + .../open-telemetry-configuration.md | 37 + .../getting-started/installation.md | 157 + .../getting-started/quick-start.md | 22 + .../breaking-changes/breaking-changes.md | 2 +- .../configuration/configuration-sources.md | 97 + .../open-census-configuration.md | 35 + .../open-telemetry-configuration.md | 37 + .../getting-started/installation.md | 157 + .../getting-started/quick-start.md | 22 + .../version-2.0.3/tracing/trace-exporters.md | 99 + .../configuration/configuration-sources.md | 97 + .../open-census-configuration.md | 35 + .../open-telemetry-configuration.md | 37 + .../getting-started/installation.md | 157 + .../getting-started/quick-start.md | 22 + .../version-2.1.0/tracing/self-monitoring.md | 49 + .../configuration/configuration-sources.md | 97 + .../open-census-configuration.md | 35 + .../open-telemetry-configuration.md | 37 + .../getting-started/installation.md | 157 + .../getting-started/quick-start.md | 22 + .../config-server/status-table-view.md | 20 + .../configuration/configuration-sources.md | 97 + .../open-census-configuration.md | 35 + .../open-telemetry-configuration.md | 37 + .../getting-started/installation.md | 157 + .../getting-started/quick-start.md | 22 + .../version-2.2.0/instrumentation/process.md | 65 + .../version-2.2.0/metrics/metric-exporters.md | 101 + .../version-2.2.0/tracing/trace-exporters.md | 102 + .../version-2.1.0-sidebars.json | 63 + .../version-2.2.0-sidebars.json | 64 + .../website/versions.json | 6 + inspectit-ocelot-sdk/build.gradle | 4 +- 247 files changed, 12833 insertions(+), 28317 deletions(-) create mode 100644 components/inspectit-ocelot-configurationserver-ui/.yarnrc.yml delete mode 100644 components/inspectit-ocelot-configurationserver-ui/package-lock.json create mode 100644 components/inspectit-ocelot-configurationserver-ui/src/components/views/configuration/dialogs/UploadDialog.js create mode 100644 components/inspectit-ocelot-configurationserver-ui/src/components/views/dialogs/ServiceStateDialog.js create mode 100644 components/inspectit-ocelot-configurationserver-ui/src/components/views/status/dialogs/AgentHealthStateDialogue.js create mode 100644 components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentcommunication/handlers/impl/EnvironmentCommandHandler.java create mode 100644 components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/agent/AgentService.java create mode 100644 components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/agentcommunication/handlers/impl/EnvironmentCommandHandlerTest.java create mode 100644 components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/agent/AgentServiceTest.java create mode 100644 inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/impl/EnvironmentCommand.java create mode 100644 inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthIncident.java create mode 100644 inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthState.java create mode 100644 inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/CompressionMethod.java create mode 100644 inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/ActionTracingMode.java create mode 100644 inspectit-ocelot-core/${inspectit.env.agent-dir}/InspectIT Agent/tag-guard-database.json create mode 100644 inspectit-ocelot-core/src/main/java/com/mindprod/jarcheck/JarCheck.java delete mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/Test.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/handler/impl/EnvironmentCommandExecutor.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/TypeDescriptionWithClassLoader.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/TracingHookAction.java rename inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/{AsyncClassTransformer.java => transformer/AbstractClassTransformer.java} (60%) create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/AsyncClassTransformer.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformer.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformerProxyGenerator.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/SyncClassTransformer.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/service/DynamicallyActivatableServiceObserver.java create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/RingBuffer.java create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/command/handler/impl/EnvironmentCommandExecutorTest.java rename inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/{ => transformer}/AsyncClassTransformerTest.java (86%) create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformerProxyGeneratorTest.java create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/SyncClassTransformerTest.java create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/service/DynamicallyActivatableServiceObserverTest.java create mode 100644 inspectit-ocelot-documentation/docs/assets/action-tracing.png create mode 100644 inspectit-ocelot-documentation/docs/assets/config-btn.png create mode 100644 inspectit-ocelot-documentation/docs/assets/download-archive-btn.png create mode 100644 inspectit-ocelot-documentation/docs/assets/logs-btn.png create mode 100644 inspectit-ocelot-documentation/docs/assets/service-states-btn.png create mode 100644 inspectit-ocelot-documentation/docs/assets/status-table-view-ui.png create mode 100644 inspectit-ocelot-documentation/docs/config-server/status-table-view.md create mode 100644 inspectit-ocelot-documentation/docs/tracing/self-monitoring.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/configuration-sources.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/open-census-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/open-telemetry-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/getting-started/installation.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/getting-started/quick-start.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/configuration-sources.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/open-census-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/open-telemetry-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/getting-started/installation.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/getting-started/quick-start.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/configuration-sources.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/open-census-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/open-telemetry-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/getting-started/installation.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/getting-started/quick-start.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/tracing/trace-exporters.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/configuration-sources.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/open-census-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/open-telemetry-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/getting-started/installation.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/getting-started/quick-start.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/tracing/self-monitoring.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/configuration-sources.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/open-census-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/open-telemetry-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/getting-started/installation.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/getting-started/quick-start.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/config-server/status-table-view.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/configuration-sources.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/open-census-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/open-telemetry-configuration.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/getting-started/installation.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/getting-started/quick-start.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/instrumentation/process.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/metrics/metric-exporters.md create mode 100644 inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/tracing/trace-exporters.md create mode 100644 inspectit-ocelot-documentation/website/versioned_sidebars/version-2.1.0-sidebars.json create mode 100644 inspectit-ocelot-documentation/website/versioned_sidebars/version-2.2.0-sidebars.json diff --git a/.circleci/config.yml b/.circleci/config.yml index 16d9b81809..4da1bb3952 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -104,7 +104,7 @@ jobs: command: | VERSION=${CIRCLE_TAG} BODY=$(cat ~/inspectit/changelog/release_body.md) - ghr -t ${GITHUB_TOKEN} -u NTTechnicalUser -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -n "Version ${CIRCLE_TAG}" -b "${BODY}" ${VERSION} ~/inspectit/artifacts/ + ghr -t ${GITHUB_TOKEN} -u inspectIT -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -n "Version ${CIRCLE_TAG}" -b "${BODY}" ${VERSION} ~/inspectit/artifacts/ # Publish docker images publish_docker_images: diff --git a/.github/workflows/agent_test.yml b/.github/workflows/agent_test.yml index 22cabe5ff2..169b96ec14 100644 --- a/.github/workflows/agent_test.yml +++ b/.github/workflows/agent_test.yml @@ -5,12 +5,15 @@ on: branches: - master pull_request: - branches: - - master paths-ignore: - 'components/**' - 'inspectit-ocelot-documentation/**' - 'resources/**' + - 'codequality/**' + - '**.md' + - '**.txt' + - '.github/**' + - '.circleci/**' jobs: pr-check: diff --git a/.github/workflows/configurationserver_test.yml b/.github/workflows/configurationserver_test.yml index 65cc812e5d..597cb68657 100644 --- a/.github/workflows/configurationserver_test.yml +++ b/.github/workflows/configurationserver_test.yml @@ -23,6 +23,9 @@ jobs: - name: assemble run: ../../gradlew assemble working-directory: ${{env.working-directory}} + - name: Build jar with frontend + working-directory: ${{env.working-directory}} + run: ../../gradlew bootJarWithFrontend - name: test run: ../../gradlew test - working-directory: ${{env.working-directory}} \ No newline at end of file + working-directory: ${{env.working-directory}} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 45ad4dbfed..3972dbf96e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,6 +13,12 @@ When using the Save Actions Plugin, you have to copy the *saveactions_settings.x Furthermore, please import the `/codequality/idea/code_style.xml` file into the project's settings of IntelliJ in order to match the code style we're using. +### Frontend Developing + +If developing JavaScript in IntelliJ Ultimate, check that Settings.Languages & Frameworks.JavaScript.Code Quality Tools.ESLint is activated for correct linting. + +In the same location, check the checkbox for running `eslint --fix on save`. + ## Process The first step in order to contribute is to fork this repository into your account. diff --git a/build.gradle b/build.gradle index 981ec7bb36..35f4a1d7d6 100644 --- a/build.gradle +++ b/build.gradle @@ -14,10 +14,6 @@ allprojects { repositories { mavenCentral() - maven { - name 'Nexus@NT' - url "https://repository.novatec-gmbh.de/content/repositories/3rd_party_libs/" - } } apply plugin: 'java' diff --git a/codequality/idea/code_style.xml b/codequality/idea/code_style.xml index 023c83ccd9..1afbf08cd4 100644 --- a/codequality/idea/code_style.xml +++ b/codequality/idea/code_style.xml @@ -1,5 +1,6 @@ \ No newline at end of file + + + + + diff --git a/components/inspectit-ocelot-configdocsgenerator/build.gradle b/components/inspectit-ocelot-configdocsgenerator/build.gradle index 11cf3b1550..4f35629d3d 100644 --- a/components/inspectit-ocelot-configdocsgenerator/build.gradle +++ b/components/inspectit-ocelot-configdocsgenerator/build.gradle @@ -52,5 +52,6 @@ tasks.named('test') { // Use JUnit Platform for unit tests. useJUnitPlatform() } - -sourceCompatibility = 1.8 +//to guarantee that the Configuration Server is compatible with Java 8 runtime environments +sourceCompatibility = 1.8 // Java version compatibility to use when compiling Java source. +targetCompatibility = 1.8 // Java version to generate classes for. diff --git a/components/inspectit-ocelot-configurationserver-ui/.eslintrc b/components/inspectit-ocelot-configurationserver-ui/.eslintrc index b3e5a7692c..66b02e55e2 100644 --- a/components/inspectit-ocelot-configurationserver-ui/.eslintrc +++ b/components/inspectit-ocelot-configurationserver-ui/.eslintrc @@ -13,12 +13,16 @@ "plugin:react/recommended", "plugin:prettier/recommended" ], - "parser": "babel-eslint", + "parser": "@babel/eslint-parser", "parserOptions": { "sourceType": "module", "ecmaVersion": 2018, "ecmaFeatures": { "jsx": true + }, + "requireConfigFile": false, + "babelOptions": { + "presets": ["@babel/preset-react"] } }, "settings": { @@ -41,6 +45,8 @@ "no-multi-spaces": "error", "import/first": "error", "import/no-useless-path-segments": "error", - "react/prop-types": "warn" + "react/prop-types": "warn", + "prettier/prettier": ["error", { "endOfLine": "auto" }], + "react/no-unknown-property": ["error", { "ignore": ["jsx", "global", "align"] }] } -} \ No newline at end of file +} diff --git a/components/inspectit-ocelot-configurationserver-ui/.gitignore b/components/inspectit-ocelot-configurationserver-ui/.gitignore index 1380c2e74b..160fadb5aa 100644 --- a/components/inspectit-ocelot-configurationserver-ui/.gitignore +++ b/components/inspectit-ocelot-configurationserver-ui/.gitignore @@ -1,2 +1,9 @@ node_modules -.next \ No newline at end of file +.next +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/components/inspectit-ocelot-configurationserver-ui/.yarnrc.yml b/components/inspectit-ocelot-configurationserver-ui/.yarnrc.yml new file mode 100644 index 0000000000..3186f3f079 --- /dev/null +++ b/components/inspectit-ocelot-configurationserver-ui/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/components/inspectit-ocelot-configurationserver-ui/README.md b/components/inspectit-ocelot-configurationserver-ui/README.md index d12fe6592f..a848629080 100644 --- a/components/inspectit-ocelot-configurationserver-ui/README.md +++ b/components/inspectit-ocelot-configurationserver-ui/README.md @@ -20,6 +20,32 @@ yarn dev The development server can be reached at [http://localhost:3000](http://localhost:3000). +### Linting + +Depending on your IDE, linting errors based on the settings in .eslintrc can be shown right in your editor. +However, if that is not the case with your IDE you can use the following command to check for linting errors. +```bash +yarn lint +``` + +And the following to fix them automatically. +```bash +yarn lint:fix +``` + +### Prettier + +When facing prettier/prettier errors in the Config UI tests and developing with VS Code, follows these steps for problem solving: + +* make sure to install the [prettier extension from Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) +* open the file in which the prettier errors occur +* format the document using prettier + 1. to format the document, open the command palette with `Ctrl + Shift + P` (Windows) or `Cmd + Shift + P` (Mac) + 2. search for `Format Document With...`. + 3. press Enter + 4. in the opened drop down menu you can choose your preferred code styling (in this case prettier). Select `prettier` and press Enter +* the opened code file will automatically be formatted by prettier, which will fix the prettier errors in the Config UI tests. + #### Storybook The project also contains [Storybook](https://storybook.js.org/) which supports the development of components by providing an isolated sandbox UI for testing these components. @@ -37,4 +63,4 @@ The frontend can be built and exported using the following command - the `build` yarn export ``` -The exported page will be located in the `out` directory. \ No newline at end of file +The exported page will be located in the `out` directory. diff --git a/components/inspectit-ocelot-configurationserver-ui/next.config.js b/components/inspectit-ocelot-configurationserver-ui/next.config.js index f1506bf7bf..941d6167b7 100644 --- a/components/inspectit-ocelot-configurationserver-ui/next.config.js +++ b/components/inspectit-ocelot-configurationserver-ui/next.config.js @@ -5,7 +5,7 @@ module.exports = withCSS({ distDir: '../.next', // Each page will be exported as a directory - exportTrailingSlash: true, + trailingSlash: true, assetPrefix: isProduction ? '/ui' : '', @@ -39,4 +39,4 @@ module.exports = withCSS({ VERSION: process.env.CIRCLE_TAG || "SNAPSHOT", BUILD_DATE: new Date().toUTCString() } -}) \ No newline at end of file +}) diff --git a/components/inspectit-ocelot-configurationserver-ui/package-lock.json b/components/inspectit-ocelot-configurationserver-ui/package-lock.json deleted file mode 100644 index 89f69ec529..0000000000 --- a/components/inspectit-ocelot-configurationserver-ui/package-lock.json +++ /dev/null @@ -1,20528 +0,0 @@ -{ - "name": "inspectit-ocelot-configuration-ui", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@ampproject/toolbox-core": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-core/-/toolbox-core-2.8.0.tgz", - "integrity": "sha512-YrMRrE9zfAChPlFLT+B4yoGEH6CR/Yerjm6SCxuFSPARK/LaytUV+ZhZ03tlMv5wUHDH2Lq8e/lGymME0CXBhA==", - "requires": { - "cross-fetch": "3.1.2", - "lru-cache": "6.0.0" - } - }, - "@ampproject/toolbox-optimizer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.0.1.tgz", - "integrity": "sha512-zroXqrV7mY77+/6hV7kaaWxp4LA85V0B/2vg7WdF+FrwiO9Wior/lIW8UbpRek6INjw0VOp1ED73MmGJkwaDhA==", - "requires": { - "@ampproject/toolbox-core": "^2.0.0", - "@ampproject/toolbox-runtime-version": "^2.0.0", - "@ampproject/toolbox-script-csp": "^2.0.0", - "@ampproject/toolbox-validator-rules": "^2.0.0", - "css": "2.2.4", - "domhandler": "3.0.0", - "domutils": "2.0.0", - "htmlparser2": "4.1.0", - "normalize-html-whitespace": "1.0.0", - "terser": "4.6.7" - }, - "dependencies": { - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "domutils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.0.0.tgz", - "integrity": "sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg==", - "requires": { - "dom-serializer": "^0.2.1", - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0" - } - } - } - }, - "@ampproject/toolbox-runtime-version": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.8.0.tgz", - "integrity": "sha512-vkotDc6S3Q3Xm6LIPzWo2T1+yxvj+bIDrD4SObk6J4SVqilIlPEunLayS602Su+ZXqNC82VjEeD1ARAtc613dQ==", - "requires": { - "@ampproject/toolbox-core": "^2.8.0" - } - }, - "@ampproject/toolbox-script-csp": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-script-csp/-/toolbox-script-csp-2.8.0.tgz", - "integrity": "sha512-5/ytdTzhmdIyOkcEBskh5ZlLJ8V4bbe+1pY9LZQ8DfWrSOVD1pJ+LtAO/7lmTM+HXxMAKPYDRpvsJc0vvbY0tw==" - }, - "@ampproject/toolbox-validator-rules": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.8.0.tgz", - "integrity": "sha512-kbInwnzpEPVZkKigpKFkF/DQ2LsuZ5b8vrEFHjJ4P+meKVQg2QF/UWAQpIMMdjGe1AQBT+DWm91n9UyjgqfnWQ==", - "requires": { - "cross-fetch": "3.1.2" - } - }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==" - }, - "@babel/core": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.12.tgz", - "integrity": "sha512-44ODe6O1IVz9s2oJE3rZ4trNNKTX9O7KpQpfAP4t8QII/zwrVRHL7i2pxhqtcY7tqMLrrKfMlBKnm1QlrRFs5w==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.12", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.12", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.12", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.12", - "@babel/types": "^7.17.12", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.12.tgz", - "integrity": "sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw==", - "dev": true, - "requires": { - "@babel/types": "^7.17.12", - "@jridgewell/gen-mapping": "^0.3.0", - "jsesc": "^2.5.1" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "requires": { - "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "dependencies": { - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" - }, - "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.12.tgz", - "integrity": "sha512-sZoOeUTkFJMyhqCei2+Z+wtH/BehW8NVKQt7IRUQlRiOARuXymJYfN/FCcI8CvVbR0XVyDM6eLFOlR7YtiXnew==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", - "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "requires": { - "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "requires": { - "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - }, - "dependencies": { - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", - "requires": { - "@babel/types": "^7.17.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "requires": { - "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-module-transforms": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.12.tgz", - "integrity": "sha512-t5s2BeSWIghhFRPh9XMn6EIGmvn8Lmw5RVASJzkIx1mSemubQQBNIZiQD7WzaFmaHIrjAec4x8z9Yx8SjJ1/LA==", - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.12", - "@babel/types": "^7.17.12" - }, - "dependencies": { - "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "requires": { - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "requires": { - "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "requires": { - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", - "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.12.tgz", - "integrity": "sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", - "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", - "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", - "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - } - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", - "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.12.tgz", - "integrity": "sha512-8ILyDG6eL14F8iub97dVc8q35Md0PJYAnA5Kz9NACFOkt6ffCcr0FISyUPKHsvuAy36fkpIitxZ9bVYPFMGQHA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.12.tgz", - "integrity": "sha512-gL0qSSeIk/VRfTDgtQg/EtejENssN/r3p5gJsPie1UacwiHibprpr19Z0pcK3XKuqQvjGVxsQ37Tl1MGfXzonA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/plugin-syntax-decorators": "^7.17.12", - "charcodes": "^0.2.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.17.12.tgz", - "integrity": "sha512-LpsTRw725eBAXXKUOnJJct+SEaOzwR78zahcLuripD2+dKc2Sj+8Q2DzA+GC/jOpOu/KlDXuxrzG214o1zTauQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-default-from": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", - "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", - "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - } - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", - "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", - "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.12.tgz", - "integrity": "sha512-6l9cO3YXXRh4yPCPRA776ZyJ3RobG4ZKJZhp7NDRbKIOeV3dBPG8FXCF7ZtiO2RTCIOkQOph1xDDcc01iWVNjQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - } - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", - "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", - "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", - "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", - "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", - "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz", - "integrity": "sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", - "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", - "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", - "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.17.12.tgz", - "integrity": "sha512-jw8XW/B1i7Lqwqj2CbrViPcZijSxfguBWZP2aN59NHgxUyO/OcO1mfdCxH13QhN5LbWhPkX+f+brKGhZTiqtZQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-classes": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.17.12.tgz", - "integrity": "sha512-cvO7lc7pZat6BsvH6l/EGaI8zpl8paICaoGk+7x7guvtfak/TbIf66nYmJOH13EuG0H+Xx3M+9LQDtSvZFKXKw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", - "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.12.tgz", - "integrity": "sha512-P8pt0YiKtX5UMUL5Xzsc9Oyij+pJE6JuC+F1k0/brq/OOGs5jDa1If3OY0LRWGvJsJhI+8tsiecL3nJLc0WTlg==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", - "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz", - "integrity": "sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-flow": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.17.12.tgz", - "integrity": "sha512-76lTwYaCxw8ldT7tNmye4LLwSoKDbRCBzu6n/DcK/P3FOR29+38CIIaVIZfwol9By8W/QHORYEnYSLuvcQKrsg==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-literals": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", - "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.17.12.tgz", - "integrity": "sha512-p5rt9tB5Ndcc2Za7CeNxVf7YAjRcUMR6yi8o8tKjb9KhRkEvXwa+C0hj6DA5bVDkKRxB0NYhMUGbVKoFu4+zEA==", - "requires": { - "@babel/helper-module-transforms": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - } - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.12.tgz", - "integrity": "sha512-tVPs6MImAJz+DiX8Y1xXEMdTk5Lwxu9jiPjlS+nv5M2A59R7+/d1+9A8C/sbuY0b3QjIxqClkj6KAplEtRvzaA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.17.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "dev": true, - "requires": { - "@babel/types": "^7.17.0" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - } - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.12.tgz", - "integrity": "sha512-NVhDb0q00hqZcuLduUf/kMzbOQHiocmPbIxIvk23HLiEqaTKC/l4eRxeC7lO63M72BmACoiKOcb9AkOAJRerpw==", - "requires": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - } - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.17.12.tgz", - "integrity": "sha512-BnsPkrUHsjzZGpnrmJeDFkOMMljWFHPjDc9xDcz71/C+ybF3lfC3V4m3dwXPLZrE5b3bgd4V+3/Pj+3620d7IA==", - "requires": { - "@babel/helper-module-transforms": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", - "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz", - "integrity": "sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", - "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", - "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/types": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@babel/plugin-syntax-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", - "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.16.7" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.17.12.tgz", - "integrity": "sha512-7S9G2B44EnYOx74mue02t1uD8ckWZ/ee6Uz/qfdzc35uWHX5NgRy9i+iJSb2LFRgMd+QV9zNcStQaazzzZ3n3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", - "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", - "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", - "requires": { - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", - "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.2.tgz", - "integrity": "sha512-cqULw/QB4yl73cS5Y0TZlQSjDvNkzDbu0FurTZyHlJpWE5T3PCMdnyV+xXoH1opr1ldyHODe3QAX3OMAii5NxA==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "resolve": "^1.8.1", - "semver": "^5.5.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-spread": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", - "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.17.12.tgz", - "integrity": "sha512-kAKJ7DX1dSRa2s7WN1xUAuaQmkTpN+uig4wCKWivVXIObqGbVTUlSavHyfI2iZvz89GFAMGm9p2DBJ4Y1Tp0hw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", - "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.17.12.tgz", - "integrity": "sha512-ICbXZqg6hgenjmwciVI/UfqZtExBrZOrS8sLB5mTHGO/j08Io3MmooULBiijWk9JBknjM3CbbtTc/0ZsqLrjXQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-typescript": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - } - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/preset-env": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.12.tgz", - "integrity": "sha512-Kke30Rj3Lmcx97bVs71LO0s8M6FmJ7tUAQI9fNId62rf0cYG1UAWwdNO9/sE0/pLEahAw1MqMorymoD12bj5Fg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-async-generator-functions": "^7.17.12", - "@babel/plugin-proposal-class-properties": "^7.17.12", - "@babel/plugin-proposal-class-static-block": "^7.17.12", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.17.12", - "@babel/plugin-proposal-json-strings": "^7.17.12", - "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.17.12", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-private-methods": "^7.17.12", - "@babel/plugin-proposal-private-property-in-object": "^7.17.12", - "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.17.12", - "@babel/plugin-transform-async-to-generator": "^7.17.12", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.17.12", - "@babel/plugin-transform-classes": "^7.17.12", - "@babel/plugin-transform-computed-properties": "^7.17.12", - "@babel/plugin-transform-destructuring": "^7.17.12", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.17.12", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.17.12", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.17.12", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.17.12", - "@babel/plugin-transform-modules-commonjs": "^7.17.12", - "@babel/plugin-transform-modules-systemjs": "^7.17.12", - "@babel/plugin-transform-modules-umd": "^7.17.12", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", - "@babel/plugin-transform-new-target": "^7.17.12", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.17.12", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.17.9", - "@babel/plugin-transform-reserved-words": "^7.17.12", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.17.12", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.17.12", - "@babel/plugin-transform-typeof-symbol": "^7.17.12", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.17.12", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/preset-flow": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.13.13.tgz", - "integrity": "sha512-MDtwtamMifqq3R2mC7l3A3uFalUb3NH5TIBQWjN/epEPlZktcLq4se3J+ivckKrLMGsR7H9LW8+pYuIUN9tsKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-flow-strip-types": "^7.13.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.17.12.tgz", - "integrity": "sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.17.12", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - } - } - }, - "@babel/preset-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz", - "integrity": "sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - } - } - }, - "@babel/register": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.17.7.tgz", - "integrity": "sha512-fg56SwvXRifootQEDQAu1mKdjh5uthPzdO0N6t358FktfL4XjAVXuH58ULoiW8mesxiOgNIrxiImqEwv0+hRRA==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - } - }, - "@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/traverse": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.12.tgz", - "integrity": "sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.12", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.12", - "@babel/types": "^7.17.12", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.12.tgz", - "integrity": "sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw==", - "requires": { - "@babel/types": "^7.17.12", - "@jridgewell/gen-mapping": "^0.3.0", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } - } - }, - "@base2/pretty-print-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", - "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", - "dev": true - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" - }, - "@emotion/cache": { - "version": "10.0.29", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", - "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", - "requires": { - "@emotion/sheet": "0.9.4", - "@emotion/stylis": "0.8.5", - "@emotion/utils": "0.11.3", - "@emotion/weak-memoize": "0.2.5" - } - }, - "@emotion/core": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.3.1.tgz", - "integrity": "sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/cache": "^10.0.27", - "@emotion/css": "^10.0.27", - "@emotion/serialize": "^0.11.15", - "@emotion/sheet": "0.9.4", - "@emotion/utils": "0.11.3" - } - }, - "@emotion/css": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", - "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", - "dev": true, - "requires": { - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3", - "babel-plugin-emotion": "^10.0.27" - } - }, - "@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" - }, - "@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "dev": true, - "requires": { - "@emotion/memoize": "0.7.4" - } - }, - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "@emotion/serialize": { - "version": "0.11.16", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", - "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", - "requires": { - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/unitless": "0.7.5", - "@emotion/utils": "0.11.3", - "csstype": "^2.5.7" - }, - "dependencies": { - "csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" - } - } - }, - "@emotion/sheet": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", - "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==" - }, - "@emotion/styled": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.3.0.tgz", - "integrity": "sha512-GgcUpXBBEU5ido+/p/mCT2/Xx+Oqmp9JzQRuC+a4lYM4i4LBBn/dWvc0rQ19N9ObA8/T4NWMrPNe79kMBDJqoQ==", - "dev": true, - "requires": { - "@emotion/styled-base": "^10.3.0", - "babel-plugin-emotion": "^10.0.27" - } - }, - "@emotion/styled-base": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.3.0.tgz", - "integrity": "sha512-PBRqsVKR7QRNkmfH78hTSSwHWcwDpecH9W6heujWAcyp2wdz/64PP73s7fWS1dIPm8/Exc8JAzYS8dEWXjv60w==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/is-prop-valid": "0.8.8", - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3" - } - }, - "@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "@emotion/utils": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", - "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==" - }, - "@emotion/weak-memoize": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", - "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@mdx-js/loader": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz", - "integrity": "sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==", - "dev": true, - "requires": { - "@mdx-js/mdx": "1.6.22", - "@mdx-js/react": "1.6.22", - "loader-utils": "2.0.0" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dev": true, - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "dev": true - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "dev": true - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - }, - "dependencies": { - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - } - } - }, - "@next/polyfill-nomodule": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@next/polyfill-nomodule/-/polyfill-nomodule-9.3.2.tgz", - "integrity": "sha512-kEa7v3trZmW6iWeTJrhg+ZsE9njae7mLkgyZB5M1r975JHr5PQ69B5aX7hrEAj7aAJYvCKETgAczx4gGR8MOzQ==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz", - "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==", - "dev": true, - "requires": { - "ansi-html": "^0.0.7", - "error-stack-parser": "^2.0.6", - "html-entities": "^1.2.1", - "native-url": "^0.2.6", - "schema-utils": "^2.6.5", - "source-map": "^0.7.3" - }, - "dependencies": { - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "@popperjs/core": { - "version": "2.11.5", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", - "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", - "dev": true - }, - "@reach/router": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.3.4.tgz", - "integrity": "sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==", - "dev": true, - "requires": { - "create-react-context": "0.3.0", - "invariant": "^2.2.3", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "@storybook/addon-actions": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.2.9.tgz", - "integrity": "sha512-CkUYSMt+fvuHfWvtDzlhhaeQBCWlUo99xdL88JTsTml05P43bIHZNIRv2QJ8DwhHuxdIPeHKLmz9y/ymOagOnw==", - "dev": true, - "requires": { - "@storybook/addons": "6.2.9", - "@storybook/api": "6.2.9", - "@storybook/client-api": "6.2.9", - "@storybook/components": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/theming": "6.2.9", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "polished": "^4.0.5", - "prop-types": "^15.7.2", - "react-inspector": "^5.1.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "uuid-browser": "^3.1.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "@storybook/addon-backgrounds": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.2.9.tgz", - "integrity": "sha512-oPSdeoUuvaXshY5sQRagbYXpr6ZEVUuLhGYBnZTlvm19QMeNCXQE+rdlgzcgyafq4mc1FI/udE2MpJ1dhfS6pQ==", - "dev": true, - "requires": { - "@storybook/addons": "6.2.9", - "@storybook/api": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/components": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/theming": "6.2.9", - "core-js": "^3.8.2", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/addon-controls": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.2.9.tgz", - "integrity": "sha512-NvXAJ7I5U4CLxv4wL3/Ne9rehJlgnSmQlLIG/z6dg5zm7JIb48LT4IY6GzjlUP5LkjmO9KJ8gJC249uRt2iPBQ==", - "dev": true, - "requires": { - "@storybook/addons": "6.2.9", - "@storybook/api": "6.2.9", - "@storybook/client-api": "6.2.9", - "@storybook/components": "6.2.9", - "@storybook/node-logger": "6.2.9", - "@storybook/theming": "6.2.9", - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-docs": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.2.9.tgz", - "integrity": "sha512-qOtwgiqI3LMqT0eXYNV6ykp7qSu0LQGeXxy3wOBGuDDqAizfgnAjomYEWGFcyKp5ahV7HCRCjxbixAklFPUmyw==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/generator": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/plugin-transform-react-jsx": "^7.12.12", - "@babel/preset-env": "^7.12.11", - "@jest/transform": "^26.6.2", - "@mdx-js/loader": "^1.6.22", - "@mdx-js/mdx": "^1.6.22", - "@mdx-js/react": "^1.6.22", - "@storybook/addons": "6.2.9", - "@storybook/api": "6.2.9", - "@storybook/builder-webpack4": "6.2.9", - "@storybook/client-api": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/components": "6.2.9", - "@storybook/core": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/csf": "0.0.1", - "@storybook/node-logger": "6.2.9", - "@storybook/postinstall": "6.2.9", - "@storybook/source-loader": "6.2.9", - "@storybook/theming": "6.2.9", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", - "core-js": "^3.8.2", - "doctrine": "^3.0.0", - "escodegen": "^2.0.0", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "html-tags": "^3.1.0", - "js-string-escape": "^1.0.1", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "prettier": "~2.2.1", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^14.3.2", - "regenerator-runtime": "^0.13.7", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "@storybook/addon-essentials": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.2.9.tgz", - "integrity": "sha512-zXsV4e1TCkHyDwi7hew4h9eJfDW++f2BNKzTif+DAcjPUVFDp7yC17gLjS5IhOjcQk+db0UUlFSx/OrTxhy7Xw==", - "dev": true, - "requires": { - "@storybook/addon-actions": "6.2.9", - "@storybook/addon-backgrounds": "6.2.9", - "@storybook/addon-controls": "6.2.9", - "@storybook/addon-docs": "6.2.9", - "@storybook/addon-toolbars": "6.2.9", - "@storybook/addon-viewport": "6.2.9", - "@storybook/addons": "6.2.9", - "@storybook/api": "6.2.9", - "@storybook/node-logger": "6.2.9", - "core-js": "^3.8.2", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-links": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.2.9.tgz", - "integrity": "sha512-pBiL6EUZI3c9qtCqnGx3RXF46kAxGMdo4xDC2y3mM132W//DzxkzLZRe4ZhxxGwaLzTNlNrypZ6Li6WyIaPZ/w==", - "dev": true, - "requires": { - "@storybook/addons": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/csf": "0.0.1", - "@storybook/router": "6.2.9", - "@types/qs": "^6.9.5", - "core-js": "^3.8.2", - "global": "^4.4.0", - "prop-types": "^15.7.2", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "@storybook/addon-toolbars": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.2.9.tgz", - "integrity": "sha512-4WjIofN5npBPNZ8v1UhzPeATB9RnAWRH/y1AVS1HB+zl6Ku92o7aOMqVxs8zR1oSSmtkHh/rcUcpATFKjuofdw==", - "dev": true, - "requires": { - "@storybook/addons": "6.2.9", - "@storybook/api": "6.2.9", - "@storybook/client-api": "6.2.9", - "@storybook/components": "6.2.9", - "core-js": "^3.8.2" - } - }, - "@storybook/addon-viewport": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.2.9.tgz", - "integrity": "sha512-IK2mu5njmfcAT967SJtBOY2B6NPMikySZga9QuaLdSpQxPd3vXKNMVG1CjnduMLeDaAoUlvlJISeEPbYGuE+1A==", - "dev": true, - "requires": { - "@storybook/addons": "6.2.9", - "@storybook/api": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/components": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/theming": "6.2.9", - "core-js": "^3.8.2", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "prop-types": "^15.7.2", - "regenerator-runtime": "^0.13.7" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "@storybook/addons": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.2.9.tgz", - "integrity": "sha512-GnmEKbJwiN1jncN9NSA8CuR1i2XAlasPcl/Zn0jkfV9WitQeczVcJCPw86SGH84AD+tTBCyF2i9UC0KaOV1YBQ==", - "dev": true, - "requires": { - "@storybook/api": "6.2.9", - "@storybook/channels": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/router": "6.2.9", - "@storybook/theming": "6.2.9", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/api": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.2.9.tgz", - "integrity": "sha512-okkA3HAScE9tGnYBrjTOcgzT+L1lRHNoEh3ZfGgh1u/XNEyHGNkj4grvkd6nX7BzRcYQ/l2VkcKCqmOjUnSkVQ==", - "dev": true, - "requires": { - "@reach/router": "^1.3.4", - "@storybook/channels": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/csf": "0.0.1", - "@storybook/router": "6.2.9", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.2.9", - "@types/reach__router": "^1.3.7", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "telejson": "^5.1.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "@storybook/builder-webpack4": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.2.9.tgz", - "integrity": "sha512-swECic1huVdj+B+iRJIQ8ds59HuPVE4fmhI+j/nhw0CQCsgAEKqDlOQVYEimW6nZX8GO4WxNm6tiiRzxixejbw==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.12", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.12", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@storybook/addons": "6.2.9", - "@storybook/api": "6.2.9", - "@storybook/channel-postmessage": "6.2.9", - "@storybook/channels": "6.2.9", - "@storybook/client-api": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/components": "6.2.9", - "@storybook/core-common": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/node-logger": "6.2.9", - "@storybook/router": "6.2.9", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.2.9", - "@storybook/ui": "6.2.9", - "@types/node": "^14.0.10", - "@types/webpack": "^4.41.26", - "autoprefixer": "^9.8.6", - "babel-loader": "^8.2.2", - "babel-plugin-macros": "^2.8.0", - "babel-plugin-polyfill-corejs3": "^0.1.0", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "core-js": "^3.8.2", - "css-loader": "^3.6.0", - "dotenv-webpack": "^1.8.0", - "file-loader": "^6.2.0", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^4.1.6", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "global": "^4.4.0", - "html-webpack-plugin": "^4.0.0", - "pnp-webpack-plugin": "1.6.4", - "postcss": "^7.0.35", - "postcss-flexbugs-fixes": "^4.2.1", - "postcss-loader": "^4.2.0", - "raw-loader": "^4.0.2", - "react-dev-utils": "^11.0.3", - "stable": "^0.1.8", - "style-loader": "^1.3.0", - "terser-webpack-plugin": "^3.1.0", - "ts-dedent": "^2.0.0", - "url-loader": "^4.1.1", - "util-deprecate": "^1.0.2", - "webpack": "4", - "webpack-dev-middleware": "^3.7.3", - "webpack-filter-warnings-plugin": "^1.2.1", - "webpack-hot-middleware": "^2.25.0", - "webpack-virtual-modules": "^0.2.2" - }, - "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@types/node": { - "version": "14.18.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.18.tgz", - "integrity": "sha512-B9EoJFjhqcQ9OmQrNorItO+OwEOORNn3S31WuiHvZY/dm9ajkB7AKD/8toessEtHHNL+58jofbq7hMMY9v4yig==", - "dev": true - }, - "autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - } - }, - "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - } - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss-flexbugs-fixes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", - "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", - "dev": true, - "requires": { - "postcss": "^7.0.26" - } - }, - "postcss-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", - "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - } - } - } - }, - "@storybook/channel-postmessage": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.2.9.tgz", - "integrity": "sha512-OqV+gLeeCHR0KExsIz0B7gD17Cjd9D+I75qnBsLWM9inWO5kc/WZ5svw8Bvjlcm6snWpvxUaT8L+svuqcPSmww==", - "dev": true, - "requires": { - "@storybook/channels": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/core-events": "6.2.9", - "core-js": "^3.8.2", - "global": "^4.4.0", - "qs": "^6.10.0", - "telejson": "^5.1.0" - } - }, - "@storybook/channels": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.2.9.tgz", - "integrity": "sha512-6dC8Fb2ipNyOQXnUZMDeEUaJGH5DMLzyHlGLhVyDtrO5WR6bO8mQdkzf4+5dSKXgCBNX0BSkssXth4pDjn18rg==", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/client-api": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.2.9.tgz", - "integrity": "sha512-aLvEUVkbvv6Qo/2mF4rFCecdqi2CGOUDdsV1a6EFIVS/9gXFdpirsOwKHo9qNjacGdWPlBYGCUcbrw+DvNaSFA==", - "dev": true, - "requires": { - "@storybook/addons": "6.2.9", - "@storybook/channel-postmessage": "6.2.9", - "@storybook/channels": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/csf": "0.0.1", - "@types/qs": "^6.9.5", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "stable": "^0.1.8", - "store2": "^2.12.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "@storybook/client-logger": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.2.9.tgz", - "integrity": "sha512-IfOQZuvpjh66qBInQCJOb9S0dTGpzZ/Cxlcvokp+PYt95KztaWN3mPm+HaDQCeRsrWNe0Bpm1zuickcJ6dBOXg==", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "global": "^4.4.0" - } - }, - "@storybook/components": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.2.9.tgz", - "integrity": "sha512-hnV1MI2aB2g1sJ7NJphpxi7TwrMZQ/tpCJeHnkjmzyC6ez1MXqcBXGrEEdSXzRfAxjQTOEpu6H1mnns0xMP0Ag==", - "dev": true, - "requires": { - "@popperjs/core": "^2.6.0", - "@storybook/client-logger": "6.2.9", - "@storybook/csf": "0.0.1", - "@storybook/theming": "6.2.9", - "@types/color-convert": "^2.0.0", - "@types/overlayscrollbars": "^1.12.0", - "@types/react-syntax-highlighter": "11.0.5", - "color-convert": "^2.0.1", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "markdown-to-jsx": "^7.1.0", - "memoizerific": "^1.11.3", - "overlayscrollbars": "^1.13.1", - "polished": "^4.0.5", - "prop-types": "^15.7.2", - "react-colorful": "^5.0.1", - "react-popper-tooltip": "^3.1.1", - "react-syntax-highlighter": "^13.5.3", - "react-textarea-autosize": "^8.3.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lowlight": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", - "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", - "dev": true, - "requires": { - "fault": "^1.0.0", - "highlight.js": "~10.7.0" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "react-syntax-highlighter": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-13.5.3.tgz", - "integrity": "sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "highlight.js": "^10.1.1", - "lowlight": "^1.14.0", - "prismjs": "^1.21.0", - "refractor": "^3.1.0" - } - }, - "refractor": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", - "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", - "dev": true, - "requires": { - "hastscript": "^6.0.0", - "parse-entities": "^2.0.0", - "prismjs": "~1.27.0" - }, - "dependencies": { - "prismjs": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", - "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", - "dev": true - } - } - } - } - }, - "@storybook/core": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.2.9.tgz", - "integrity": "sha512-pzbyjWvj0t8m0kR2pC9GQne4sZn7Y/zfcbm6/31CL+yhzOQjfJEj3n4ZFUlxikXqQJPg1aWfypfyaeaLL0QyuA==", - "dev": true, - "requires": { - "@storybook/core-client": "6.2.9", - "@storybook/core-server": "6.2.9" - } - }, - "@storybook/core-client": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.2.9.tgz", - "integrity": "sha512-jW841J5lCe1Ub5ZMtzYPgCy/OUddFxxVYeHLZyuNxlH5RoiQQxbDpuFlzuZMYGuIzD6eZw+ANE4w5vW/y5oBfA==", - "dev": true, - "requires": { - "@storybook/addons": "6.2.9", - "@storybook/channel-postmessage": "6.2.9", - "@storybook/client-api": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/csf": "0.0.1", - "@storybook/ui": "6.2.9", - "ansi-to-html": "^0.6.11", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "unfetch": "^4.2.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true - } - } - }, - "@storybook/core-common": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.2.9.tgz", - "integrity": "sha512-ve0Qb4EMit8jGibfZBprmaU2i4LtpB4vSMIzD9nB1YeBmw2cGhHubtmayZ0TwcV3fPQhtYH9wwRWuWyzzHyQyw==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.12", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.12", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@babel/register": "^7.12.1", - "@storybook/node-logger": "6.2.9", - "@storybook/semver": "^7.3.2", - "@types/glob-base": "^0.3.0", - "@types/micromatch": "^4.0.1", - "@types/node": "^14.0.10", - "@types/pretty-hrtime": "^1.0.0", - "babel-loader": "^8.2.2", - "babel-plugin-macros": "^3.0.1", - "babel-plugin-polyfill-corejs3": "^0.1.0", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "express": "^4.17.1", - "file-system-cache": "^1.0.5", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.0.4", - "glob": "^7.1.6", - "glob-base": "^0.3.0", - "interpret": "^2.2.0", - "json5": "^2.1.3", - "lazy-universal-dotenv": "^3.0.1", - "micromatch": "^4.0.2", - "pkg-dir": "^5.0.0", - "pretty-hrtime": "^1.0.3", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "webpack": "4" - }, - "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@types/node": { - "version": "14.18.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.18.tgz", - "integrity": "sha512-B9EoJFjhqcQ9OmQrNorItO+OwEOORNn3S31WuiHvZY/dm9ajkB7AKD/8toessEtHHNL+58jofbq7hMMY9v4yig==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@storybook/core-events": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.2.9.tgz", - "integrity": "sha512-xQmbX/oYQK1QsAGN8hriXX5SUKOoTUe3L4dVaVHxJqy7MReRWJpprJmCpbAPJzWS6WCbDFfCM5kVEexHLOzJlQ==", - "dev": true, - "requires": { - "core-js": "^3.8.2" - } - }, - "@storybook/core-server": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.2.9.tgz", - "integrity": "sha512-DzihO73pj1Ro0Y4tq9hjw2mLMUYeSRPrx7CndCOBxcTHCKQ8Kd7Dee3wJ49t5/19V7TW1+4lYR59GAy73FeOAQ==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@storybook/addons": "6.2.9", - "@storybook/builder-webpack4": "6.2.9", - "@storybook/core-client": "6.2.9", - "@storybook/core-common": "6.2.9", - "@storybook/node-logger": "6.2.9", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.2.9", - "@storybook/ui": "6.2.9", - "@types/node": "^14.0.10", - "@types/node-fetch": "^2.5.7", - "@types/pretty-hrtime": "^1.0.0", - "@types/webpack": "^4.41.26", - "airbnb-js-shims": "^2.2.1", - "babel-loader": "^8.2.2", - "better-opn": "^2.1.1", - "boxen": "^4.2.0", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "chalk": "^4.1.0", - "cli-table3": "0.6.0", - "commander": "^6.2.1", - "core-js": "^3.8.2", - "cpy": "^8.1.1", - "css-loader": "^3.6.0", - "detect-port": "^1.3.0", - "dotenv-webpack": "^1.8.0", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "file-system-cache": "^1.0.5", - "find-up": "^5.0.0", - "fs-extra": "^9.0.1", - "global": "^4.4.0", - "html-webpack-plugin": "^4.0.0", - "ip": "^1.1.5", - "node-fetch": "^2.6.1", - "pnp-webpack-plugin": "1.6.4", - "pretty-hrtime": "^1.0.3", - "prompts": "^2.4.0", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0", - "serve-favicon": "^2.5.0", - "style-loader": "^1.3.0", - "telejson": "^5.1.0", - "terser-webpack-plugin": "^3.1.0", - "ts-dedent": "^2.0.0", - "url-loader": "^4.1.1", - "util-deprecate": "^1.0.2", - "webpack": "4", - "webpack-dev-middleware": "^3.7.3", - "webpack-virtual-modules": "^0.2.2" - }, - "dependencies": { - "@types/node": { - "version": "14.18.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.18.tgz", - "integrity": "sha512-B9EoJFjhqcQ9OmQrNorItO+OwEOORNn3S31WuiHvZY/dm9ajkB7AKD/8toessEtHHNL+58jofbq7hMMY9v4yig==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", - "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - } - } - } - }, - "@storybook/csf": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", - "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "@storybook/node-logger": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.2.9.tgz", - "integrity": "sha512-ryRBChWZf1A5hOVONErJZosS25IdMweoMVFAUAcj91iC0ynoSA6YL2jmoE71jQchxEXEgkDeRkX9lR/GlqFGZQ==", - "dev": true, - "requires": { - "@types/npmlog": "^4.1.2", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "npmlog": "^4.1.2", - "pretty-hrtime": "^1.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@storybook/postinstall": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.2.9.tgz", - "integrity": "sha512-HjAjXZV+WItonC7lVrfrUsQuRFZNz1g1lE0GgsEK2LdC5rAcD/JwJxjiWREwY+RGxKL9rpWgqyxVQajpIJRjhA==", - "dev": true, - "requires": { - "core-js": "^3.8.2" - } - }, - "@storybook/react": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.2.9.tgz", - "integrity": "sha512-glvw+o/Vek2oapYIXCYDK6gm3cuSnx0XdOpiJVcXk3KLb8JfLbdzGYYp6dcWUbyOBqGcGFRpXIgMmkcwgn+fvQ==", - "dev": true, - "requires": { - "@babel/preset-flow": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", - "@storybook/addons": "6.2.9", - "@storybook/core": "6.2.9", - "@storybook/core-common": "6.2.9", - "@storybook/node-logger": "6.2.9", - "@storybook/semver": "^7.3.2", - "@types/webpack-env": "^1.16.0", - "babel-plugin-add-react-displayname": "^0.0.5", - "babel-plugin-named-asset-import": "^0.3.1", - "babel-plugin-react-docgen": "^4.2.1", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "prop-types": "^15.7.2", - "react-dev-utils": "^11.0.3", - "react-docgen-typescript-plugin": "^0.6.2", - "react-refresh": "^0.8.3", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "webpack": "4" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "@storybook/router": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.2.9.tgz", - "integrity": "sha512-7Bn1OFoItCl8whXRT8N1qp1Lky7kzXJ3aslWp5E8HcM8rxh4OYXfbaeiyJEJxBTGC5zxgY+tAEXHFjsAviFROg==", - "dev": true, - "requires": { - "@reach/router": "^1.3.4", - "@storybook/client-logger": "6.2.9", - "@types/reach__router": "^1.3.7", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - } - }, - "@storybook/source-loader": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.2.9.tgz", - "integrity": "sha512-cx499g7BG2oeXvRFx45r0W0p2gKEy/e88WsUFnqqfMKZBJ8K0R/lx5DI0l1hq+TzSrE6uGe0/uPlaLkJNIro7g==", - "dev": true, - "requires": { - "@storybook/addons": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/csf": "0.0.1", - "core-js": "^3.8.2", - "estraverse": "^5.2.0", - "global": "^4.4.0", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "prettier": "~2.2.1", - "regenerator-runtime": "^0.13.7" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true - } - } - }, - "@storybook/theming": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.2.9.tgz", - "integrity": "sha512-183oJW7AD7Fhqg5NT4ct3GJntwteAb9jZnQ6yhf9JSdY+fk8OhxRbPf7ov0au2gYACcGrWDd9K5pYQsvWlP5gA==", - "dev": true, - "requires": { - "@emotion/core": "^10.1.1", - "@emotion/is-prop-valid": "^0.8.6", - "@emotion/styled": "^10.0.27", - "@storybook/client-logger": "6.2.9", - "core-js": "^3.8.2", - "deep-object-diff": "^1.1.0", - "emotion-theming": "^10.0.27", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "polished": "^4.0.5", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/ui": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.2.9.tgz", - "integrity": "sha512-jq2xmw3reIqik/6ibUSbNKGR+Xvr9wkAEwexiOl+5WQ5BeYJpw4dmDmsFQf+SQuWaSEUUPolbzkakRQM778Kdg==", - "dev": true, - "requires": { - "@emotion/core": "^10.1.1", - "@storybook/addons": "6.2.9", - "@storybook/api": "6.2.9", - "@storybook/channels": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/components": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/router": "6.2.9", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.2.9", - "@types/markdown-to-jsx": "^6.11.3", - "copy-to-clipboard": "^3.3.1", - "core-js": "^3.8.2", - "core-js-pure": "^3.8.2", - "downshift": "^6.0.15", - "emotion-theming": "^10.0.27", - "fuse.js": "^3.6.1", - "global": "^4.4.0", - "lodash": "^4.17.20", - "markdown-to-jsx": "^6.11.4", - "memoizerific": "^1.11.3", - "polished": "^4.0.5", - "qs": "^6.10.0", - "react-draggable": "^4.4.3", - "react-helmet-async": "^1.0.7", - "react-sizeme": "^3.0.1", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0", - "store2": "^2.12.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "markdown-to-jsx": { - "version": "6.11.4", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz", - "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==", - "dev": true, - "requires": { - "prop-types": "^15.6.2", - "unquote": "^1.1.0" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "@types/braces": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.1.tgz", - "integrity": "sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==", - "dev": true - }, - "@types/color-convert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz", - "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==", - "dev": true, - "requires": { - "@types/color-name": "*" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@types/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha512-NRCU51ALpNedUvwiwifAkDIWIC25MqF9+0STzAzvhlzR5U+iHTiaUlZ1iOMCwqZAU05X9UlqL63FVrZTZ6tySA==", - "dev": true - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true - }, - "@types/is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/markdown-to-jsx": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz", - "integrity": "sha512-30nFYpceM/ZEvhGiqWjm5quLUxNeld0HCzJEXMZZDpq53FPkS85mTwkWtCXzCqq8s5JYLgM5W392a02xn8Bdaw==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", - "dev": true, - "requires": { - "@types/braces": "*" - } - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/node": { - "version": "17.0.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.34.tgz", - "integrity": "sha512-XImEz7XwTvDBtzlTnm8YvMqGW/ErMWBsKZ+hMTvnDIjGCKxwK5Xpc+c/oQjOauwq8M4OS11hEkpjX8rrI/eEgA==", - "dev": true - }, - "@types/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/npmlog": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", - "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==", - "dev": true - }, - "@types/overlayscrollbars": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.1.tgz", - "integrity": "sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", - "dev": true - }, - "@types/pretty-hrtime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", - "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/reach__router": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.10.tgz", - "integrity": "sha512-iHAFGaVOrWi00/q7oBybggGsz5TOmwOW4M1H9sT7i9lly4qFC8XOgsdf6jUsoaOz2sknFHALEtZqCoDbokdJ2Q==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz", - "integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-syntax-highlighter": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz", - "integrity": "sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.13.2", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.2.tgz", - "integrity": "sha512-/xFrPIo+4zOeNGtVMbf9rUm0N+i4pDf1ynExomqtokIJmVzR3962lJ1UE+MmexMkA0cmN9oTzg5Xcbwge0Ij2Q==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true - }, - "@types/webpack": { - "version": "4.41.32", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", - "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "@types/webpack-env": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.4.tgz", - "integrity": "sha512-llS8qveOUX3wxHnSykP5hlYFFuMfJ9p5JvIyCiBgp7WTfl6K5ZcyHj8r8JsN/J6QODkAsRRCLIcTuOCu8etkUw==", - "dev": true - }, - "@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", - "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", - "requires": { - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" - }, - "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - }, - "dependencies": { - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - } - } - }, - "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - }, - "dependencies": { - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - } - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - }, - "dependencies": { - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - } - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "@zeit/next-css": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@zeit/next-css/-/next-css-1.0.1.tgz", - "integrity": "sha512-yfHPRy/ne/5SddVClsoy+fpU7e0Cs1gkWA67/wm2uIu+9rznF45yQLxHEt5dPGF3h6IiIh7ZtIgA8VV8YKq87A==", - "requires": { - "css-loader": "1.0.0", - "extracted-loader": "1.0.4", - "find-up": "2.1.0", - "ignore-loader": "0.1.2", - "mini-css-extract-plugin": "0.4.3", - "postcss-loader": "3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" - }, - "css-loader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.0.tgz", - "integrity": "sha512-tMXlTYf3mIMt3b0dDCOQFJiVvxbocJ5Ho577WiGPYPZcqVEO218L2iU22pDXzkTZCLDE+9AmGSUkWxeh/nZReA==", - "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash.camelcase": "^4.3.0", - "postcss": "^6.0.23", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - }, - "dependencies": { - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "requires": { - "postcss": "^6.0.1" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", - "requires": { - "postcss": "^6.0.1" - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" - } - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "ace-builds": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.4.8.tgz", - "integrity": "sha512-8ZVAxwyCGAxQX8mOp9imSXH0hoSPkGfy8igJy+WO/7axL30saRhKgg1XPACSmxxPA7nfHVwM+ShWXT+vKsNuFg==" - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", - "dev": true - }, - "adjust-sourcemap-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", - "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", - "requires": { - "assert": "1.4.1", - "camelcase": "5.0.0", - "loader-utils": "1.2.3", - "object-path": "0.11.4", - "regex-parser": "2.2.10" - }, - "dependencies": { - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha512-N+aAxov+CKVS3JuhDIQFr24XvZvwE96Wlhk9dytTg/GmwWoghdOvR8dspx8MVz71O+Y0pA3UPqHF68D6iy8UvQ==", - "requires": { - "util": "0.10.3" - } - }, - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "airbnb-js-shims": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz", - "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", - "array.prototype.flatmap": "^1.2.1", - "es5-shim": "^4.5.13", - "es6-shim": "^0.35.5", - "function.prototype.name": "^1.1.0", - "globalthis": "^1.0.0", - "object.entries": "^1.1.0", - "object.fromentries": "^2.0.0 || ^1.0.0", - "object.getownpropertydescriptors": "^2.0.3", - "object.values": "^1.1.0", - "promise.allsettled": "^1.0.0", - "promise.prototype.finally": "^3.1.0", - "string.prototype.matchall": "^4.0.0 || ^3.0.1", - "string.prototype.padend": "^3.0.0", - "string.prototype.padstart": "^3.0.0", - "symbol.prototype.description": "^1.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" - }, - "amphtml-validator": { - "version": "1.0.30", - "resolved": "https://registry.npmjs.org/amphtml-validator/-/amphtml-validator-1.0.30.tgz", - "integrity": "sha512-CaEm2ivIi4M4QTiFnCE9t4MRgawCf88iAV/+VsS0zEw6T4VBU6zoXcgn4L+dt6/WZ/NYxKpc38duSoRLqZJhNQ==", - "requires": { - "colors": "1.2.5", - "commander": "2.15.1", - "promise": "8.0.1" - }, - "dependencies": { - "colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==" - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" - } - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - } - } - }, - "ansi-to-html": { - "version": "0.6.15", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", - "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", - "dev": true, - "requires": { - "entities": "^2.0.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "app-root-dir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", - "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" - }, - "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" - }, - "array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", - "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.4.tgz", - "integrity": "sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "optional": true - }, - "async-retry": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", - "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", - "requires": { - "retry": "0.12.0" - } - }, - "async-sema": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.0.0.tgz", - "integrity": "sha512-zyCMBDl4m71feawrxYcVbHxv/UUkqm4nKJiLu3+l9lfiQha6jQ/9dxhrXLnzzBXVFqCTDwiUkZOz9XFbdEGQsg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autodll-webpack-plugin": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/autodll-webpack-plugin/-/autodll-webpack-plugin-0.4.2.tgz", - "integrity": "sha512-JLrV3ErBNKVkmhi0celM6PJkgYEtztFnXwsNBApjinpVHtIP3g/m2ZZSOvsAe7FoByfJzDhpOXBKFbH3k2UNjw==", - "requires": { - "bluebird": "^3.5.0", - "del": "^3.0.0", - "find-cache-dir": "^1.0.0", - "lodash": "^4.17.4", - "make-dir": "^1.0.0", - "memory-fs": "^0.4.1", - "read-pkg": "^2.0.0", - "tapable": "^1.0.0", - "webpack-merge": "^4.1.0", - "webpack-sources": "^1.0.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - } - } - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - } - } - }, - "axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "requires": { - "follow-redirects": "^1.14.8" - } - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==" - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", - "dev": true - }, - "@babel/traverse": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", - "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.5", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-add-react-displayname": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", - "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", - "dev": true - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - } - } - }, - "babel-plugin-emotion": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz", - "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/serialize": "^0.11.16", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^1.0.5", - "find-root": "^1.1.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz", - "integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==", - "dev": true - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - } - }, - "babel-plugin-react-docgen": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", - "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", - "dev": true, - "requires": { - "ast-types": "^0.14.2", - "lodash": "^4.17.15", - "react-docgen": "^5.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" - }, - "babel-plugin-transform-define": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-define/-/babel-plugin-transform-define-2.0.0.tgz", - "integrity": "sha512-0dv5RNRUlUKxGYIIErl01lpvi8b7W2R04Qcl1mCj70ahwZcgiklfXnFlh4FGnRh6aayCfSZKdhiMryVzcq5Dmg==", - "requires": { - "lodash": "^4.17.11", - "traverse": "0.6.6" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "batch-processor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", - "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==", - "dev": true - }, - "better-opn": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", - "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", - "dev": true, - "requires": { - "open": "^7.0.3" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", - "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" - }, - "dependencies": { - "node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==" - } - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "buffer-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", - "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "c8": { - "version": "7.11.3", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.3.tgz", - "integrity": "sha512-6YBmsaNmqRm9OS3ZbIiL2EZgi1+Xc4O24jL3vMYGE6idixYuGdy76rIfIdltSKDj9DpLNrcXSonUTR1miBD0wA==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "cache-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", - "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", - "requires": { - "buffer-json": "^2.0.0", - "find-cache-dir": "^3.0.0", - "loader-utils": "^1.2.3", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "schema-utils": "^2.0.0" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==" - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001341", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", - "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==" - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true - }, - "ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "charcodes": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", - "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" - }, - "cli-table3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", - "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "clipboard": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", - "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", - "optional": true, - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "optional": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "requires": { - "arity-n": "^1.0.4" - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "compute-scroll-into-view": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz", - "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "conf": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conf/-/conf-5.0.0.tgz", - "integrity": "sha512-lRNyt+iRD4plYaOSVTxu1zPWpaH0EOxgFIR1l3mpC/DGZ7XzhoGFMKmbl54LAgXcSu6knqWgOwdINkqm58N85A==", - "requires": { - "ajv": "^6.10.0", - "dot-prop": "^5.0.0", - "env-paths": "^2.2.0", - "json-schema-typed": "^7.0.0", - "make-dir": "^3.0.0", - "pkg-up": "^3.0.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", - "dev": true, - "requires": { - "toggle-selection": "^1.0.6" - } - }, - "core-js": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.5.tgz", - "integrity": "sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==", - "dev": true - }, - "core-js-compat": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.5.tgz", - "integrity": "sha512-rEF75n3QtInrYICvJjrAgV03HwKiYvtKHdPtaba1KucG+cNZ4NJnH9isqt979e67KZlhpbCOTwnsvnIr+CVeOg==", - "requires": { - "browserslist": "^4.20.3", - "semver": "7.0.0" - }, - "dependencies": { - "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - } - }, - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-js-pure": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.5.tgz", - "integrity": "sha512-8xo9R00iYD7TcV7OrC98GwxiUEAabVWO3dix+uyWjnYrx9fyASLlIX+f/3p5dW5qByaP2bcZ8X/T47s55et/tA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "cp-file": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", - "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "cpy": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", - "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", - "dev": true, - "requires": { - "arrify": "^2.0.1", - "cp-file": "^7.0.0", - "globby": "^9.2.0", - "has-glob": "^1.0.0", - "junk": "^3.1.0", - "nested-error-stacks": "^2.1.0", - "p-all": "^2.1.0", - "p-filter": "^2.1.0", - "p-map": "^3.0.0" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "create-emotion": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/create-emotion/-/create-emotion-10.0.27.tgz", - "integrity": "sha512-fIK73w82HPPn/RsAij7+Zt8eCE8SptcJ3WoRMfxMtjteYxud8GDTKKld7MYwAX2TVhrw29uR1N/bVGxeStHILg==", - "requires": { - "@emotion/cache": "^10.0.27", - "@emotion/serialize": "^0.11.15", - "@emotion/sheet": "0.9.4", - "@emotion/utils": "0.11.3" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-react-context": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz", - "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==", - "dev": true, - "requires": { - "gud": "^1.0.0", - "warning": "^4.0.3" - } - }, - "cross-fetch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.2.tgz", - "integrity": "sha512-+JhD65rDNqLbGmB3Gzs3HrEKC0aQnD+XA3SY6RjgkF88jV2q5cTc5+CwxlS3sdmLk98gpPt5CF9XRnPdlxZe6w==", - "requires": { - "node-fetch": "2.6.1" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "requires": { - "postcss": "^7.0.5" - } - }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - } - }, - "css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "requires": { - "postcss": "^7.0.5" - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "dependencies": { - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano-preset-simple": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-1.3.1.tgz", - "integrity": "sha512-T3a4FACX9h9WRw3Gmiut9T+Pjrj/ScEPk5EclCzHz6Ya6WjMu8oZ3IOtIB32bQOJmkefa1LAI9G7ZDy5psvw2A==", - "requires": { - "caniuse-lite": "^1.0.30001179", - "postcss": "^7.0.32" - } - }, - "cssnano-simple": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-1.0.0.tgz", - "integrity": "sha512-B7u9vvtXEqeU2rzdt+Kfw5O9Nd46R7KNjJoP7Y5lGQs6c7n1Et5Ilofh2W9OjBV/ZiJV5+7j9ShWgiYNtH/57A==", - "requires": { - "cssnano-preset-simple": "^1.0.0", - "postcss": "^7.0.18" - } - }, - "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", - "dev": true - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deep-object-diff": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz", - "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "optional": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dev": true, - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "devalue": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-2.0.1.tgz", - "integrity": "sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "dependencies": { - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.0.0.tgz", - "integrity": "sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==", - "requires": { - "domelementtype": "^2.0.1" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "dependencies": { - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "dotenv-defaults": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-1.1.1.tgz", - "integrity": "sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q==", - "dev": true, - "requires": { - "dotenv": "^6.2.0" - }, - "dependencies": { - "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", - "dev": true - } - } - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "dotenv-webpack": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz", - "integrity": "sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg==", - "dev": true, - "requires": { - "dotenv-defaults": "^1.0.2" - } - }, - "downshift": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz", - "integrity": "sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.8", - "compute-scroll-into-view": "^1.0.17", - "prop-types": "^15.7.2", - "react-is": "^17.0.2", - "tslib": "^2.3.0" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - } - } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - } - } - }, - "drange": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", - "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==" - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==" - }, - "element-resize-detector": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", - "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", - "dev": true, - "requires": { - "batch-processor": "1.0.0" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "emotion": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/emotion/-/emotion-10.0.27.tgz", - "integrity": "sha512-2xdDzdWWzue8R8lu4G76uWX5WhyQuzATon9LmNeCy/2BHVC6dsEpfhN1a0qhELgtDVdjyEA6J8Y/VlI5ZnaH0g==", - "requires": { - "babel-plugin-emotion": "^10.0.27", - "create-emotion": "^10.0.27" - } - }, - "emotion-theming": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-10.3.0.tgz", - "integrity": "sha512-mXiD2Oj7N9b6+h/dC6oLf9hwxbtKHQjoIqtodEyL8CpkN4F3V4IK/BT4D0C7zSs4BBFOu4UlPJbvvBLa88SGEA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/weak-memoize": "0.2.5", - "hoist-non-react-statics": "^3.3.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "endent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", - "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", - "dev": true, - "requires": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.5" - } - }, - "enhanced-resolve": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.2.0", - "tapable": "^0.1.8" - }, - "dependencies": { - "memory-fs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", - "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", - "dev": true - }, - "tapable": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", - "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", - "dev": true - } - } - }, - "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz", - "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==", - "dev": true, - "requires": { - "stackframe": "^1.1.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "dependencies": { - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - } - } - }, - "es5-shim": { - "version": "4.6.7", - "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.7.tgz", - "integrity": "sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==", - "dev": true - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-shim": { - "version": "0.35.6", - "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", - "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", - "dev": true - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "eslint-config-prettier": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.1.tgz", - "integrity": "sha512-svTy6zh1ecQojvpbJSgH3aei/Rt7C6i090l5f2WQ4aB05lYHeZIR1qL4wZyyILTbtmnbHP5Yn8MrsOJMGa8RkQ==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-import-resolver-webpack": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.12.1.tgz", - "integrity": "sha512-O/sUAXk6GWrICiN8JUkkjdt9uZpqZHP+FVnTxtEILL6EZMaPSrnP4lGPSFwcKsv7O211maqq4Nz60+dh236hVg==", - "dev": true, - "requires": { - "array-find": "^1.0.0", - "debug": "^2.6.9", - "enhanced-resolve": "^0.9.1", - "find-root": "^1.1.0", - "has": "^1.0.3", - "interpret": "^1.2.0", - "lodash": "^4.17.15", - "node-libs-browser": "^1.0.0 || ^2.0.0", - "resolve": "^1.13.1", - "semver": "^5.7.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", - "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.3", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - } - } - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-plugin-prettier": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", - "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-react": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz", - "integrity": "sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.17.0", - "string.prototype.matchall": "^4.0.2" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", - "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", - "dev": true, - "requires": { - "estraverse": "^5.0.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "estree-to-babel": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", - "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.2.0", - "c8": "^7.6.0" - } - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - } - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extracted-loader": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/extracted-loader/-/extracted-loader-1.0.4.tgz", - "integrity": "sha512-G8A0hT/WCWIjesZm7BwbWdST5dQ08GNnCpTrJT/k/FYzuiJwlV1gyWjnuoizOzAR4jpEYXG2J++JyEKN/EB26Q==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "requires": { - "format": "^0.2.0" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.2.0.tgz", - "integrity": "sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ==", - "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "file-system-cache": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.1.0.tgz", - "integrity": "sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw==", - "dev": true, - "requires": { - "fs-extra": "^10.1.0", - "ramda": "^0.28.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "finally-polyfill": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/finally-polyfill/-/finally-polyfill-0.1.0.tgz", - "integrity": "sha512-J1LEcZ5VXe1l3sEO+S//WqL5wcJ/ep7QeKJA6HhNZrcEEFj0eyC8IW3DEZhxySI2bx3r85dwAXz+vYPGuHx5UA==" - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=" - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "fuse.js": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", - "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-promise": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", - "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", - "dev": true, - "requires": { - "@types/glob": "*" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "optional": true, - "requires": { - "delegate": "^3.1.2" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==", - "dev": true - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", - "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", - "dev": true, - "requires": { - "is-glob": "^3.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "dev": true, - "requires": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" - }, - "hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dev": true, - "requires": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dev": true, - "requires": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dev": true, - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - } - } - }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "dev": true - }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "dev": true - }, - "html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-proxy": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", - "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "ignore-loader": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ignore-loader/-/ignore-loader-0.1.2.tgz", - "integrity": "sha1-2B8kA3bQuk8Nd4lyw60lh0EXpGM=" - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", - "dev": true - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - } - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "dev": true - }, - "inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-dom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz", - "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==", - "dev": true, - "requires": { - "is-object": "^1.0.1", - "is-window": "^1.0.2" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "dev": true - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "dev": true - }, - "is-window": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", - "integrity": "sha1-LIlspT25feRdPDMTOmXYyfVjSA0=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "iterate-iterator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", - "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", - "dev": true - }, - "iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "dev": true, - "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - } - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-schema-typed": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", - "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.0" - } - }, - "jszip": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.9.1.tgz", - "integrity": "sha512-H9A60xPqJ1CuC4Ka6qxzXZeU8aNmgOeP5IFqwJbQQwtu2EUYxota3LdsiZWplF7Wgd9tkAd0mdu36nceSaPuYw==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "dev": true - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "jwt-decode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", - "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true - }, - "launch-editor": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", - "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==", - "requires": { - "chalk": "^2.3.0", - "shell-quote": "^1.6.1" - } - }, - "lazy-universal-dotenv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", - "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.0", - "app-root-dir": "^1.0.2", - "core-js": "^3.0.4", - "dotenv": "^8.0.0", - "dotenv-expand": "^5.1.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "requires": { - "immediate": "~3.0.5" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" - }, - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "requires": { - "chalk": "^2.0.1" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lowlight": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.12.1.tgz", - "integrity": "sha512-OqaVxMGIESnawn+TU/QMV5BJLbUghUfjDWPAtFqDYDmDtr4FnB+op8xM+pR7nKlauHNUHXGt0VgWatFB8voS5w==", - "requires": { - "fault": "^1.0.2", - "highlight.js": "~9.15.0" - }, - "dependencies": { - "highlight.js": { - "version": "9.15.10", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.10.tgz", - "integrity": "sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw==" - } - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-or-similar": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "dev": true - }, - "markdown-to-jsx": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.7.tgz", - "integrity": "sha512-VI3TyyHlGkO8uFle0IOibzpO1c1iJDcXcS/zBrQrXQQvJ2tpdwVzVZ7XdKsyRz1NdRmre4dqQkMZzUHaKIG/1w==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dev": true, - "requires": { - "unist-util-remove": "^2.0.0" - } - }, - "mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memfs": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.3.tgz", - "integrity": "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg==", - "dev": true, - "requires": { - "fs-monkey": "1.0.3" - } - }, - "memoize-one": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", - "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" - }, - "memoizerific": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha1-fIekZGREwy11Q4VwkF8tvRsagFo=", - "dev": true, - "requires": { - "map-or-similar": "^1.5.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.3.tgz", - "integrity": "sha512-Mxs0nxzF1kxPv4TRi2NimewgXlJqh0rGE30vviCU2WHrpbta6wklnUV9dr9FUtoAHmB3p3LeXEC+ZjgHvB0Dzg==", - "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "native-url": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz", - "integrity": "sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==", - "requires": { - "querystring": "^0.2.0" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "nested-error-stacks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", - "dev": true - }, - "next": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/next/-/next-9.3.2.tgz", - "integrity": "sha512-KVNnnFyvtO1DwSEyMgt3wtxpkprnGCldEOyMXbt9Zxf8RcCw3YnRImbg8mVgrcXJRzkQpve4bdJKYY5MVwT/RA==", - "requires": { - "@ampproject/toolbox-optimizer": "2.0.1", - "@babel/core": "7.7.2", - "@babel/plugin-proposal-class-properties": "7.7.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.7.4", - "@babel/plugin-proposal-numeric-separator": "7.8.3", - "@babel/plugin-proposal-object-rest-spread": "7.6.2", - "@babel/plugin-proposal-optional-chaining": "7.7.4", - "@babel/plugin-syntax-bigint": "7.8.3", - "@babel/plugin-syntax-dynamic-import": "7.2.0", - "@babel/plugin-transform-modules-commonjs": "7.7.0", - "@babel/plugin-transform-runtime": "7.6.2", - "@babel/preset-env": "7.7.1", - "@babel/preset-modules": "0.1.1", - "@babel/preset-react": "7.7.0", - "@babel/preset-typescript": "7.7.2", - "@babel/runtime": "7.7.2", - "@babel/types": "7.7.4", - "@next/polyfill-nomodule": "9.3.2", - "amphtml-validator": "1.0.30", - "async-retry": "1.2.3", - "async-sema": "3.0.0", - "autodll-webpack-plugin": "0.4.2", - "babel-core": "7.0.0-bridge.0", - "babel-loader": "8.0.6", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-define": "2.0.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "browserslist": "4.8.3", - "cache-loader": "4.1.0", - "chalk": "2.4.2", - "ci-info": "2.0.0", - "compression": "1.7.4", - "conf": "5.0.0", - "content-type": "1.0.4", - "cookie": "0.4.0", - "css-loader": "3.3.0", - "cssnano-simple": "1.0.0", - "devalue": "2.0.1", - "escape-string-regexp": "2.0.0", - "etag": "1.8.1", - "file-loader": "4.2.0", - "finally-polyfill": "0.1.0", - "find-up": "4.0.0", - "fork-ts-checker-webpack-plugin": "3.1.1", - "fresh": "0.5.2", - "gzip-size": "5.1.1", - "http-proxy": "1.18.0", - "ignore-loader": "0.1.2", - "is-docker": "2.0.0", - "is-wsl": "2.1.1", - "jest-worker": "24.9.0", - "json5": "2.1.1", - "jsonwebtoken": "8.5.1", - "launch-editor": "2.2.1", - "loader-utils": "2.0.0", - "lodash.curry": "4.1.1", - "lru-cache": "5.1.1", - "mini-css-extract-plugin": "0.8.0", - "native-url": "0.2.6", - "node-fetch": "2.6.0", - "ora": "3.4.0", - "path-to-regexp": "6.1.0", - "pnp-webpack-plugin": "1.5.0", - "postcss-flexbugs-fixes": "4.2.0", - "postcss-loader": "3.0.0", - "postcss-preset-env": "6.7.0", - "prop-types": "15.7.2", - "prop-types-exact": "1.2.0", - "raw-body": "2.4.0", - "react-error-overlay": "5.1.6", - "react-is": "16.8.6", - "recast": "0.18.5", - "resolve-url-loader": "3.1.1", - "sass-loader": "8.0.2", - "send": "0.17.1", - "source-map": "0.6.1", - "string-hash": "1.1.3", - "strip-ansi": "5.2.0", - "style-loader": "1.0.0", - "styled-jsx": "3.2.5", - "terser": "4.4.2", - "thread-loader": "2.1.3", - "unfetch": "4.1.0", - "url": "0.11.0", - "use-subscription": "1.1.1", - "watchpack": "2.0.0-beta.13", - "webpack": "4.42.0", - "webpack-dev-middleware": "3.7.0", - "webpack-hot-middleware": "2.25.0", - "webpack-sources": "1.4.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.2.tgz", - "integrity": "sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ==", - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.2", - "@babel/helpers": "^7.7.0", - "@babel/parser": "^7.7.2", - "@babel/template": "^7.7.0", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.7.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.0.tgz", - "integrity": "sha512-tufDcFA1Vj+eWvwHN+jvMN6QsV5o+vUlytNKrbMiCeDL0F2j92RURzUsUMWE5EJkLyWxjdUslCsMQa9FWth16A==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.7.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.7.4.tgz", - "integrity": "sha512-TbYHmr1Gl1UC7Vo2HVuj/Naci5BEGNZ0AJhzqD2Vpr6QPFWpUmBRLrIDjedzx7/CShq0bRDS2gI4FIs77VHLVQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.7.4" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", - "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz", - "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.4.tgz", - "integrity": "sha512-JmgaS+ygAWDR/STPe3/7y0lNlHgS+19qZ9aC06nYLwQ/XB7c0q5Xs+ksFU3EDnp9EiEsO0dnRAOKeyLHTZuW3A==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.7.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", - "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz", - "integrity": "sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg==", - "requires": { - "@babel/helper-module-transforms": "^7.7.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.7.0", - "babel-plugin-dynamic-import-node": "^2.3.0" - }, - "dependencies": { - "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "requires": { - "@babel/types": "^7.17.0" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - } - } - }, - "@babel/preset-env": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.1.tgz", - "integrity": "sha512-/93SWhi3PxcVTDpSqC+Dp4YxUu3qZ4m7I76k0w73wYfn7bGVuRIO4QUz95aJksbS+AD1/mT1Ie7rbkT0wSplaA==", - "requires": { - "@babel/helper-module-imports": "^7.7.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.7.0", - "@babel/plugin-proposal-dynamic-import": "^7.7.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.6.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.7.0", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-syntax-top-level-await": "^7.7.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.7.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.6.3", - "@babel/plugin-transform-classes": "^7.7.0", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.6.0", - "@babel/plugin-transform-dotall-regex": "^7.7.0", - "@babel/plugin-transform-duplicate-keys": "^7.5.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.7.0", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.5.0", - "@babel/plugin-transform-modules-commonjs": "^7.7.0", - "@babel/plugin-transform-modules-systemjs": "^7.7.0", - "@babel/plugin-transform-modules-umd": "^7.7.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.0", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.5.5", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.7.0", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.6.2", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.7.0", - "@babel/types": "^7.7.1", - "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.1.tgz", - "integrity": "sha512-x/kt2aAZlgcFnP3P851fkkb2s4FmTiyGic58pkWMaRK9Am3u9KkH1ttHGjwlsKu7/TVJsLEBXZnjUxqsid3tww==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.7.0.tgz", - "integrity": "sha512-IXXgSUYBPHUGhUkH+89TR6faMcBtuMW0h5OHbMuVbL3/5wK2g6a2M2BBpkLa+Kw0sAHiZ9dNVgqJMDP/O4GRBA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.7.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0" - } - }, - "@babel/preset-typescript": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.7.2.tgz", - "integrity": "sha512-1B4HthAelaLGfNRyrWqJtBEjXX1ulThCrLQ5B2VOtEAznWFIFXFJahgXImqppy66lx/Oh+cOSCQdJzZqh2Jh5g==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.7.2" - } - }, - "@babel/runtime": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", - "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } - } - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" - }, - "dependencies": { - "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" - }, - "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - } - } - }, - "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" - }, - "dependencies": { - "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" - }, - "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - } - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" - }, - "dependencies": { - "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" - }, - "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - } - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" - }, - "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", - "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "css-loader": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.3.0.tgz", - "integrity": "sha512-x9Y1vvHe5RR+4tzwFdWExPueK00uqFTCw7mZy+9aE/X1SKWOArm5luaOrtJ4d05IpOwJ6S86b/tVcIdhw1Bu4A==", - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "find-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.0.0.tgz", - "integrity": "sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q==", - "requires": { - "locate-path": "^5.0.0" - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", - "requires": { - "babel-code-frame": "^6.22.0", - "chalk": "^2.4.1", - "chokidar": "^3.3.0", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "dependencies": { - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - } - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" - }, - "is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==" - }, - "is-wsl": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", - "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==" - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "dependencies": { - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - } - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "mini-css-extract-plugin": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz", - "integrity": "sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==", - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "pnp-webpack-plugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz", - "integrity": "sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg==", - "requires": { - "ts-pnp": "^1.1.2" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - } - } - }, - "style-loader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz", - "integrity": "sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==", - "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "terser": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.2.tgz", - "integrity": "sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "webpack": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", - "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", - "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" - } - }, - "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" - }, - "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", - "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.2", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - } - } - }, - "webpack-hot-middleware": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz", - "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==", - "requires": { - "ansi-html": "0.0.7", - "html-entities": "^1.2.0", - "querystring": "^0.2.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", - "dev": true, - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" - }, - "normalize-html-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", - "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "objectorarray": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", - "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - } - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "overlayscrollbars": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz", - "integrity": "sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ==", - "dev": true - }, - "p-all": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", - "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", - "dev": true, - "requires": { - "p-map": "^2.0.0" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } - } - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "dev": true, - "requires": { - "p-map": "^2.0.0" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.1.0.tgz", - "integrity": "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "dev": true, - "requires": { - "ts-pnp": "^1.1.6" - } - }, - "polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - } - } - }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "requires": { - "postcss": "^7.0.14" - } - }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "requires": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - } - }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - } - }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.0.tgz", - "integrity": "sha512-QRE0n3hpkxxS/OGvzOa+PDuy4mh/Jg4o9ui22/ko5iGYOG3M5dfJabjnAZjTdh2G9F85c7Hv8hWcEDEKW/xceQ==", - "requires": { - "postcss": "^7.0.26" - } - }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "requires": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - } - }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - } - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "prettier": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.4.tgz", - "integrity": "sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "primeflex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-1.3.1.tgz", - "integrity": "sha512-APU4DNof9nvQ6/6XxdQ8ACjADktsNpO5RjDf6h5B46OcegAL9vaslKepVt8CpJc/5bYZEAwA5hz9mAUhxBgJWA==" - }, - "primeicons": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-1.0.0.tgz", - "integrity": "sha512-p/hzIjUVccW4eJPhuORHI3AUkDpqfvCQVrjxbFEejnTEdWY4C8fomVfjiaA9jCu83fSQnBHuRIGB96iAR8R6uA==" - }, - "primereact": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/primereact/-/primereact-4.2.2.tgz", - "integrity": "sha512-7IfNGRqTUKSWCCbTKeeMLKOShShUmUm0rV0DfsPn0vw0SeT+HQ7HA1cDhdfCuc+bbAK9cLts8j6O8oFOXMDJ7A==" - }, - "prismjs": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", - "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==", - "dev": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.1.tgz", - "integrity": "sha1-5F1osAoXZHttpxG/he1u1HII9FA=", - "requires": { - "asap": "~2.0.3" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "promise.allsettled": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.5.tgz", - "integrity": "sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ==", - "dev": true, - "requires": { - "array.prototype.map": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "iterate-value": "^1.0.2" - } - }, - "promise.prototype.finally": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz", - "integrity": "sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types-exact": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", - "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", - "requires": { - "has": "^1.0.3", - "object.assign": "^4.1.0", - "reflect.ownkeys": "^0.2.0" - } - }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "ramda": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", - "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", - "dev": true - }, - "randexp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", - "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", - "requires": { - "drange": "^1.0.2", - "ret": "^0.2.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - } - } - }, - "raw-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "react-colorful": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.5.1.tgz", - "integrity": "sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg==", - "dev": true - }, - "react-dev-utils": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", - "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", - "dev": true, - "requires": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "browserslist": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", - "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "react-diff-viewer": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/react-diff-viewer/-/react-diff-viewer-3.1.1.tgz", - "integrity": "sha512-rmvwNdcClp6ZWdS11m1m01UnBA4OwYaLG/li0dB781e/bQEzsGyj+qewVd6W5ztBwseQ72pO7nwaCcq5jnlzcw==", - "requires": { - "classnames": "^2.2.6", - "create-emotion": "^10.0.14", - "diff": "^4.0.1", - "emotion": "^10.0.14", - "memoize-one": "^5.0.4", - "prop-types": "^15.6.2" - }, - "dependencies": { - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "react-docgen": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.0.tgz", - "integrity": "sha512-JBjVQ9cahmNlfjMGxWUxJg919xBBKAoy3hgDgKERbR+BcF4ANpDuzWAScC7j27hZfd8sJNmMPOLWo9+vB/XJEQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@babel/generator": "^7.12.11", - "@babel/runtime": "^7.7.6", - "ast-types": "^0.14.2", - "commander": "^2.19.0", - "doctrine": "^3.0.0", - "estree-to-babel": "^3.1.0", - "neo-async": "^2.6.1", - "node-dir": "^0.1.10", - "strip-indent": "^3.0.0" - } - }, - "react-docgen-typescript": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-1.22.0.tgz", - "integrity": "sha512-MPLbF8vzRwAG3GcjdL+OHQlhgtWsLTXs+7uJiHfEeT3Ur7IsZaNYqRTLQ9sj2nB6M6jylcPCeCmH7qbszJmecg==", - "dev": true - }, - "react-docgen-typescript-plugin": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-0.6.3.tgz", - "integrity": "sha512-av1S/fmWBNFGgNa4qtkidFjjOz23eEi6EdCtwSWo9WNhGzUMyMygbD/DosMWoeFlZpk9R3MXPkRE7PDH6j5GMQ==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "endent": "^2.0.1", - "micromatch": "^4.0.2", - "react-docgen-typescript": "^1.20.5", - "tslib": "^2.0.0" - } - }, - "react-dom": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", - "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "react-draggable": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz", - "integrity": "sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==", - "dev": true, - "requires": { - "clsx": "^1.1.1", - "prop-types": "^15.8.1" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "react-element-to-jsx-string": { - "version": "14.3.4", - "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz", - "integrity": "sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==", - "dev": true, - "requires": { - "@base2/pretty-print-object": "1.0.1", - "is-plain-object": "5.0.0", - "react-is": "17.0.2" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - } - } - }, - "react-error-overlay": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz", - "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q==" - }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==", - "dev": true - }, - "react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "react-inspector": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz", - "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "is-dom": "^1.0.0", - "prop-types": "^15.0.0" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, - "react-popper": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", - "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", - "dev": true, - "requires": { - "react-fast-compare": "^3.0.1", - "warning": "^4.0.2" - } - }, - "react-popper-tooltip": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz", - "integrity": "sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "@popperjs/core": "^2.5.4", - "react-popper": "^2.2.4" - } - }, - "react-redux": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz", - "integrity": "sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==", - "requires": { - "@babel/runtime": "^7.5.5", - "hoist-non-react-statics": "^3.3.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^16.9.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz", - "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "react-refresh": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", - "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==", - "dev": true - }, - "react-sizeme": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz", - "integrity": "sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==", - "dev": true, - "requires": { - "element-resize-detector": "^1.2.2", - "invariant": "^2.2.4", - "shallowequal": "^1.1.0", - "throttle-debounce": "^3.0.1" - } - }, - "react-syntax-highlighter": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-12.2.1.tgz", - "integrity": "sha512-CTsp0ZWijwKRYFg9xhkWD4DSpQqE4vb2NKVMdPAkomnILSmsNBHE0n5GuI5zB+PU3ySVvXvdt9jo+ViD9XibCA==", - "requires": { - "@babel/runtime": "^7.3.1", - "highlight.js": "~9.15.1", - "lowlight": "1.12.1", - "prismjs": "^1.8.4", - "refractor": "^2.4.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "highlight.js": { - "version": "9.15.10", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.10.tgz", - "integrity": "sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw==" - }, - "prismjs": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.20.0.tgz", - "integrity": "sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ==", - "requires": { - "clipboard": "^2.0.0" - }, - "dependencies": { - "clipboard": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", - "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", - "optional": true, - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - } - } - } - } - }, - "react-textarea-autosize": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", - "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - } - }, - "react-timeago": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/react-timeago/-/react-timeago-4.4.0.tgz", - "integrity": "sha512-Zj8RchTqZEH27LAANemzMR2RpotbP2aMd+UIajfYMZ9KW4dMcViUVKzC7YmqfiqlFfz8B0bjDw2xUBjmcxDngA==" - }, - "react-tooltip": { - "version": "4.2.21", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.2.21.tgz", - "integrity": "sha512-zSLprMymBDowknr0KVDiJ05IjZn9mQhhg4PRsqln0OZtURAJ1snt1xi5daZfagsh6vfsziZrc9pErPTDY1ACig==", - "requires": { - "prop-types": "^15.7.2", - "uuid": "^7.0.3" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" - } - } - }, - "react-transition-group": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.2.1.tgz", - "integrity": "sha512-IXrPr93VzCPupwm2O6n6C2kJIofJ/Rp5Ltihhm9UfE8lkuVX2ng/SUUl/oWjblybK9Fq2Io7LGa6maVqPB762Q==", - "requires": { - "@babel/runtime": "^7.4.5", - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", - "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "dependencies": { - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "recast": { - "version": "0.18.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.18.5.tgz", - "integrity": "sha512-sD1WJrpLQAkXGyQZyGzTM75WJvyAd98II5CHdK3IYbt/cZlU0UzCRVU11nUFNXX9fBVEt4E9ajkMjBlUlG+Oog==", - "requires": { - "ast-types": "0.13.2", - "esprima": "~4.0.0", - "private": "^0.1.8", - "source-map": "~0.6.1" - }, - "dependencies": { - "ast-types": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz", - "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==" - } - } - }, - "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dev": true, - "requires": { - "minimatch": "3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "redux": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", - "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", - "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - } - }, - "redux-devtools-extension": { - "version": "2.13.8", - "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz", - "integrity": "sha512-8qlpooP2QqPtZHQZRhx3x3OP5skEV1py/zUdMY28WNAocbafxdG2tRD1MWE7sp8obGMNYuLWanhhQ7EQvT1FBg==" - }, - "redux-persist": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", - "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==" - }, - "redux-thunk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", - "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" - }, - "reflect.ownkeys": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=" - }, - "refractor": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz", - "integrity": "sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw==", - "requires": { - "hastscript": "^5.0.0", - "parse-entities": "^1.1.2", - "prismjs": "~1.17.0" - }, - "dependencies": { - "hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "requires": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "parse-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "prismjs": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz", - "integrity": "sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==", - "requires": { - "clipboard": "^2.0.0" - } - } - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regex-parser": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", - "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, - "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remark-external-links": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", - "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "is-absolute-url": "^3.0.0", - "mdast-util-definitions": "^4.0.0", - "space-separated-tokens": "^1.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "dev": true - }, - "remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dev": true, - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dev": true, - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "remark-slug": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", - "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", - "dev": true, - "requires": { - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^1.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "dev": true, - "requires": { - "mdast-squeeze-paragraphs": "^4.0.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "reselect": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz", - "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "resolve-url-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", - "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", - "requires": { - "adjust-sourcemap-loader": "2.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==" - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" - } - } - }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - }, - "dependencies": { - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - } - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", - "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "optional": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-favicon": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", - "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", - "dev": true, - "requires": { - "etag": "~1.8.1", - "fresh": "0.5.2", - "ms": "2.1.1", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - } - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stackframe": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz", - "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==", - "dev": true - }, - "state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "store2": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/store2/-/store2-2.13.2.tgz", - "integrity": "sha512-CMtO2Uneg3SAz/d6fZ/6qbqqQHi2ynq6/KzMD/26gTkiEShCcpqFfTHgOxsE0egAq6SX3FmN4CeSqn8BzXQkJg==", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - } - } - }, - "string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.padend": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "string.prototype.padstart": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.3.tgz", - "integrity": "sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", - "dev": true - }, - "style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" - } - }, - "style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dev": true, - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "styled-jsx": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-3.2.5.tgz", - "integrity": "sha512-prEahkYwQHomUljJzXzrFnBmQrSMtWOBbXn8QeEkpfFkqMZQGshxzzp4H8ebBIsbVlHF/3+GSXMnmK/fp7qVYQ==", - "requires": { - "@babel/types": "7.8.3", - "babel-plugin-syntax-jsx": "6.18.0", - "convert-source-map": "1.7.0", - "loader-utils": "1.2.3", - "source-map": "0.7.3", - "string-hash": "1.1.3", - "stylis": "3.5.4", - "stylis-rule-sheet": "0.0.10" - }, - "dependencies": { - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - } - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "symbol.prototype.description": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", - "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-symbol-description": "^1.0.0", - "has-symbols": "^1.0.2", - "object.getownpropertydescriptors": "^2.1.2" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "telejson": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz", - "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==", - "dev": true, - "requires": { - "@types/is-function": "^1.0.0", - "global": "^4.4.0", - "is-function": "^1.0.2", - "is-regex": "^1.1.2", - "is-symbol": "^1.0.3", - "isobject": "^4.0.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, - "terser": { - "version": "4.6.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.7.tgz", - "integrity": "sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.1.0.tgz", - "integrity": "sha512-cjdZte66fYkZ65rQ2oJfrdCAkkhJA7YLYk5eGOcGCSGlq0ieZupRdjedSQXYknMPo2IveQL+tPdrxUkERENCFA==", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.2.1", - "p-limit": "^3.0.2", - "schema-utils": "^2.6.6", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.8.0", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "thread-loader": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz", - "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", - "requires": { - "loader-runner": "^2.3.1", - "loader-utils": "^1.1.0", - "neo-async": "^2.6.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "throttle-debounce": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", - "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "optional": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=", - "dev": true - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "dev": true - }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "dev": true - }, - "ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "dev": true - }, - "ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" - }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unfetch": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.1.0.tgz", - "integrity": "sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg==" - }, - "unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dev": true, - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "dev": true - }, - "unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "dev": true - }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "dev": true - }, - "unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "dev": true, - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "optional": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "url-loader": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.0.1.tgz", - "integrity": "sha512-nd+jtHG6VgYx/NnXxXSWCJ7FtHIhuyk6Pe48HKhq29Avq3r5FSdIrenvzlbb67A3SNFaQyLk0/lMZfubj0+5ww==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.4.4", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "dev": true - }, - "use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "dev": true - }, - "use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dev": true, - "requires": { - "use-isomorphic-layout-effect": "^1.1.1" - } - }, - "use-subscription": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.1.1.tgz", - "integrity": "sha512-gk4fPTYvNhs6Ia7u8/+K7bM7sZ7O7AMfWtS+zPO8luH+zWuiGgGcrW0hL4MRWZSzXo+4ofNorf87wZwBKz2YdQ==" - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "uuid-browser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", - "integrity": "sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA=", - "dev": true - }, - "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", - "dev": true - }, - "v8-to-istanbul": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz", - "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.7", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - } - } - }, - "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "dev": true - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "2.0.0-beta.13", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.0-beta.13.tgz", - "integrity": "sha512-ZEFq2mx/k5qgQwgi6NOm+2ImICb8ngAkA/rZ6oyXZ7SgPn3pncf+nfhYTCrs3lmHwOxnPtGLTOuFLfpSMh1VMA==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "optional": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "requires": { - "defaults": "^1.0.3" - } - }, - "web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - } - } - }, - "webpack-filter-warnings-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", - "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", - "dev": true - }, - "webpack-hot-middleware": { - "version": "2.25.1", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", - "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", - "dev": true, - "requires": { - "ansi-html-community": "0.0.8", - "html-entities": "^2.1.0", - "querystring": "^0.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", - "requires": { - "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "webpack-virtual-modules": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", - "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", - "dev": true, - "requires": { - "debug": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "requires": { - "errno": "~0.1.7" - } - }, - "worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "requires": { - "microevent.ts": "~0.1.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "dev": true - } - } -} diff --git a/components/inspectit-ocelot-configurationserver-ui/package.json b/components/inspectit-ocelot-configurationserver-ui/package.json index 909ced77a7..febdbf7f72 100644 --- a/components/inspectit-ocelot-configurationserver-ui/package.json +++ b/components/inspectit-ocelot-configurationserver-ui/package.json @@ -26,53 +26,58 @@ }, "dependencies": { "@zeit/next-css": "^1.0.1", - "ace-builds": "^1.4.5", - "axios": "^0.26.1", - "classnames": "^2.2.6", + "ace-builds": "^1.7.1", + "axios": "^0.27.2", + "classnames": "^2.3.1", "dateformat": "^3.0.3", "file-saver": "^2.0.5", - "js-yaml": "^3.13.1", - "jszip": "^3.9.1", - "jwt-decode": "^2.2.0", + "js-yaml": "^4.1.0", + "jszip": "^3.10.0", + "jwt-decode": "^3.1.2", "lodash": "^4.17.21", - "next": "^9.3.2", - "primeflex": "^1.3.1", - "primeicons": "^1.0.0", - "primereact": "^4.2.1", - "prop-types": "^15.7.2", + "next": "^9.5.5", + "primeflex": "^3.2.1", + "primeicons": "^5.0.0", + "primereact": "^4.2.2", + "prop-types": "^15.8.1", "randexp": "^0.5.3", - "react": "^16.13.1", + "react": "^16.14.0", "react-diff-viewer": "^3.1.1", - "react-dom": "^16.13.1", - "react-redux": "^7.2.0", - "react-syntax-highlighter": "^12.2.1", - "react-timeago": "^4.4.0", + "react-dom": "^16.14.0", + "react-dropzone": "^14.2.3", + "react-redux": "^8.0.2", + "react-syntax-highlighter": "^15.5.0", + "react-timeago": "^7.1.0", "react-tooltip": "^4.2.21", - "react-transition-group": "^4.2.1", - "redux": "^4.0.5", + "react-transition-group": "^4.4.2", + "redux": "^4.2.0", "redux-devtools-extension": "^2.13.2", "redux-persist": "^6.0.0", - "redux-thunk": "^2.3.0", - "reselect": "^4.0.0", - "uuid": "^8.3.2" + "redux-thunk": "^2.4.1", + "require-from-string": "2.0.2", + "reselect": "^4.1.6", + "uuid": "^8.3.2", + "webpack": "4.46.0" }, - "license": "apache-2.0", + "license": "Apache-2.0", "devDependencies": { - "@babel/core": "^7.14.3", - "@storybook/addon-actions": "^6.2.9", - "@storybook/addon-essentials": "^6.2.9", - "@storybook/addon-links": "^6.2.9", - "@storybook/react": "^6.2.9", - "babel-eslint": "^10.1.0", - "babel-loader": "^8.2.2", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.10.1", - "eslint-import-resolver-webpack": "^0.12.1", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-prettier": "^3.1.2", - "eslint-plugin-react": "^7.20.1", - "file-loader": "^4.0.0", - "prettier": "^2.0.4", - "url-loader": "^2.0.1" + "@babel/core": "^7.18.9", + "@babel/eslint-parser": "^7.18.9", + "@babel/helper-string-parser": "^7.18.10", + "@babel/preset-react": "^7.18.6", + "@storybook/addon-actions": "^6.5.9", + "@storybook/addon-essentials": "^6.5.9", + "@storybook/addon-links": "^6.5.9", + "@storybook/react": "^6.5.9", + "babel-loader": "^8.2.5", + "eslint": "^8.20.0", + "eslint-config-prettier": "^8.5.0", + "eslint-import-resolver-webpack": "^0.13.2", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "^7.30.1", + "file-loader": "^4.3.0", + "prettier": "^2.7.1", + "url-loader": "^2.3.0" } } diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/editor/method-configuration-editor/MethodConfigurationEditor.js b/components/inspectit-ocelot-configurationserver-ui/src/components/editor/method-configuration-editor/MethodConfigurationEditor.js index d303f56dbf..d2f924f0a3 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/editor/method-configuration-editor/MethodConfigurationEditor.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/editor/method-configuration-editor/MethodConfigurationEditor.js @@ -55,7 +55,7 @@ const MethodConfigurationEditor = ({ yamlConfiguration }) => { useEffect(() => { // parse configuration try { - setConfiguration(yaml.safeLoad(yamlConfiguration)); + setConfiguration(yaml.load(yamlConfiguration)); } catch (error) { setConfigurationError(error); setConfiguration(null); diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/editor/visual-editor/YamlParser.js b/components/inspectit-ocelot-configurationserver-ui/src/components/editor/visual-editor/YamlParser.js index c3663787fa..a1d5916b0b 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/editor/visual-editor/YamlParser.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/editor/visual-editor/YamlParser.js @@ -32,7 +32,7 @@ class YamlParserCache { } else { let config; try { - config = yaml.safeLoad(yamlString); + config = yaml.load(yamlString); } catch (error) { config = null; } diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/layout/Menubar.js b/components/inspectit-ocelot-configurationserver-ui/src/components/layout/Menubar.js index 2b74f78a80..3b884165d6 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/layout/Menubar.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/layout/Menubar.js @@ -2,10 +2,10 @@ import React from 'react'; import { connect } from 'react-redux'; import { authenticationActions } from '../../redux/ducks/authentication'; import Router from 'next/router'; - import { Toolbar } from 'primereact/toolbar'; import { Button } from 'primereact/button'; import { linkPrefix } from '../../lib/configuration'; +import 'primeicons/primeicons.css'; /** * The application's menu bar. @@ -16,6 +16,10 @@ class Menubar extends React.Component { Router.push(linkPrefix + '/login'); }; + openDocumentation = () => { + window.open('https://inspectit.github.io/inspectit-ocelot/docs/doc1'); + }; + render() { return ( @@ -50,12 +54,23 @@ class Menubar extends React.Component { .user-description b { color: #fff; } + .documentation-icon { + margin-top: 0.4rem; + margin-right: 1rem; + color: #e8a034; + font-size: 1.3rem; + cursor: pointer; + } `}
inspectIT Ocelot
+
+
Logged in as {this.props.username}
diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/views/alerting/rules/editor/VariableView.js b/components/inspectit-ocelot-configurationserver-ui/src/components/views/alerting/rules/editor/VariableView.js index fef4123698..af74bef6f4 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/views/alerting/rules/editor/VariableView.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/views/alerting/rules/editor/VariableView.js @@ -204,7 +204,6 @@ const ValueEditor = ({ type, value, options, readOnly, onDataChanged }) => { * Simple value display component. */ const SimpleDataView = ({ value, isDefault, error }) => { - const style = {}; return ( <> + .this { + overflow: auto; + flex-grow: 1; + display: flex; + flex-direction: column; + } + + .this :global(.cm-tree-icon) { + width: 1.3rem; + height: 1.3rem; + } + + .this :global(.cm-tree-label) { + color: #aaa; + } + + .this :global(.cm-hidden-file-tree-label) { + color: #aaa; + } + + .this :global(.ocelot-tree-head-orange) { + background: url('${linkPrefix}/static/images/inspectit-ocelot-head_orange.svg') center no-repeat; + background-size: 1rem 1rem; + } + + .this :global(.ocelot-tree-head-white) { + background: url('${linkPrefix}/static/images/inspectit-ocelot-head_white.svg') center no-repeat; + background-size: 1rem 1rem; + } + + .tree-container { + overflow: auto; + } + + .version-banner { + background-color: #ffcc80; + height: 2.45rem; + border-bottom: 1px solid #dddddd; + } + `} {selectedVersion &&
}
this.setState({ expandedKeys: e.value })} />
@@ -167,7 +211,15 @@ class FileTree extends React.Component { } getContextMenuModel = (filePath) => { - const { showCreateDirectoryDialog, showCreateFileDialog, showMoveDialog, showDeleteFileDialog, exportSelection } = this.props; + const { + showCreateDirectoryDialog, + showCreateFileDialog, + showMoveDialog, + showDeleteFileDialog, + exportSelection, + toggleShowHiddenFiles, + showHiddenFiles, + } = this.props; return [ { @@ -185,6 +237,11 @@ class FileTree extends React.Component { icon: 'pi pi-download', command: () => exportSelection(true, filePath), }, + { + label: showHiddenFiles ? 'Hide Files' : 'Show Hidden Files', + icon: showHiddenFiles ? 'pi pi-eye-slash' : 'pi pi-eye', + command: () => toggleShowHiddenFiles(), + }, { label: 'Rename', icon: 'pi pi-pencil', @@ -202,11 +259,12 @@ class FileTree extends React.Component { } function mapStateToProps(state) { - const { pendingRequests, selection, defaultConfig, selectedDefaultConfigFile, selectedVersion } = state.configuration; + const { pendingRequests, selection, defaultConfig, selectedDefaultConfigFile, selectedVersion, showHiddenFiles } = state.configuration; return { files: configurationSelectors.getFileTree(state), loading: pendingRequests > 0, selection, + showHiddenFiles, defaultConfig: defaultConfig, defaultTree: configurationSelectors.getDefaultConfigTree(state), selectedDefaultConfigFile, @@ -219,7 +277,44 @@ const mapDispatchToProps = { fetchFiles: configurationActions.fetchFiles, selectFile: configurationActions.selectFile, exportSelection: configurationActions.exportSelection, + toggleShowHiddenFiles: configurationActions.toggleShowHiddenFiles, move: configurationActions.move, }; +FileTree.propTypes = { + className: PropTypes.string, + /** the default configuration key/value ~ path/content pairs in a tree structure. */ + defaultTree: PropTypes.array, + /** The loaded configuration files and directories in a tree structure. */ + files: PropTypes.array, + /** The path of the currently selected file if it is not from the default config. */ + selection: PropTypes.string, + /** The default configuration of the Ocelot agents. Will be retrieved as key/value pairs each representing path/content of a file. */ + defaultConfig: PropTypes.object, + /** The path of the currently selected file if it is from the default config. */ + selectedDefaultConfigFile: PropTypes.string, + /** Whether the current selection in the FileTree is readOnly. */ + readOnly: PropTypes.bool, + /** The selected version of configuration files. */ + selectedVersion: PropTypes.string, + /** Callback which triggers showing the deleteFileDialog. */ + showDeleteFileDialog: PropTypes.func, + /** Callback which triggers showing the showCreateDirectoryDialog. */ + showCreateDirectoryDialog: PropTypes.func, + /** Callback which triggers showing the showCreateFileDialog. */ + showCreateFileDialog: PropTypes.func, + /** Callback which triggers showing the showMoveDialog. */ + showMoveDialog: PropTypes.func, + /** Redux dispatch action for exporting and downloading a file. */ + exportSelection: PropTypes.func, + /** Redux dispatch action for fetching all configuration files and directories. */ + fetchFiles: PropTypes.func, + /** Redux dispatch action for fetching the default config. */ + fetchDefaultConfig: PropTypes.func, + /** Redux dispatch action for propagating selection changes in the file tree. */ + selectFile: PropTypes.func, + /** Redux dispatch action for moving a file. */ + move: PropTypes.func, +}; + export default connect(mapStateToProps, mapDispatchToProps)(FileTree); diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/views/configuration/dialogs/CreateDialog.js b/components/inspectit-ocelot-configurationserver-ui/src/components/views/configuration/dialogs/CreateDialog.js index dbc72601bb..92788ee2c8 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/views/configuration/dialogs/CreateDialog.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/views/configuration/dialogs/CreateDialog.js @@ -180,7 +180,7 @@ const mapDispatchToProps = { CreateDialog.propTypes = { /** The file path of the element to create */ filePath: PropTypes.string, - /** Wether to create a directory or a file */ + /** Whether to create a directory or a file */ directoryMode: PropTypes.bool, /** Whether the dialog is visible */ visible: PropTypes.bool, diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/views/configuration/dialogs/UploadDialog.js b/components/inspectit-ocelot-configurationserver-ui/src/components/views/configuration/dialogs/UploadDialog.js new file mode 100644 index 0000000000..0f39712ee3 --- /dev/null +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/views/configuration/dialogs/UploadDialog.js @@ -0,0 +1,194 @@ +import React from 'react'; +import { Button } from 'primereact/button'; +import { Dialog } from 'primereact/dialog'; +import Dropzone from 'react-dropzone'; +import { configurationActions } from '../../../../redux/ducks/configuration'; +import PropTypes from 'prop-types'; +import { isSelectionDirectory } from '../../../../redux/ducks/configuration/selectors'; +import { connect } from 'react-redux'; +import { notificationActions } from '../../../../redux/ducks/notification'; +import _ from 'lodash'; + +var initialState = { files: [] }; + +class UploadDialog extends React.Component { + duplicateWarning = ( +

+ + Some of your filenames already exist. Existing files will be overwritten. +

+ ); + + constructor() { + super(); + this.onDrop = (files) => { + // concat files with previously selected files if applicable. + if (this.state.files && this.state.files.length > 0) { + // remove duplicates + let newFiles = files.filter((file) => !this.state.files.some((f) => f.name === file.name)); + // concat with previously selected files + files = this.state.files.concat(newFiles); + } + + this.setState({ files }); + }; + this.state = initialState; + } + + removeFileByName(fileName) { + var files = this.state.files; + _.remove(files, (file) => { + return file.name === fileName; + }); + this.setState({ + files: files, + }); + } + + render() { + var { files, selection } = this.props; + var duplicateInfo = <>; + + const filesToUpload = this.state.files.map((file) => { + if (this.isDuplicate(files, file)) { + duplicateInfo = this.duplicateWarning; + } + + var fileName = file.name; + if (selection && !(_.endsWith(selection, '.yml') || _.endsWith(selection, '.yaml'))) { + fileName = selection + '/' + file.name; + } + return ( +
+

+ + {fileName} + this.removeFileByName(file.name)} + style={{ color: 'red', fontSize: '2rem', verticalAlign: 'middle', float: 'right', cursor: 'pointer' }} + /> +

+
+ ); + }); + const baseStyle = { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + padding: '20px', + borderWidth: 2, + borderRadius: 2, + borderColor: '#2196f3', + borderStyle: 'dashed', + backgroundColor: '#fafafa', + color: '#bdbdbd', + transition: 'border .3s ease-in-out', + }; + return ( + this.hideAndCleanState(this)} + footer={ +
+
+ } + > +
{filesToUpload}
+ + + {({ getRootProps, getInputProps }) => ( +
+
+ +

Drag and drop your configuration files here, or click to select files

+

Only yaml files are being accepted!

+
+
+ )} +
+ {duplicateInfo} +
+ ); + } + + hideAndCleanState = (that) => { + that.setState(initialState); + that.props.onHide(); + }; + + isDuplicate = (persistedFiles, file) => { + if (persistedFiles) { + for (var persistedFile of persistedFiles) { + if (file !== undefined && file.name === persistedFile.name) { + return true; + } + } + } + return false; + }; + + uploadFiles = () => { + const { isDirectory } = this.props; + + let fileNamePrefix = '/'; + if (isDirectory) { + fileNamePrefix = this.props.selection + '/'; + } + + this.state.files.forEach((file) => { + const fileName = fileNamePrefix + file.name; + + const fileReader = new FileReader(); + fileReader.readAsText(file); + fileReader.onload = (e) => { + const content = e.target.result; + this.props.writeFile(fileName, content, true, true); + }; + }); + + this.props.onHide(); + }; +} + +function mapStateToProps(state) { + const { selection, files } = state.configuration; + + const isDirectory = isSelectionDirectory(state); + + return { + isDirectory, + files, + selection, + }; +} + +const mapDispatchToProps = { + writeFile: configurationActions.writeFile, + showErrorMessage: notificationActions.showErrorMessage, + showSuccessMessage: notificationActions.showSuccessMessage, +}; + +UploadDialog.props = { + visible: PropTypes.bool, + onHide: PropTypes.bool, + writeFile: PropTypes.func, +}; + +UploadDialog.defaultProperties = { + visible: true, + onHide: () => {}, + writeFile: () => {}, +}; + +export default connect(mapStateToProps, mapDispatchToProps)(UploadDialog); diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/views/dialogs/DownloadDialogue.js b/components/inspectit-ocelot-configurationserver-ui/src/components/views/dialogs/DownloadDialogue.js index 08e8c28d7d..ca90528d67 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/views/dialogs/DownloadDialogue.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/views/dialogs/DownloadDialogue.js @@ -21,6 +21,20 @@ const DownloadDialogue = ({ visible, onHide, error, loading, contentValue, conte return window.URL.createObjectURL(blob); }; + const renderError = (errorType) => { + switch (errorType) { + case 'log': + return `${dialogueSettings.header} could not be loaded due to an unexpected error.\n + Ensure that both agent-commands and log-preloading are enabled and the agent-commands URL is correct in your agent + configuration.\nThis feature is only available for agent versions 1.15.0 and higher`; + case 'archive': + return `Downloading the Support Archive for ${contextName} failed. Make sure agent-commands are enabled and the agent-commands URL is correct in your agent configuration.\n + This feature is only available for agent versions 2.2.0 and higher`; + default: + return `${dialogueSettings.header} could not be loaded due to an unexpected error.`; + } + }; + return ( <> ) : error ? ( -
- {dialogueSettings.header} could not be loaded due to an unexpected error. - {contentType === 'log' ? ( - -
- Ensure that both agent-commands and log-preloading are enabled and the agent-commands URL is correct in your agent - configuration. -
- ) : null} -
+ renderError(contentType) ) : ( { + return ( +
+ +
+ ); + }; + + const stateTemplate = (rowData) => { + return ( +
+ +
+ ); + }; + + return ( + +
+ } + > + + + + + + ); +} diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/views/mappings/ContentTypeMapper.js b/components/inspectit-ocelot-configurationserver-ui/src/components/views/mappings/ContentTypeMapper.js index 092dc1cb6f..061ec16fb7 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/views/mappings/ContentTypeMapper.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/views/mappings/ContentTypeMapper.js @@ -1,6 +1,6 @@ /** * mapping function that returns all values needed to setup the download of a file for a given content-type - * explicitly mapped contentTypes are 'config' and 'log', everything else will default to a plain .txt configuration + * explicitly mapped contentTypes are 'config', 'log' and 'archive', everything else will default to a plain .txt configuration * @param contentType * @param contextName * @returns {{fileExtension: string, header: string, language: string, mimeType: string}} @@ -22,6 +22,13 @@ export const ContentTypeMapper = (contentType, contextName) => { mimeType: 'text/plain', header: 'Logs of ' + contextName, }; + case 'archive': + return { + language: '', + fileExtension: '', + mimeType: '', + header: 'Preparing Download of the Support Archive for ' + contextName, + }; default: return { language: 'plaintext', diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusTable.js b/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusTable.js index f5e828d63e..40e3be76fe 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusTable.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusTable.js @@ -6,8 +6,8 @@ import dateformat from 'dateformat'; import TimeAgo from 'react-timeago'; import { map } from 'lodash'; import classnames from 'classnames'; -import { linkPrefix } from '../../../lib/configuration'; import classNames from 'classnames'; +import { linkPrefix } from '../../../lib/configuration'; const timeFormatter = (time, unit, suffix) => { if (unit === 'second') { @@ -53,18 +53,22 @@ class AgentMappingCell extends React.Component { display: flex; align-items: stretch; } + .mapping-name { flex: 1; margin-right: 0.5rem; } + .no-mapping { color: gray; font-style: italic; } + .show-attributes { float: right; cursor: pointer; } + .attributes { margin-top: 0.5rem; border-left: 0.25rem solid #ddd; @@ -98,25 +102,60 @@ class StatusTable extends React.Component { state = { configurationValue: '', logValue: '', + showServiceStateDialog: false, + }; + + resolveServiceAvailability = (metaInformation) => { + const { agentVersion } = metaInformation; + const agentVersionTokens = agentVersion.split('.'); + let logAvailable = false; + let agentCommandsEnabled = true; + let serviceStatesAvailable = false; + let supportArchiveAvailable = false; + let serviceStates = '{}'; + + // in case of snapshot version, assume we are up to date + if (agentVersion == 'SNAPSHOT') { + logAvailable = agentCommandsEnabled = serviceStatesAvailable = supportArchiveAvailable = true; + } else if (agentVersionTokens.length === 2 || agentVersionTokens.length === 3) { + const agentVersionNumber = + agentVersionTokens[0] * 10000 + agentVersionTokens[1] * 100 + (agentVersionTokens.length === 3 ? agentVersionTokens[2] * 1 : 0); + // logs are available at version 1.15+ + logAvailable = agentVersionNumber > 11500; + // support archive is available at version 2.2.0+ + supportArchiveAvailable = agentVersionNumber >= 20200; + // service states are available at version 2.2.0+ + serviceStatesAvailable = agentVersionNumber >= 20200; + } + + if (serviceStatesAvailable) { + try { + serviceStates = JSON.parse(metaInformation.serviceStates); + logAvailable = serviceStates.LogPreloader; + agentCommandsEnabled = serviceStates.AgentCommandService; + supportArchiveAvailable = agentCommandsEnabled; + } catch (e) { + //ignore + } + } + return { + logAvailable: logAvailable, + agentCommandsEnabled: agentCommandsEnabled, + serviceStatesAvailable: serviceStatesAvailable, + supportArchiveAvailable: supportArchiveAvailable, + serviceStates: serviceStates, + }; }; nameTemplate = (rowData) => { - const { onShowDownloadDialog } = this.props; + const { onShowDownloadDialog, onShowServiceStateDialog } = this.props; const { metaInformation, attributes, attributes: { service }, } = rowData; - const { agentVersion } = metaInformation; - - const agentVersionTokens = agentVersion.split('.'); - let logAvailable = true; - if (agentVersionTokens.length == 2 || agentVersionTokens.length == 3) { - const agentVersionNumber = - agentVersionTokens[0] * 10000 + agentVersionTokens[1] * 100 + (agentVersionTokens.length == 3 ? agentVersionTokens[2] * 1 : 0); - logAvailable = agentVersionNumber > 11500; - } + let { logAvailable, agentCommandsEnabled, serviceStatesAvailable, serviceStates } = this.resolveServiceAvailability(metaInformation); let name = '-'; let agentIdElement; let agentId = null; @@ -127,12 +166,14 @@ class StatusTable extends React.Component { agentId = metaInformation.agentId; agentIdElement = ({agentId}); } + return (
- {name} {agentIdElement}{' '} + + {name} {agentIdElement} + {rowData.count > 1 ? ( {rowData.count} ) : null} +
); }; + setServiceStateDialogShown = (showDialog) => { + this.setState({ + showServiceStateDialog: showDialog, + }); + }; + iconTemplate = (rowData) => { const { metaInformation } = rowData; @@ -216,7 +300,13 @@ class StatusTable extends React.Component { }; agentHealthTemplate = (rowData) => { - const { health } = rowData; + const { onShowHealthStateDialog } = this.props; + const { healthState, metaInformation } = rowData; + const { health } = healthState; + const { agentId } = metaInformation; + const { onShowDownloadDialog } = this.props; + + let { agentCommandsEnabled, supportArchiveAvailable } = this.resolveServiceAvailability(metaInformation); let healthInfo; let iconClass; @@ -238,18 +328,44 @@ class StatusTable extends React.Component { iconColor = '#e8c413'; break; } + return ( <> {health ? ( -
+
onShowHealthStateDialog(agentId, healthState)}> {healthInfo} +
) : ( '-' @@ -305,12 +421,15 @@ class StatusTable extends React.Component { display: flex; align-items: center; } + .pi { margin-right: 0.5rem; } + .pi.live { color: #ef5350; } + .pi.workspace { color: #616161; } diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusView.js b/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusView.js index 7d764b638b..f0b1e10e17 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusView.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusView.js @@ -5,8 +5,11 @@ import StatusTable from './StatusTable'; import StatusToolbar from './StatusToolbar'; import StatusFooterToolbar from './StatusFooterToolbar'; import axios from '../../../lib/axios-api'; -import { map, isEqual } from 'lodash'; +import { isEqual, map } from 'lodash'; import DownloadDialogue from '../dialogs/DownloadDialogue'; +import ServiceStateDialog from '../dialogs/ServiceStateDialog'; +import { downloadArchiveFromJson } from '../../../functions/export-selection.function'; +import AgentHealthStateDialogue from "./dialogs/AgentHealthStateDialogue"; /** * The view presenting a list of connected agents, their mapping and when they last connected to the server. @@ -22,7 +25,10 @@ class StatusView extends React.Component { useServiceMerge: true, error: false, agentsToShow: props.agents, - isDownloadDialogShown: false, + showDownloadDialog: false, + showHealthStateDialog: false, + isServiceStateDialogShown: false, + serviceStates: '{}', attributes: '', contentValue: '', contentType: '', @@ -76,7 +82,6 @@ class StatusView extends React.Component { const agentFilter = this.getAgentFilter(agent); return this.checkRegex(agentFilter, regex); }); - this.setState( { error: false, @@ -134,10 +139,9 @@ class StatusView extends React.Component { } return result; }, {}); - this.setState({ error: false, - agentsToShow: mergedMap, + agentsToShow: Object.values(mergedMap), }); } }; @@ -198,11 +202,11 @@ class StatusView extends React.Component { useServiceMerge, error, readOnly, - isDownloadDialogShown, + showDownloadDialog, + showHealthStateDialog, contentValue, contentType, contentLoadingFailed, - isLoading, agentId, } = this.state; @@ -234,20 +238,37 @@ class StatusView extends React.Component { />
- +
this.setDownloadDialogShown(false)} + visible={showDownloadDialog} + onHide={() => this.setShowDownloadDialog(false)} error={contentLoadingFailed} loading={isLoading} contentValue={contentValue} contentType={contentType} contextName={'Agent ' + agentId} /> + this.setShowHealthStateDialog(false)} + contentValue={this.state.attributes} + contextName={'Agent ' + agentId} + /> + this.setServiceStateDialogShown(false)} + serviceStateMap={this.state.serviceStates} + /> ); @@ -269,14 +290,39 @@ class StatusView extends React.Component { } }; - setDownloadDialogShown = (showDialog) => { + /* + * SERVICE STATE DIALOG + */ + setServiceStateDialogShown = (showDialog) => { + this.setState({ + isServiceStateDialogShown: showDialog, + }); + }; + + showServiceStateDialog = (serviceStates) => { + this.setServiceStateDialogShown(true); + this.setState({ + serviceStates: serviceStates, + }); + }; + + /* + * DOWNLOAD DIALOG + */ + setShowDownloadDialog = (showDialog) => { this.setState({ - isDownloadDialogShown: showDialog, + showDownloadDialog: showDialog, + }); + }; + + setShowHealthStateDialog = (showDialog) => { + this.setState({ + showHealthStateDialog: showDialog, }); }; showDownloadDialog = (agentId, attributes, contentType) => { - this.setDownloadDialogShown(true); + this.setShowDownloadDialog(true); this.setState( { agentId, @@ -292,14 +338,55 @@ class StatusView extends React.Component { case 'log': this.fetchLog(agentId); break; + case 'archive': + this.downloadSupportArchive(agentId, attributes); + break; default: - this.setDownloadDialogShown(false); + this.setShowDownloadDialog(false); break; } } ); }; + showHealthStateDialog = (agentId, attributes) => { + this.setShowHealthStateDialog(true); + this.setState( + { + agentId, + attributes, + }, + ); + }; + + downloadSupportArchive = (agentId, agentVersion) => { + this.setState( + { + isLoading: true, + }, + () => { + axios + .get('/agent/supportArchive', { + params: { 'agent-id': agentId }, + }) + .then((res) => { + this.setState({ + isLoading: false, + }); + downloadArchiveFromJson(res.data, agentId, agentVersion); + this.setDownloadDialogShown(false); + }) + .catch(() => { + this.setState({ + contentValue: null, + contentLoadingFailed: true, + isLoading: false, + }); + }); + } + ); + }; + fetchConfiguration = (attributes) => { const requestParams = attributes; if (!requestParams) { diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/dialogs/AgentHealthStateDialogue.js b/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/dialogs/AgentHealthStateDialogue.js new file mode 100644 index 0000000000..c4b6538430 --- /dev/null +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/dialogs/AgentHealthStateDialogue.js @@ -0,0 +1,156 @@ +import React from 'react'; +import { Dialog } from 'primereact/dialog'; +import { Button } from 'primereact/button'; +import PropTypes from 'prop-types'; + +/** + * Dialog that shows the given content, applying syntax highlighting if available, and offering a download option + */ +const AgentHealthStateDialogue = ({ visible, onHide, error, contentValue, contextName }) => { + + const { health, source, message, history } = contentValue + const { healthInfo, iconColor } = resolveHealthState(health); + + let latestIncidentElement = <>There are no incidents. + + if(source && message) { + latestIncidentElement = <> +
+

+ Latest Incident: +

+
+
+ {source}: {message} +
+
+ + } + + const historyElements = []; + if(history && history.length > 0) { + historyElements.push( +
+

+ History: +

+
+ ) + history.forEach(value => { + const { time, source, health, message } = value; + const { healthInfo, iconColor } = resolveHealthState(health); + historyElements.push( +
+ {time} {healthInfo} {source}:
{message} +
+
) + }) + } + return ( + <> + + +
+ } + > + { error ? ( +
+ +
+ ) : ( + <> +
+

The agent is in an + {healthInfo} + state +

+
+ {latestIncidentElement} +
+ {historyElements} +
+ + )} + + + ); +}; + +AgentHealthStateDialogue.propTypes = { + /** Whether a error is thrown */ + error: PropTypes.bool, + /** Whether the dialog is visible */ + visible: PropTypes.bool, + /** Callback on dialog hide */ + onHide: PropTypes.func, + /** The string value being displayed. E.g. the logs.*/ + contentValue: PropTypes.string, + /** The type of content. E.g. config or log.*/ + contentType: PropTypes.string, + /** The name of the data's context. E.g. the agent whose logs are being shown.*/ + contextName: PropTypes.string, +}; + +AgentHealthStateDialogue.defaultProps = { + error: false, + visible: true, + onHide: () => {}, + contentValue: 'No content found', + contentType: '', +}; + + +const resolveHealthState = (health) => { + switch (health) { + case 'OK': + return { + healthInfo: ' OK ', + iconClass: 'pi-check-circle', + iconColor: '#0abd04', + }; + case 'WARNING': + return { + healthInfo: ' Warning ', + iconClass: 'pi-minus-circle', + iconColor: '#e8c413', + }; + } + return { + healthInfo: ' Error ', + iconClass: 'pi-times-circle', + iconColor: 'red', + }; +} + +export default AgentHealthStateDialogue; diff --git a/components/inspectit-ocelot-configurationserver-ui/src/data/constants.js b/components/inspectit-ocelot-configurationserver-ui/src/data/constants.js index 0a4ad60af0..03a8b25016 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/data/constants.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/data/constants.js @@ -54,3 +54,9 @@ export const TOOLTIP_OPTIONS = { showDelay: 1000, position: 'top', }; + +/** + * Name pattern for hidden files. + * @type {string} + */ +export const HIDDEN_FILES_NAME_PATTERN = '^\\.'; diff --git a/components/inspectit-ocelot-configurationserver-ui/src/functions/export-selection.function.js b/components/inspectit-ocelot-configurationserver-ui/src/functions/export-selection.function.js index 99e92448dc..2b97db4887 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/functions/export-selection.function.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/functions/export-selection.function.js @@ -82,3 +82,31 @@ function loadAndCompressSubFolderContent(subFolderPath, subFolderName, subFolder } }); } + +export function downloadArchiveFromJson(json, agentId, agentVersion) { + for (let key of Object.keys(json)) { + let content = json[key]; + let mimetype = 'text/plain;charset=utf-8'; + let fileExtension = '.txt'; + + switch (key) { + case 'currentConfig': + mimetype = 'text/x-yaml;charset=utf-8'; + fileExtension = '.yml'; + break; + case 'logs': + fileExtension = '.log'; + break; + } + + if (typeof content === 'object') { + content = JSON.stringify(content, null, 2); + } + const file = new Blob([content], { type: mimetype }); + zip.file(`${key}${fileExtension}`, file); + } + zip + .generateAsync({ type: 'blob' }) + .then((archive) => saveAs(archive, `${agentId}_${agentVersion}.zip`)) + .finally((zip = new JSZip())); +} diff --git a/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/actions.js b/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/actions.js index 765c31d217..d75e520748 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/actions.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/actions.js @@ -1,4 +1,4 @@ -import { DEFAULT_CONFIG_TREE_KEY, VERSION_LIMIT } from '../../../data/constants'; +import { DEFAULT_CONFIG_TREE_KEY, HIDDEN_FILES_NAME_PATTERN, VERSION_LIMIT } from '../../../data/constants'; import axios from '../../../lib/axios-api'; import { configurationUtils } from '.'; import { notificationActions } from '../notification'; @@ -34,7 +34,7 @@ export const fetchVersions = () => { */ export const fetchFiles = (newSelectionOnSuccess) => { return (dispatch, getState) => { - const { selectedVersion } = getState().configuration; + const { selectedVersion, showHiddenFiles } = getState().configuration; const params = {}; if (selectedVersion) { @@ -47,12 +47,15 @@ export const fetchFiles = (newSelectionOnSuccess) => { .then((payload) => { const files = payload; sortFiles(files); + if (!showHiddenFiles) { + hideFilesRecursively(files, HIDDEN_FILES_NAME_PATTERN); + } dispatch({ type: types.FETCH_FILES_SUCCESS, payload: { files } }); if (newSelectionOnSuccess) { dispatch(selectFile(newSelectionOnSuccess)); } }) - .catch(dispatch({ type: types.FETCH_FILES_FAILURE })); + .catch(() => dispatch({ type: types.FETCH_FILES_FAILURE })); }; }; @@ -239,7 +242,7 @@ export const exportSelection = (fetchFilesOnSuccess, selectedFile = null) => { downloadSelection(fileContent, file.name); dispatch({ type: types.FETCH_FILE_SUCCESS, payload: { fileContent } }); }) - .catch(dispatch({ type: types.FETCH_FILE_FAILURE })); + .catch(() => dispatch({ type: types.FETCH_FILE_FAILURE })); } else { getDirectories(params) .then((payload) => { @@ -256,6 +259,34 @@ export const exportSelection = (fetchFilesOnSuccess, selectedFile = null) => { }; }; +/** + * Either removes files that start with '.' or fetches files depending on if files are hidden. + */ +export const toggleShowHiddenFiles = () => { + return (dispatch) => { + dispatch({ type: types.TOGGLE_SHOW_HIDDEN_FILES }); + dispatch(fetchFiles()); + }; +}; + +/** + * Recursively removes files that match the regex + * @param {array} files - the array of files + * @param {string} regex + */ +const hideFilesRecursively = (files, regex) => { + for (let i = 0; i <= files.length; i++) { + if (!files[i]) { + continue; + } + if (files[i].name.match(regex)) { + files.splice(i--, 1); + } else if (files[i].children) { + hideFilesRecursively(files[i].children, regex); + } + } +}; + /** * Attempts to write the given contents to the given file. * @@ -378,7 +409,7 @@ export const selectedFileContentsChanged = (content) => ({ */ export const selectVersion = (version, reloadFiles = true) => { return (dispatch) => { - // chaning the selected version + // changing the selected version dispatch({ type: types.SELECT_VERSION, payload: { diff --git a/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/reducers.js b/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/reducers.js index ec4ea9b9fd..bc97f51936 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/reducers.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/reducers.js @@ -211,6 +211,13 @@ const configurationReducer = createReducer(initialState)({ currentSidebar: state.currentSidebar == SidebarTypes.CONFIGURATION_DOCS ? SidebarTypes.NONE : SidebarTypes.CONFIGURATION_DOCS, }; }, + + [types.TOGGLE_SHOW_HIDDEN_FILES]: (state) => { + return { + ...state, + showHiddenFiles: !state.showHiddenFiles, + }; + }, }); export default configurationReducer; diff --git a/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/selectors.js b/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/selectors.js index 81ec9e7da1..e9e4bec8fd 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/selectors.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/selectors.js @@ -1,7 +1,7 @@ import { createSelector } from 'reselect'; import { map, find, get } from 'lodash'; import { getFile, isDirectory } from './utils'; -import { DEFAULT_CONFIG_TREE_KEY } from '../../../data/constants'; +import { DEFAULT_CONFIG_TREE_KEY, HIDDEN_FILES_NAME_PATTERN } from '../../../data/constants'; const configurationSelector = (state) => state.configuration; @@ -26,6 +26,15 @@ const resolveFileTypeToIcon = (type) => { return 'pi pi-fw ' + get(filetypeIconMapping, type, filetypeIconMapping['_default']); }; +/** + * Resolves the className for a given file in the tree + * @param file The file to resolve the className for + * @returns {string} The className + */ +const resolveFileToClassName = (file) => { + return file.name.match(HIDDEN_FILES_NAME_PATTERN) ? 'cm-hidden-file-tree-label' : ''; +}; + /** * The logic to determine whether the given version is the latest one. The front-end assumes, that * the latest version is on index 0 in the versions array provided by the backend. @@ -64,6 +73,7 @@ const _asTreeNode = (parentKey, node, unsavedFileContents, isLatest) => { key, label: labelValue, icon: resolveFileTypeToIcon(type), + className: resolveFileToClassName(node), children: map(node.children, (child) => _asTreeNode(key + '/', child, unsavedFileContents, isLatest)), }; } else { @@ -72,6 +82,7 @@ const _asTreeNode = (parentKey, node, unsavedFileContents, isLatest) => { key, label: labelValue, icon: resolveFileTypeToIcon(type), + className: resolveFileToClassName(node), }; } }; diff --git a/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/types.js b/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/types.js index 60cbf659dd..f3f6fcc317 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/types.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/configuration/types.js @@ -14,6 +14,8 @@ export const DELETE_SELECTION_STARTED = 'configuration/DELETE_SELECTION_STARTED' export const DELETE_SELECTION_FAILURE = 'configuration/DELETE_SELECTION_FAILURE'; export const DELETE_SELECTION_SUCCESS = 'configuration/DELETE_SELECTION_SUCCESS'; +export const TOGGLE_SHOW_HIDDEN_FILES = 'configuration/TOGGLE_SHOW_HIDDEN_FILES'; + export const EXPORT_SELECTION_STARTED = 'configuration/EXPORT_SELECTION_STARTED'; export const EXPORT_SELECTION_FAILURE = 'configuration/EXPORT_SELECTION_FAILURE'; export const EXPORT_SELECTION_SUCCESS = 'configuration/EXPORT_SELECTION_SUCCESS'; diff --git a/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/initial-states.js b/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/initial-states.js index f21dc870e7..52280812d0 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/initial-states.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/redux/ducks/initial-states.js @@ -24,6 +24,8 @@ const configuration = { versions: [], /** The existing configuration files. */ files: [], + /** Indicates if hidden files ares shown. */ + showHiddenFiles: false, /** * The history of file-move operations which were executed successfully. * When the files are refetched, it can occur that the selection points to a non existing file. diff --git a/components/inspectit-ocelot-configurationserver-ui/src/redux/middlewares/logger.js b/components/inspectit-ocelot-configurationserver-ui/src/redux/middlewares/logger.js index 94a2e3236c..b02d9abf29 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/redux/middlewares/logger.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/redux/middlewares/logger.js @@ -7,21 +7,25 @@ const STARTED = ['background: darkorange', 'color: white'].join(';'); const FAILURE = ['background: red', 'color: white'].join(';'); -const createLogger = (active = true) => (store) => (next) => (action) => { - if (!active || typeof action === 'function') { - return next(action); - } - - const prevState = store.getState(); - const result = next(action); - const nextState = store.getState(); - logGroupCollapsed(`%c ${action.type} `, determineStyle(action)); - logInfo('%cprev state', 'color: darkorange', prevState); - logInfo('%caction payload', 'color: blue', action.payload); - logInfo('%cnext state', 'color: darkgreen', nextState); - logGroupEnd(); - return result; -}; +const createLogger = + (active = true) => + (store) => + (next) => + (action) => { + if (!active || typeof action === 'function') { + return next(action); + } + + const prevState = store.getState(); + const result = next(action); + const nextState = store.getState(); + logGroupCollapsed(`%c ${action.type} `, determineStyle(action)); + logInfo('%cprev state', 'color: darkorange', prevState); + logInfo('%caction payload', 'color: blue', action.payload); + logInfo('%cnext state', 'color: darkgreen', nextState); + logGroupEnd(); + return result; + }; export default createLogger; diff --git a/components/inspectit-ocelot-configurationserver-ui/src/redux/utils/createReducer.js b/components/inspectit-ocelot-configurationserver-ui/src/redux/utils/createReducer.js index f0352fe203..ae94b0ee16 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/redux/utils/createReducer.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/redux/utils/createReducer.js @@ -1,5 +1,7 @@ /* eslint default-param-last: 0 */ -export default (initialState) => (reducerMap) => (state = initialState, action) => { - const reducer = reducerMap[action.type]; - return reducer ? reducer(state, action) : state; -}; +export default (initialState) => + (reducerMap) => + (state = initialState, action) => { + const reducer = reducerMap[action.type]; + return reducer ? reducer(state, action) : state; + }; diff --git a/components/inspectit-ocelot-configurationserver-ui/yarn.lock b/components/inspectit-ocelot-configurationserver-ui/yarn.lock index 1ad7473ce6..c5dcb8fb55 100644 --- a/components/inspectit-ocelot-configurationserver-ui/yarn.lock +++ b/components/inspectit-ocelot-configurationserver-ui/yarn.lock @@ -2,47 +2,64 @@ # yarn lockfile v1 -"@ampproject/toolbox-core@^2.0.0", "@ampproject/toolbox-core@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-core/-/toolbox-core-2.1.0.tgz#871545808d6fa21cbcf97eff450d60a65a437c4c" - integrity sha512-8xwrkoaf515dsigSIytdeX1ZqMlHyza+0DXUr45NTv53uFQxiUIjGNv0VNaK+3YLTCPB0dOgQ9kNHqjDz5Ep2g== +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: - cross-fetch "3.0.4" + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" -"@ampproject/toolbox-optimizer@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.0.1.tgz#943681faf24443044aa66f0b55eefb13cdcc068c" - integrity sha512-zroXqrV7mY77+/6hV7kaaWxp4LA85V0B/2vg7WdF+FrwiO9Wior/lIW8UbpRek6INjw0VOp1ED73MmGJkwaDhA== - dependencies: - "@ampproject/toolbox-core" "^2.0.0" - "@ampproject/toolbox-runtime-version" "^2.0.0" - "@ampproject/toolbox-script-csp" "^2.0.0" - "@ampproject/toolbox-validator-rules" "^2.0.0" - css "2.2.4" +"@ampproject/toolbox-core@2.9.0", "@ampproject/toolbox-core@^2.6.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-core/-/toolbox-core-2.9.0.tgz#41dc4e6453eb22ebf9ba38995cf7c53a4622648c" + integrity sha512-6buaJ85PIb9tPiYoEC/eeVk42n2eR6MVEzstPmCvkFo7Y0jIsz6xp29h0LLY9LKLvHAFYPxGeP1RDyJdVmR+mA== + dependencies: + cross-fetch "3.1.5" + lru-cache "6.0.0" + +"@ampproject/toolbox-optimizer@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.6.0.tgz#e1bde0697d0fb25ab888bc0d0422998abaf6bad1" + integrity sha512-saToXVopb15a6zKK6kW4B1N/sYZZddkECcqmfTotRxJ2DaLE+wFB6jgWLbaPkgHwvLPQyA2IjV9BHJ/KUFuGzg== + dependencies: + "@ampproject/toolbox-core" "^2.6.0" + "@ampproject/toolbox-runtime-version" "^2.6.0" + "@ampproject/toolbox-script-csp" "^2.5.4" + "@ampproject/toolbox-validator-rules" "^2.5.4" + abort-controller "3.0.0" + cross-fetch "3.0.5" + cssnano-simple "1.0.5" + dom-serializer "1.0.1" domhandler "3.0.0" - domutils "2.0.0" + domutils "2.1.0" htmlparser2 "4.1.0" + https-proxy-agent "5.0.0" + lru-cache "6.0.0" + node-fetch "2.6.0" normalize-html-whitespace "1.0.0" - terser "4.6.7" + postcss "7.0.32" + postcss-safe-parser "4.0.2" + terser "4.8.0" -"@ampproject/toolbox-runtime-version@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.1.0.tgz#4a0738a33420e108cc87c0eceaed5f6ba049e735" - integrity sha512-2nQy9tT4uqQG/MqhmWrbC05hQxuX2g//CHbIBfA4kLOt/QlHiAqv4Yjqe3SAeCMEbhejnPj+rYs67JogrDYbKA== +"@ampproject/toolbox-runtime-version@^2.6.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.9.0.tgz#3be5af6dd7b5b54c5dd6d7c4f1efeddee3f62067" + integrity sha512-gLjra9Bg5Z8leUzLKQDetpYm2XlgRZJLOEV9JLVyaZLLihn79D4DnfyZO1sZZVoQIjn8+x/PU+Pn7K2qO+GF9A== dependencies: - "@ampproject/toolbox-core" "^2.1.0" + "@ampproject/toolbox-core" "2.9.0" -"@ampproject/toolbox-script-csp@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-script-csp/-/toolbox-script-csp-2.1.0.tgz#f8cb649cdb0ee5c051cc2efba9da04de851700aa" - integrity sha512-TfJjlA45yDTXHw0C58MpRTxufvcaU9Vp+m1Hmiehqvontfcqul712PflN2JHArJCSpUDo5yU0A7mWpGo+2wOpA== +"@ampproject/toolbox-script-csp@^2.5.4": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-script-csp/-/toolbox-script-csp-2.9.0.tgz#1f40037a32c36c19848ff5d4e0fdb1a5f68d6de0" + integrity sha512-mYRWk8UjkzkOJnaUafwMTgscuInPjt2WzhySep5Yk/xNOg09Jv77Mm3/nrc4LOEZzBGAhQZldHuJ70l9U+48xw== -"@ampproject/toolbox-validator-rules@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.1.0.tgz#206d80b3660879deae04cdf70fa7473ab49c2680" - integrity sha512-3RQeYpAJR8v+7hgH69gHp+v1RNhGaPb8eSwnzVBES8KybgDkWbE/mvYO95Q4PNkgWeYWK/QM5OyivLCtZanQ2Q== +"@ampproject/toolbox-validator-rules@^2.5.4": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.9.0.tgz#b8a6cffd4e7d228c483dc149f6491304ef45611d" + integrity sha512-cQbD3u1c5CZRib5kv92RM2GCirOwyZleqlBzkZlATU3ILOAlnEFAVzTXq6K7sf0zet9MTsVctmbiVXDcE7COew== dependencies: - cross-fetch "3.0.4" + cross-fetch "3.1.5" "@babel/code-frame@7.10.4": version "7.10.4" @@ -51,31 +68,17 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: - "@babel/highlight" "^7.8.3" + "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" - integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== +"@babel/compat-data@^7.11.0", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0", "@babel/compat-data@^7.20.1": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.1.tgz#f2e6ef7790d8c8dbf03d379502dcc246dcce0b30" + integrity sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ== "@babel/core@7.12.9": version "7.12.9" @@ -99,18 +102,18 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.2.tgz#ea5b99693bcfc058116f42fa1dd54da412b29d91" - integrity sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ== +"@babel/core@7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" + integrity sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.2" - "@babel/helpers" "^7.7.0" - "@babel/parser" "^7.7.2" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.7.2" + "@babel/generator" "^7.7.7" + "@babel/helpers" "^7.7.4" + "@babel/parser" "^7.7.7" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" convert-source-map "^1.7.0" debug "^4.1.0" json5 "^2.1.0" @@ -119,161 +122,90 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.14.3", "@babel/core@^7.7.5": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38" - integrity sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.3" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helpers" "^7.14.0" - "@babel/parser" "^7.14.3" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" +"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.7.5": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.2.tgz#8dc9b1620a673f92d3624bd926dc49a52cf25b92" + integrity sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.2" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-module-transforms" "^7.20.2" + "@babel/helpers" "^7.20.1" + "@babel/parser" "^7.20.2" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.1" + "@babel/types" "^7.20.2" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" + json5 "^2.2.1" semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.14.2", "@babel/generator@^7.14.3": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91" - integrity sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA== - dependencies: - "@babel/types" "^7.14.2" - jsesc "^2.5.1" - source-map "^0.5.0" -"@babel/generator@^7.7.2", "@babel/generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" - integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== +"@babel/eslint-parser@^7.18.9": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4" + integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ== dependencies: - "@babel/types" "^7.7.4" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" -"@babel/generator@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9" - integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ== +"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.20.1", "@babel/generator@^7.20.2", "@babel/generator@^7.7.7": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.4.tgz#4d9f8f0c30be75fd90a0562099a26e5839602ab8" + integrity sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA== dependencies: - "@babel/types" "^7.9.5" + "@babel/types" "^7.20.2" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== - dependencies: - "@babel/types" "^7.12.13" -"@babel/helper-annotate-as-pure@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" - integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.18.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" - integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== +"@babel/helper-compilation-targets@^7.10.4", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" + integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== dependencies: - "@babel/helper-explode-assignable-expression" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-builder-react-jsx@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.4.tgz#da188d247508b65375b2c30cf59de187be6b0c66" - integrity sha512-kvbfHJNN9dg4rkEM4xn1s8d1/h6TYNvajy9L1wx4qLn9HFg0IkTsQi4rfBe92nxrPUFcMsHoMV+8rU7MJb3fCA== - dependencies: - "@babel/types" "^7.7.4" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" - integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== - dependencies: - "@babel/helper-hoist-variables" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" - integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== - dependencies: - "@babel/compat-data" "^7.13.15" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" + "@babel/compat-data" "^7.20.0" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0", "@babel/helper-create-class-features-plugin@^7.14.2", "@babel/helper-create-class-features-plugin@^7.14.3": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz#832111bcf4f57ca57a4c5b1a000fc125abc6554a" - integrity sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.14.3" - "@babel/helper-split-export-declaration" "^7.12.13" - -"@babel/helper-create-class-features-plugin@^7.7.0", "@babel/helper-create-class-features-plugin@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" - integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== - dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-member-expression-to-functions" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz#149aa6d78c016e318c43e2409a0ae9c136a86688" - integrity sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA== +"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz#3c08a5b5417c7f07b5cf3dfb6dc79cbec682e8c2" + integrity sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - regexpu-core "^4.7.1" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-split-export-declaration" "^7.18.6" -"@babel/helper-create-regexp-features-plugin@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" - integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b" + integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== dependencies: - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" - -"@babel/helper-define-map@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" - integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== - dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/types" "^7.7.4" - lodash "^4.17.13" + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" "@babel/helper-define-polyfill-provider@^0.1.5": version "0.1.5" @@ -289,520 +221,323 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-define-polyfill-provider@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.1.tgz#e6f5f4a6edc3722152c21359190de67fc6cf664d" - integrity sha512-x3AUTVZNPunaw1opRTa5OwVA5N0YxGlIad9xQ5QflK1uIS7PnAGGU5O2Dj/G183fR//N8AzTq+Q8+oiu9m0VFg== +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== - dependencies: - "@babel/types" "^7.13.0" - -"@babel/helper-explode-assignable-expression@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" - integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== - dependencies: - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== -"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" - integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.14.2" + "@babel/types" "^7.18.6" -"@babel/helper-function-name@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" - integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: - "@babel/helper-get-function-arity" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" -"@babel/helper-function-name@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" - integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.9.5" + "@babel/types" "^7.18.6" -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.18.9" -"@babel/helper-get-function-arity@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" - integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.18.6" -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" - integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6", "@babel/helper-module-transforms@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz#ac53da669501edd37e658602a21ba14c08748712" + integrity sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA== dependencies: - "@babel/traverse" "^7.13.15" - "@babel/types" "^7.13.16" - -"@babel/helper-hoist-variables@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" - integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== - dependencies: - "@babel/types" "^7.7.4" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.1" + "@babel/types" "^7.20.2" -"@babel/helper-member-expression-to-functions@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" - integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-member-expression-to-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" - integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== - dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.7.0", "@babel/helper-module-imports@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" - integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== - dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" - integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== - dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" - -"@babel/helper-module-transforms@^7.7.0", "@babel/helper-module-transforms@^7.7.4", "@babel/helper-module-transforms@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835" - integrity sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw== - dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-simple-access" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" - lodash "^4.17.13" - -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-optimise-call-expression@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" - integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== - dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.18.6" "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== - -"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== - -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" - integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== - dependencies: - lodash "^4.17.13" - -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-remap-async-to-generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" - integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-wrap-function" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12", "@babel/helper-replace-supers@^7.14.3": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz#ca17b318b859d107f0e9b722d58cf12d94436600" - integrity sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" - -"@babel/helper-replace-supers@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" - integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-simple-access@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" - integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-simple-access@^7.7.0", "@babel/helper-simple-access@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" - integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== - dependencies: - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-split-export-declaration@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" - integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== - dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" - integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== - -"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" - integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== - -"@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - -"@babel/helper-wrap-function@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-wrap-function@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" - integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== - dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helpers@^7.12.5", "@babel/helpers@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" - integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" - -"@babel/helpers@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" - integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== - dependencies: - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + +"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" + integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.19.1" + "@babel/types" "^7.19.0" + +"@babel/helper-simple-access@^7.10.4", "@babel/helper-simple-access@^7.19.4", "@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== + dependencies: + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10", "@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.9": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz#89f18335cff1152373222f76a4b37799636ae8b1" + integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.20.1", "@babel/helpers@^7.7.4": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.1.tgz#2ab7a0fcb0a03b5bf76629196ed63c2d7311f4c9" + integrity sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg== + dependencies: + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.1" + "@babel/types" "^7.20.0" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" - esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" - integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - chalk "^2.0.0" - js-tokens "^4.0.0" +"@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2", "@babel/parser@^7.7.7": + version "7.20.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2" + integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg== -"@babel/highlight@^7.8.3": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" - integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: - "@babel/helper-validator-identifier" "^7.9.0" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.12.11", "@babel/parser@^7.12.13", "@babel/parser@^7.12.7", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.3.tgz#9b530eecb071fd0c93519df25c5ff9f14759f298" - integrity sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ== - -"@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" - integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== - -"@babel/parser@^7.7.2", "@babel/parser@^7.7.4": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71" - integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig== + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" - integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" -"@babel/plugin-proposal-async-generator-functions@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz#3a2085abbf5d5f962d480dbc81347385ed62eb1e" - integrity sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ== +"@babel/plugin-proposal-async-generator-functions@^7.10.4", "@babel/plugin-proposal-async-generator-functions@^7.20.1": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz#352f02baa5d69f4e7529bdac39aaa02d41146af9" + integrity sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-async-generator-functions@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" - integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.4" - "@babel/plugin-syntax-async-generators" "^7.7.4" - -"@babel/plugin-proposal-class-properties@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.0.tgz#ac54e728ecf81d90e8f4d2a9c05a890457107917" - integrity sha512-tufDcFA1Vj+eWvwHN+jvMN6QsV5o+vUlytNKrbMiCeDL0F2j92RURzUsUMWE5EJkLyWxjdUslCsMQa9FWth16A== +"@babel/plugin-proposal-class-properties@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== +"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.13.11": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz#5a527e2cae4a4753119c3a3e7f64ecae8ccf1360" - integrity sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ== +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.3" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-class-static-block" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.12.12": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.2.tgz#e68c3c5e4a6a08834456568256fc3e71b93590cf" - integrity sha512-LauAqDd/VjQDtae58QgBcEOE42NNP+jB2OE+XeC3KBI/E+BhhRjtr5viCIrj1hmu1YvrguLipIPRJZmS5yUcFw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.2" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-decorators" "^7.12.13" - -"@babel/plugin-proposal-dynamic-import@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz#01ebabd7c381cff231fa43e302939a9de5be9d9f" - integrity sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz#1c6c32b2a44b154ebeec2bb534f9eaebdb541fb6" + integrity sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.20.2" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/plugin-syntax-decorators" "^7.19.0" + +"@babel/plugin-proposal-dynamic-import@^7.10.4", "@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-dynamic-import@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" - integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.7.4" - "@babel/plugin-proposal-export-default-from@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz#f110284108a9b2b96f01b15b3be9e54c2610a989" - integrity sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA== + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz#091f4794dbce4027c03cf4ebc64d3fb96b75c206" + integrity sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-export-default-from" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-default-from" "^7.18.6" -"@babel/plugin-proposal-export-namespace-from@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz#62542f94aa9ce8f6dba79eec698af22112253791" - integrity sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ== +"@babel/plugin-proposal-export-namespace-from@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" + integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz#830b4e2426a782e8b2878fbfe2cba85b70cbf98c" - integrity sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA== +"@babel/plugin-proposal-export-namespace-from@^7.10.4", "@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" - integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== +"@babel/plugin-proposal-json-strings@^7.10.4", "@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz#222348c080a1678e0e74ea63fe76f275882d1fd7" - integrity sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg== +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0", "@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.7.4.tgz#7db302c83bc30caa89e38fee935635ef6bd11c28" - integrity sha512-TbYHmr1Gl1UC7Vo2HVuj/Naci5BEGNZ0AJhzqD2Vpr6QPFWpUmBRLrIDjedzx7/CShq0bRDS2gI4FIs77VHLVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.7.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz#425b11dc62fc26939a2ab42cbba680bdf5734546" - integrity sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" - integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== +"@babel/plugin-proposal-numeric-separator@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-numeric-separator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz#82b4cc06571143faf50626104b335dd71baa4f9e" - integrity sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg== +"@babel/plugin-proposal-numeric-separator@^7.10.4", "@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-object-rest-spread@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" + integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" @@ -812,108 +547,61 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-object-rest-spread@7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" - integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== +"@babel/plugin-proposal-object-rest-spread@^7.11.0", "@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz#a556f59d555f06961df1e572bb5eca864c84022d" + integrity sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - -"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz#e17d418f81cc103fedd4ce037e181c8056225abc" - integrity sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw== - dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.2" + "@babel/plugin-transform-parameters" "^7.20.1" -"@babel/plugin-proposal-object-rest-spread@^7.6.2": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" - integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== +"@babel/plugin-proposal-optional-catch-binding@^7.10.4", "@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.7.4" - -"@babel/plugin-proposal-optional-catch-binding@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz#150d4e58e525b16a9a1431bd5326c4eed870d717" - integrity sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" - integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" - -"@babel/plugin-proposal-optional-chaining@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.4.tgz#3f04c2de1a942cbd3008324df8144b9cbc0ca0ba" - integrity sha512-JmgaS+ygAWDR/STPe3/7y0lNlHgS+19qZ9aC06nYLwQ/XB7c0q5Xs+ksFU3EDnp9EiEsO0dnRAOKeyLHTZuW3A== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.7.4" - -"@babel/plugin-proposal-optional-chaining@^7.12.7", "@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz#df8171a8b9c43ebf4c1dabe6311b432d83e1b34e" - integrity sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA== +"@babel/plugin-proposal-optional-chaining@^7.11.0", "@babel/plugin-proposal-optional-chaining@^7.12.7", "@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" - integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== +"@babel/plugin-proposal-private-methods@^7.10.4", "@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636" - integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg== +"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-create-class-features-plugin" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" - integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb" - integrity sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-async-generators@^7.2.0", "@babel/plugin-syntax-async-generators@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" - integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== @@ -927,54 +615,40 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13": +"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-class-static-block@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c" - integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-decorators@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz#fac829bf3c7ef4a1bc916257b403e58c6bdaf648" - integrity sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA== +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-dynamic-import@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-syntax-decorators@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599" + integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" - integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@7.8.3", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.13.tgz#3c807d37efaf0a806f1deb556ccb3b2f562ae9c2" - integrity sha512-gVry0zqoums0hA+EniCYK3gABhjYSLX1dVuwYpPw9DrLNA4/GovXySHVg4FGRsZht09ON/5C2NVx3keq+qqVGQ== +"@babel/plugin-syntax-export-default-from@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz#8df076711a4818c4ce4f23e61d622b0ba2ff84bc" + integrity sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" @@ -983,850 +657,551 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz#5df9962503c0a9c918381c929d51d4d6949e7e86" - integrity sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA== +"@babel/plugin-syntax-flow@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" + integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-json-strings@^7.2.0", "@babel/plugin-syntax-json-strings@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" - integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-syntax-json-strings@^7.8.3": +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" - integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-jsx@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz#dab2b56a36fb6c3c222a1fbc71f7bf97f327a9ec" - integrity sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": +"@babel/plugin-syntax-jsx@7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" + integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.7.4.tgz#e53b751d0c3061b1ba3089242524b65a7a9da12b" - integrity sha512-XKh/yIRPiQTOeBg0QJjEus5qiSKucKAiApNtO1psqG7D17xmE+X2i5ZqBEuSvo0HRuyPaKaSN/Gy+Ha9KFQolw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== +"@babel/plugin-syntax-jsx@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" - integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" - integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" - integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.7.4.tgz#c91fdde6de85d2eb8906daea7b21944c3610c901" - integrity sha512-2MqYD5WjZSbJdUagnJvIdSfkb/ucOC9/1fRJxm7GAxY6YQLWlUvkfxoNbUPcPLHJyetKUDQ4+yyuUyAoc0HriA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b" - integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-syntax-top-level-await@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" - integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-top-level-await@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" - integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-typescript@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474" - integrity sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-typescript@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b" - integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" - integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== - dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" - -"@babel/plugin-transform-async-to-generator@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" - integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== - dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.4" - -"@babel/plugin-transform-block-scoped-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" - integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.12.12", "@babel/plugin-transform-block-scoping@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz#761cb12ab5a88d640ad4af4aa81f820e6b5fdf5c" - integrity sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-block-scoping@^7.6.3": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" - integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.13" - -"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz#3f1196c5709f064c252ad056207d87b7aeb2d03d" - integrity sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - globals "^11.1.0" - -"@babel/plugin-transform-classes@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" - integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-define-map" "^7.7.4" - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" - integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.13.17": - version "7.13.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" - integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-destructuring@^7.6.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" - integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" - integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz#f7ccda61118c5b7a2599a72d5e3210884a021e96" - integrity sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-duplicate-keys@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-duplicate-keys@^7.5.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" - integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" - integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-flow-strip-types@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz#58177a48c209971e8234e99906cb6bd1122addd3" - integrity sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-flow" "^7.12.13" - -"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-for-of@^7.4.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" - integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-function-name@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" - integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== - dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" - integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-member-expression-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" - integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-modules-amd@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz#6622806fe1a7c07a1388444222ef9535f2ca17b0" - integrity sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw== +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-modules-amd@^7.5.0": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz#39e0fb717224b59475b306402bb8eedab01e729c" - integrity sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ== +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: - "@babel/helper-module-transforms" "^7.7.5" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-modules-commonjs@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz#3e5ffb4fd8c947feede69cbe24c9554ab4113fe3" - integrity sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg== +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: - "@babel/helper-module-transforms" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.7.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-modules-commonjs@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" - integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== +"@babel/plugin-syntax-top-level-await@^7.10.4", "@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.13.12" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-modules-commonjs@^7.7.0": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345" - integrity sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q== +"@babel/plugin-syntax-typescript@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" + integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== dependencies: - "@babel/helper-module-transforms" "^7.7.5" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.7.4" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-modules-systemjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== +"@babel/plugin-transform-arrow-functions@^7.10.4", "@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-systemjs@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" - integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== +"@babel/plugin-transform-async-to-generator@^7.10.4", "@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== dependencies: - "@babel/helper-hoist-variables" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" -"@babel/plugin-transform-modules-umd@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34" - integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw== +"@babel/plugin-transform-block-scoped-functions@^7.10.4", "@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-umd@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" - integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== +"@babel/plugin-transform-block-scoping@^7.10.4", "@babel/plugin-transform-block-scoping@^7.12.12", "@babel/plugin-transform-block-scoping@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz#f59b1767e6385c663fd0bce655db6ca9c8b236ed" + integrity sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ== dependencies: - "@babel/helper-module-transforms" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== +"@babel/plugin-transform-classes@^7.10.4", "@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz#c0033cf1916ccf78202d04be4281d161f6709bb2" + integrity sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" - integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== +"@babel/plugin-transform-computed-properties@^7.10.4", "@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-new-target@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== +"@babel/plugin-transform-destructuring@^7.10.4", "@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz#c23741cfa44ddd35f5e53896e88c75331b8b2792" + integrity sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-new-target@^7.4.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" - integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== +"@babel/plugin-transform-duplicate-keys@^7.10.4", "@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-object-super@^7.5.5": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" - integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== +"@babel/plugin-transform-exponentiation-operator@^7.10.4", "@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz#e4290f72e0e9e831000d066427c4667098decc31" - integrity sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A== +"@babel/plugin-transform-flow-strip-types@^7.18.6": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz#e9e8606633287488216028719638cbbb2f2dde8f" + integrity sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-flow" "^7.18.6" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce" - integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw== +"@babel/plugin-transform-for-of@^7.10.4", "@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== dependencies: - "@babel/helper-call-delegate" "^7.7.4" - "@babel/helper-get-function-arity" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-property-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== +"@babel/plugin-transform-function-name@^7.10.4", "@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" - integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== +"@babel/plugin-transform-literals@^7.10.4", "@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.7.4.tgz#9f2b80b14ebc97eef4a9b29b612c58ed9c0d10dd" - integrity sha512-sBbIvqYkthai0X0vkD2xsAwluBp+LtNHH+/V4a5ydifmTtb8KOVOlrMIk/MYmIc4uTYDnjZUHQildYNo36SRJw== +"@babel/plugin-transform-member-expression-literals@^7.10.4", "@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-display-name@^7.12.13": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz#2e854544d42ab3bb9c21f84e153d62e800fbd593" - integrity sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw== +"@babel/plugin-transform-modules-amd@^7.10.4", "@babel/plugin-transform-modules-amd@^7.19.6": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz#aca391801ae55d19c4d8d2ebfeaa33df5f2a2cbd" + integrity sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-react-jsx-development@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" - integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== +"@babel/plugin-transform-modules-commonjs@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.17" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.7.4.tgz#81b8fbfd14b2215e8f1c2c3adfba266127b0231c" - integrity sha512-PWYjSfqrO273mc1pKCRTIJXyqfc9vWYBax88yIhQb+bpw3XChVC7VWS4VwRVs63wFHKxizvGSd00XEr+YB9Q2A== +"@babel/plugin-transform-modules-commonjs@^7.10.4", "@babel/plugin-transform-modules-commonjs@^7.19.6": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz#25b32feef24df8038fc1ec56038917eacb0b730c" + integrity sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.7.4" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-simple-access" "^7.19.4" -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz#8994b1bf6014b133f5a46d3b7d1ee5f5e3e72c10" - integrity sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg== +"@babel/plugin-transform-modules-systemjs@^7.10.4", "@babel/plugin-transform-modules-systemjs@^7.19.6": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz#59e2a84064b5736a4471b1aa7b13d4431d327e0d" + integrity sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.7.4" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-validator-identifier" "^7.19.1" -"@babel/plugin-transform-react-jsx@^7.12.12", "@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.3.tgz#0e26597805cf0862da735f264550933c38babb66" - integrity sha512-uuxuoUNVhdgYzERiHHFkE4dWoJx+UFVyuAl0aqN8P2/AKFHwqgUC5w2+4/PjpKXJsFgBlYAFXlUmDQ3k3DUkXw== +"@babel/plugin-transform-modules-umd@^7.10.4", "@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.14.2" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.4.tgz#d91205717fae4e2f84d020cd3057ec02a10f11da" - integrity sha512-LixU4BS95ZTEAZdPaIuyg/k8FiiqN9laQ0dMHB4MlpydHY53uQdWCUrwjLr5o6ilS6fAgZey4Q14XBjl5tL6xw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4", "@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz#ec7455bab6cd8fb05c525a94876f435a48128888" + integrity sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw== dependencies: - "@babel/helper-builder-react-jsx" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.7.4" + "@babel/helper-create-regexp-features-plugin" "^7.19.0" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-react-pure-annotations@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" - integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== +"@babel/plugin-transform-new-target@^7.10.4", "@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.13.15": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" - integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== +"@babel/plugin-transform-object-super@^7.10.4", "@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== dependencies: - regenerator-transform "^0.14.2" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.7.0": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9" - integrity sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw== +"@babel/plugin-transform-parameters@^7.10.4", "@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.1": + version "7.20.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz#7b3468d70c3c5b62e46be0a47b6045d8590fb748" + integrity sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA== dependencies: - regenerator-transform "^0.14.0" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-reserved-words@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== +"@babel/plugin-transform-property-literals@^7.10.4", "@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" - integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== +"@babel/plugin-transform-react-display-name@^7.10.4", "@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.2.tgz#2669f67c1fae0ae8d8bf696e4263ad52cb98b6f8" - integrity sha512-cqULw/QB4yl73cS5Y0TZlQSjDvNkzDbu0FurTZyHlJpWE5T3PCMdnyV+xXoH1opr1ldyHODe3QAX3OMAii5NxA== +"@babel/plugin-transform-react-jsx-development@^7.10.4", "@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" + "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== +"@babel/plugin-transform-react-jsx-self@^7.10.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz#3849401bab7ae8ffa1e3e5687c94a753fc75bda7" + integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" - integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== +"@babel/plugin-transform-react-jsx-source@^7.10.4": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz#88578ae8331e5887e8ce28e4c9dc83fb29da0b86" + integrity sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== +"@babel/plugin-transform-react-jsx@^7.10.4", "@babel/plugin-transform-react-jsx@^7.12.12", "@babel/plugin-transform-react-jsx@^7.18.6": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9" + integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.19.0" -"@babel/plugin-transform-spread@^7.6.2": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" - integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== +"@babel/plugin-transform-react-pure-annotations@^7.10.4", "@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-sticky-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== +"@babel/plugin-transform-regenerator@^7.10.4", "@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" + regenerator-transform "^0.15.0" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" - integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== +"@babel/plugin-transform-reserved-words@^7.10.4", "@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== +"@babel/plugin-transform-runtime@7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz#f108bc8e0cf33c37da031c097d1df470b3a293fc" + integrity sha512-9aIoee+EhjySZ6vY5hnLjigHzunBlscx9ANKutkeWTJTx6m5Rbq6Ic01tLvO54lSusR+BxV7u4UDdCmXv5aagg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" - integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== +"@babel/plugin-transform-shorthand-properties@^7.10.4", "@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-typeof-symbol@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== +"@babel/plugin-transform-spread@^7.11.0", "@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6" + integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" - integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== +"@babel/plugin-transform-sticky-regex@^7.10.4", "@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-typescript@^7.13.0": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.3.tgz#44f67f725a60cccee33d9d6fee5e4f338258f34f" - integrity sha512-G5Bb5pY6tJRTC4ag1visSgiDoGgJ1u1fMUgmc2ijLkcIdzP83Q1qyZX4ggFQ/SkR+PNOatkaYC+nKcTlpsX4ag== +"@babel/plugin-transform-template-literals@^7.10.4", "@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.3" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-typescript" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typescript@^7.7.2": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636" - integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg== +"@babel/plugin-transform-typeof-symbol@^7.10.4", "@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.7.4" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-escapes@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" - integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== +"@babel/plugin-transform-typescript@^7.10.4", "@babel/plugin-transform-typescript@^7.18.6": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz#91515527b376fc122ba83b13d70b01af8fe98f3f" + integrity sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.20.2" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" -"@babel/plugin-transform-unicode-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== +"@babel/plugin-transform-unicode-escapes@^7.10.4", "@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-regex@^7.7.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" - integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== +"@babel/plugin-transform-unicode-regex@^7.10.4", "@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@7.7.1": - version "7.7.1" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.1.tgz#04a2ff53552c5885cf1083e291c8dd5490f744bb" - integrity sha512-/93SWhi3PxcVTDpSqC+Dp4YxUu3qZ4m7I76k0w73wYfn7bGVuRIO4QUz95aJksbS+AD1/mT1Ie7rbkT0wSplaA== +"@babel/preset-env@7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" + integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA== dependencies: - "@babel/helper-module-imports" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.7.0" - "@babel/plugin-proposal-dynamic-import" "^7.7.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.7.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-syntax-top-level-await" "^7.7.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.7.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.3" - "@babel/plugin-transform-classes" "^7.7.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.6.0" - "@babel/plugin-transform-dotall-regex" "^7.7.0" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.7.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.7.0" - "@babel/plugin-transform-modules-systemjs" "^7.7.0" - "@babel/plugin-transform-modules-umd" "^7.7.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.0" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.7.0" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.6.2" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.7.0" - "@babel/types" "^7.7.1" - browserslist "^4.6.0" - core-js-compat "^3.1.1" + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.11.5" + browserslist "^4.12.0" + core-js-compat "^3.6.2" invariant "^2.2.2" - js-levenshtein "^1.1.3" + levenary "^1.1.1" semver "^5.5.0" "@babel/preset-env@^7.12.11": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.2.tgz#e80612965da73579c84ad2f963c2359c71524ed5" - integrity sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ== - dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-async-generator-functions" "^7.14.2" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-class-static-block" "^7.13.11" - "@babel/plugin-proposal-dynamic-import" "^7.14.2" - "@babel/plugin-proposal-export-namespace-from" "^7.14.2" - "@babel/plugin-proposal-json-strings" "^7.14.2" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" - "@babel/plugin-proposal-numeric-separator" "^7.14.2" - "@babel/plugin-proposal-object-rest-spread" "^7.14.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" - "@babel/plugin-proposal-optional-chaining" "^7.14.2" - "@babel/plugin-proposal-private-methods" "^7.13.0" - "@babel/plugin-proposal-private-property-in-object" "^7.14.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" + integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== + dependencies: + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.20.1" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1834,61 +1209,61 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.13.0" - "@babel/plugin-transform-async-to-generator" "^7.13.0" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.14.2" - "@babel/plugin-transform-classes" "^7.14.2" - "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.17" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.13.0" - "@babel/plugin-transform-function-name" "^7.12.13" - "@babel/plugin-transform-literals" "^7.12.13" - "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.14.2" - "@babel/plugin-transform-modules-commonjs" "^7.14.0" - "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.14.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" - "@babel/plugin-transform-new-target" "^7.12.13" - "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.14.2" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.13.15" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.13.0" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.13.0" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.2" - babel-plugin-polyfill-corejs2 "^0.2.0" - babel-plugin-polyfill-corejs3 "^0.2.0" - babel-plugin-polyfill-regenerator "^0.2.0" - core-js-compat "^3.9.0" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.20.2" + "@babel/plugin-transform-classes" "^7.20.2" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.20.2" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.19.6" + "@babel/plugin-transform-modules-commonjs" "^7.19.6" + "@babel/plugin-transform-modules-systemjs" "^7.19.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" semver "^6.3.0" "@babel/preset-flow@^7.12.1": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.13.13.tgz#a61a1c149b3f77589d795287744393444d5cdd9e" - integrity sha512-MDtwtamMifqq3R2mC7l3A3uFalUb3NH5TIBQWjN/epEPlZktcLq4se3J+ivckKrLMGsR7H9LW8+pYuIUN9tsKg== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.18.6.tgz#83f7602ba566e72a9918beefafef8ef16d2810cb" + integrity sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-flow-strip-types" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-flow-strip-types" "^7.18.6" -"@babel/preset-modules@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.1.tgz#add61473e3182771b36930c1312f3c56c114e406" - integrity sha512-x/kt2aAZlgcFnP3P851fkkb2s4FmTiyGic58pkWMaRK9Am3u9KkH1ttHGjwlsKu7/TVJsLEBXZnjUxqsid3tww== +"@babel/preset-modules@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1896,10 +1271,10 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1907,173 +1282,108 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.0.tgz#8ab0c4787d98cf1f5f22dabf115552bf9e4e406c" - integrity sha512-IXXgSUYBPHUGhUkH+89TR6faMcBtuMW0h5OHbMuVbL3/5wK2g6a2M2BBpkLa+Kw0sAHiZ9dNVgqJMDP/O4GRBA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.7.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - -"@babel/preset-react@^7.12.10": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.13.13.tgz#fa6895a96c50763fe693f9148568458d5a839761" - integrity sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA== +"@babel/preset-react@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.4.tgz#92e8a66d816f9911d11d4cc935be67adfc82dbcf" + integrity sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-react-display-name" "^7.12.13" - "@babel/plugin-transform-react-jsx" "^7.13.12" - "@babel/plugin-transform-react-jsx-development" "^7.12.17" - "@babel/plugin-transform-react-pure-annotations" "^7.12.1" - -"@babel/preset-typescript@7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.2.tgz#f71c8bba2ae02f11b29dbf7d6a35f47bbe011632" - integrity sha512-1B4HthAelaLGfNRyrWqJtBEjXX1ulThCrLQ5B2VOtEAznWFIFXFJahgXImqppy66lx/Oh+cOSCQdJzZqh2Jh5g== + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.10.4" + "@babel/plugin-transform-react-jsx" "^7.10.4" + "@babel/plugin-transform-react-jsx-development" "^7.10.4" + "@babel/plugin-transform-react-jsx-self" "^7.10.4" + "@babel/plugin-transform-react-jsx-source" "^7.10.4" + "@babel/plugin-transform-react-pure-annotations" "^7.10.4" + +"@babel/preset-react@^7.12.10", "@babel/preset-react@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + +"@babel/preset-typescript@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz#7d5d052e52a682480d6e2cc5aa31be61c8c25e36" + integrity sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.7.2" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.10.4" "@babel/preset-typescript@^7.12.7": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz#ab107e5f050609d806fbb039bec553b33462c60a" - integrity sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-typescript" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" "@babel/register@^7.12.1": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.13.16.tgz#ae3ab0b55c8ec28763877383c454f01521d9a53d" - integrity sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.18.9.tgz#1888b24bc28d5cc41c412feb015e9ff6b96e439c" + integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" make-dir "^2.1.0" - pirates "^4.0.0" + pirates "^4.0.5" source-map-support "^0.5.16" -"@babel/runtime@7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.2.tgz#111a78002a5c25fc8e3361bedc9529c696b85a6a" - integrity sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.13.17", "@babel/runtime@^7.5.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" - integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.5": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" - integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.3.1": +"@babel/runtime@7.11.2": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839" - integrity sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.12.13", "@babel/template@^7.12.7": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/template@^7.7.0", "@babel/template@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" - integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/template@^7.8.3": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" - integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.14.2" - "@babel/types" "^7.14.2" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.7.0": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.5.tgz#6e7c56b44e2ac7011a948c21e283ddd9d9db97a2" - integrity sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.5" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.9.0" - "@babel/types" "^7.9.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.7.2", "@babel/traverse@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" - integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - "@babel/parser" "^7.7.4" - "@babel/types" "^7.7.4" +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" + integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== + dependencies: + regenerator-runtime "^0.13.10" + +"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.7.4": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1", "@babel/traverse@^7.7.4": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.1.tgz#9b15ccbf882f6d107eeeecf263fbcdd208777ec8" + integrity sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.1" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.1" + "@babel/types" "^7.20.0" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.13" -"@babel/types@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" - integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== +"@babel/types@7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" + integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== dependencies: - esutils "^2.0.2" - lodash "^4.17.13" + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@7.8.3", "@babel/types@^7.4.4", "@babel/types@^7.7.1", "@babel/types@^7.7.2", "@babel/types@^7.7.4": +"@babel/types@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== @@ -2082,27 +1392,19 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.2.0": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.2.tgz#4208ae003107ef8a057ea8333e56eb64d2f6a2c3" - integrity sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - to-fast-properties "^2.0.0" - -"@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" - integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== +"@babel/types@^7.11.5", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.4.4", "@babel/types@^7.7.4": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.2.tgz#67ac09266606190f496322dbaff360fdaa5e7842" + integrity sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog== dependencies: - "@babel/helper-validator-identifier" "^7.9.5" - lodash "^4.17.13" + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@base2/pretty-print-object@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.0.tgz#860ce718b0b73f4009e153541faff2cb6b85d047" - integrity sha512-4Th98KlMHr5+JkxfcoDT//6vY8vM+iSPrLNpHhRyLx2CFYi8e2RfqPLdpbnpo0Q5lQC5hNB79yes07zb02fvCw== +"@base2/pretty-print-object@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" + integrity sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA== "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -2117,10 +1419,15 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@csstools/convert-colors@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" - integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@discoveryjs/json-ext@^0.5.3": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@emotion/cache@^10.0.27": version "10.0.29" @@ -2132,39 +1439,11 @@ "@emotion/utils" "0.11.3" "@emotion/weak-memoize" "0.2.5" -"@emotion/core@^10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.1.1.tgz#c956c1365f2f2481960064bcb8c4732e5fb612c3" - integrity sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/cache" "^10.0.27" - "@emotion/css" "^10.0.27" - "@emotion/serialize" "^0.11.15" - "@emotion/sheet" "0.9.4" - "@emotion/utils" "0.11.3" - -"@emotion/css@^10.0.27": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" - integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== - dependencies: - "@emotion/serialize" "^0.11.15" - "@emotion/utils" "0.11.3" - babel-plugin-emotion "^10.0.27" - "@emotion/hash@0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.6": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" - integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== - dependencies: - "@emotion/memoize" "0.7.4" - "@emotion/memoize@0.7.4": version "0.7.4" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" @@ -2186,24 +1465,6 @@ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== -"@emotion/styled-base@^10.0.27": - version "10.0.31" - resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a" - integrity sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/is-prop-valid" "0.8.8" - "@emotion/serialize" "^0.11.15" - "@emotion/utils" "0.11.3" - -"@emotion/styled@^10.0.27": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf" - integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q== - dependencies: - "@emotion/styled-base" "^10.0.27" - babel-plugin-emotion "^10.0.27" - "@emotion/stylis@0.8.5": version "0.8.5" resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" @@ -2224,6 +1485,65 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@hapi/accept@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" + integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + +"@hapi/boom@9.x.x": + version "9.1.4" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.4.tgz#1f9dad367c6a7da9f8def24b4a986fc5a7bd9db6" + integrity sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw== + dependencies: + "@hapi/hoek" "9.x.x" + +"@hapi/hoek@9.x.x": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2235,7 +1555,7 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== @@ -2272,16 +1592,55 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@mdx-js/loader@^1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-1.6.22.tgz#d9e8fe7f8185ff13c9c8639c048b123e30d322c4" - integrity sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q== +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: - "@mdx-js/mdx" "1.6.22" - "@mdx-js/react" "1.6.22" - loader-utils "2.0.0" + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" -"@mdx-js/mdx@1.6.22", "@mdx-js/mdx@^1.6.22": +"@mdx-js/mdx@^1.6.22": version "1.6.22" resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== @@ -2306,7 +1665,7 @@ unist-builder "2.0.3" unist-util-visit "2.0.3" -"@mdx-js/react@1.6.22", "@mdx-js/react@^1.6.22": +"@mdx-js/react@^1.6.22": version "1.6.22" resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== @@ -2324,37 +1683,78 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@next/polyfill-nomodule@9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@next/polyfill-nomodule/-/polyfill-nomodule-9.3.2.tgz#f8e282fdeb448eb6b70bcc18c5d46c911072687a" - integrity sha512-kEa7v3trZmW6iWeTJrhg+ZsE9njae7mLkgyZB5M1r975JHr5PQ69B5aX7hrEAj7aAJYvCKETgAczx4gGR8MOzQ== +"@next/env@9.5.5": + version "9.5.5" + resolved "https://registry.yarnpkg.com/@next/env/-/env-9.5.5.tgz#db993649ec6e619e34a36de90dc2baa52fc5280f" + integrity sha512-N9wdjU6XoqLqNQWtrGiWtp1SUuJsYK1cNrZ24A6YD+4w5CNV5SkZX6aewKZCCLP5Y8UNfTij2FkJiSYUfBjX8g== -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== +"@next/polyfill-module@9.5.5": + version "9.5.5" + resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-9.5.5.tgz#d9c65679a66664ab4859078f58997113c9d01f10" + integrity sha512-itqYFeHo3yN4ccpHq2uNFC2UVQm12K6DxUVwYdui9MJiiueT0pSGb2laYEjf/G5+vVq7M2vb+DkjkOkPMBVfeg== + +"@next/react-dev-overlay@9.5.5": + version "9.5.5" + resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-9.5.5.tgz#11b36813d75c43b7bd9d5e478bded1ed5391d03a" + integrity sha512-B1nDANxjXr2oyohv+tX0OXZTmJtO5qEWmisNPGnqQ2Z32IixfaAgyNYVuCVf20ap6EUz5elhgNUwRIFh/e26mQ== + dependencies: + "@babel/code-frame" "7.10.4" + ally.js "1.4.1" + anser "1.4.9" + chalk "4.0.0" + classnames "2.2.6" + data-uri-to-buffer "3.0.0" + shell-quote "1.7.2" + source-map "0.8.0-beta.0" + stacktrace-parser "0.1.10" + strip-ansi "6.0.0" + +"@next/react-refresh-utils@9.5.5": + version "9.5.5" + resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-9.5.5.tgz#fe559b5ca51c038cb7840e0d669a6d7ef01fe4eb" + integrity sha512-Gz5z0+ID+KAGto6Tkgv1a340damEw3HG6ANLKwNi5/QSHqQ3JUAVxMuhz3qnL54505I777evpzL89ofWEMIWKw== + +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== dependencies: - "@nodelib/fs.stat" "2.0.4" + eslint-scope "5.1.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@nodelib/fs.scandir" "2.1.4" + "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + "@npmcli/move-file@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" @@ -2363,67 +1763,58 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@pmmmwh/react-refresh-webpack-plugin@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" - integrity sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ== +"@pmmmwh/react-refresh-webpack-plugin@^0.5.3": + version "0.5.9" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz#35aae6624a6270ca7ad755800b7eec417fa6f830" + integrity sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA== dependencies: - ansi-html "^0.0.7" + ansi-html-community "^0.0.8" + common-path-prefix "^3.0.0" + core-js-pure "^3.23.3" error-stack-parser "^2.0.6" - html-entities "^1.2.1" - native-url "^0.2.6" - schema-utils "^2.6.5" + find-up "^5.0.0" + html-entities "^2.1.0" + loader-utils "^2.0.3" + schema-utils "^3.0.0" source-map "^0.7.3" -"@popperjs/core@^2.5.4", "@popperjs/core@^2.6.0": - version "2.9.2" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.2.tgz#adea7b6953cbb34651766b0548468e743c6a2353" - integrity sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q== - -"@reach/router@^1.3.4": - version "1.3.4" - resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c" - integrity sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA== - dependencies: - create-react-context "0.3.0" - invariant "^2.2.3" - prop-types "^15.6.1" - react-lifecycles-compat "^3.0.4" - -"@storybook/addon-actions@6.2.9", "@storybook/addon-actions@^6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.2.9.tgz#688413ac77410690755a5da3c277bfa0ff1a10b0" - integrity sha512-CkUYSMt+fvuHfWvtDzlhhaeQBCWlUo99xdL88JTsTml05P43bIHZNIRv2QJ8DwhHuxdIPeHKLmz9y/ymOagOnw== - dependencies: - "@storybook/addons" "6.2.9" - "@storybook/api" "6.2.9" - "@storybook/client-api" "6.2.9" - "@storybook/components" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/theming" "6.2.9" +"@storybook/addon-actions@6.5.13", "@storybook/addon-actions@^6.5.9": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.5.13.tgz#84535dda78c7fe15fc61f19a23ed1440952f3c76" + integrity sha512-3Tji0gIy95havhTpSc6CsFl5lNxGn4O5Y1U9fyji+GRkKqDFOrvVLYAHPtLOpYdEI5tF0bDo+akiqfDouY8+eA== + dependencies: + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/components" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/theming" "6.5.13" core-js "^3.8.2" fast-deep-equal "^3.1.3" global "^4.4.0" - lodash "^4.17.20" - polished "^4.0.5" + lodash "^4.17.21" + polished "^4.2.2" prop-types "^15.7.2" react-inspector "^5.1.0" regenerator-runtime "^0.13.7" + telejson "^6.0.8" ts-dedent "^2.0.0" util-deprecate "^1.0.2" uuid-browser "^3.1.0" -"@storybook/addon-backgrounds@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-6.2.9.tgz#4f75aa58b262f461d9f8713d65d11407f4e53537" - integrity sha512-oPSdeoUuvaXshY5sQRagbYXpr6ZEVUuLhGYBnZTlvm19QMeNCXQE+rdlgzcgyafq4mc1FI/udE2MpJ1dhfS6pQ== - dependencies: - "@storybook/addons" "6.2.9" - "@storybook/api" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/components" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/theming" "6.2.9" +"@storybook/addon-backgrounds@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.13.tgz#37629db582501aa22bddf492a9f01d6614aaa993" + integrity sha512-b4JX7JMY7e50y1l6g71D+2XWV3GO0TO2z1ta8J6W4OQt8f44V7sSkRQaJUzXdLjQMrA+Anojuy1ZwPjVeLC6vg== + dependencies: + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/components" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/theming" "6.5.13" core-js "^3.8.2" global "^4.4.0" memoizerific "^1.11.3" @@ -2431,96 +1822,89 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/addon-controls@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-6.2.9.tgz#eeec14b2946f1fb5326115f2205ed72c7f44ccea" - integrity sha512-NvXAJ7I5U4CLxv4wL3/Ne9rehJlgnSmQlLIG/z6dg5zm7JIb48LT4IY6GzjlUP5LkjmO9KJ8gJC249uRt2iPBQ== - dependencies: - "@storybook/addons" "6.2.9" - "@storybook/api" "6.2.9" - "@storybook/client-api" "6.2.9" - "@storybook/components" "6.2.9" - "@storybook/node-logger" "6.2.9" - "@storybook/theming" "6.2.9" +"@storybook/addon-controls@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-6.5.13.tgz#14c8f9379337768bf03f59d19f1a16f3c41418ab" + integrity sha512-lYq3uf2mlVevm0bi6ueL3H6TpUMRYW9s/pTNTVJT225l27kLdFR9wEKxAkCBrlKaTgDLJmzzDRsJE3NLZlR/5Q== + dependencies: + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/components" "6.5.13" + "@storybook/core-common" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/node-logger" "6.5.13" + "@storybook/store" "6.5.13" + "@storybook/theming" "6.5.13" core-js "^3.8.2" + lodash "^4.17.21" ts-dedent "^2.0.0" -"@storybook/addon-docs@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-6.2.9.tgz#61271e54ff4ea490409e4873ed022e62577366c1" - integrity sha512-qOtwgiqI3LMqT0eXYNV6ykp7qSu0LQGeXxy3wOBGuDDqAizfgnAjomYEWGFcyKp5ahV7HCRCjxbixAklFPUmyw== +"@storybook/addon-docs@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-6.5.13.tgz#fd82893946b0fa6f0657f16bf6a94637ab4b7532" + integrity sha512-RG/NjsheD9FixZ789RJlNyNccaR2Cuy7CtAwph4oUNi3aDFjtOI8Oe9L+FOT7qtVnZLw/YMjF+pZxoDqJNKLPw== dependencies: - "@babel/core" "^7.12.10" - "@babel/generator" "^7.12.11" - "@babel/parser" "^7.12.11" "@babel/plugin-transform-react-jsx" "^7.12.12" "@babel/preset-env" "^7.12.11" "@jest/transform" "^26.6.2" - "@mdx-js/loader" "^1.6.22" - "@mdx-js/mdx" "^1.6.22" "@mdx-js/react" "^1.6.22" - "@storybook/addons" "6.2.9" - "@storybook/api" "6.2.9" - "@storybook/builder-webpack4" "6.2.9" - "@storybook/client-api" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/components" "6.2.9" - "@storybook/core" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/csf" "0.0.1" - "@storybook/node-logger" "6.2.9" - "@storybook/postinstall" "6.2.9" - "@storybook/source-loader" "6.2.9" - "@storybook/theming" "6.2.9" - acorn "^7.4.1" - acorn-jsx "^5.3.1" - acorn-walk "^7.2.0" + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/components" "6.5.13" + "@storybook/core-common" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/docs-tools" "6.5.13" + "@storybook/mdx1-csf" "^0.0.1" + "@storybook/node-logger" "6.5.13" + "@storybook/postinstall" "6.5.13" + "@storybook/preview-web" "6.5.13" + "@storybook/source-loader" "6.5.13" + "@storybook/store" "6.5.13" + "@storybook/theming" "6.5.13" + babel-loader "^8.0.0" core-js "^3.8.2" - doctrine "^3.0.0" - escodegen "^2.0.0" fast-deep-equal "^3.1.3" global "^4.4.0" - html-tags "^3.1.0" - js-string-escape "^1.0.1" - loader-utils "^2.0.0" - lodash "^4.17.20" - prettier "~2.2.1" - prop-types "^15.7.2" - react-element-to-jsx-string "^14.3.2" + lodash "^4.17.21" regenerator-runtime "^0.13.7" remark-external-links "^8.0.0" remark-slug "^6.0.0" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/addon-essentials@^6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-6.2.9.tgz#cd946b024804c4d9bfec4e232b74ffdf936b25ef" - integrity sha512-zXsV4e1TCkHyDwi7hew4h9eJfDW++f2BNKzTif+DAcjPUVFDp7yC17gLjS5IhOjcQk+db0UUlFSx/OrTxhy7Xw== - dependencies: - "@storybook/addon-actions" "6.2.9" - "@storybook/addon-backgrounds" "6.2.9" - "@storybook/addon-controls" "6.2.9" - "@storybook/addon-docs" "6.2.9" - "@storybook/addon-toolbars" "6.2.9" - "@storybook/addon-viewport" "6.2.9" - "@storybook/addons" "6.2.9" - "@storybook/api" "6.2.9" - "@storybook/node-logger" "6.2.9" +"@storybook/addon-essentials@^6.5.9": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-6.5.13.tgz#274b8e6b556af4cd43b63fab361fa7d19c704e76" + integrity sha512-G9FVAWV7ixjVLWeLgIX+VT90tcAk6yQxfZQegfg5ucRilGysJCDaNnoab4xuuvm1R40TfFhba3iAGZtQYsddmw== + dependencies: + "@storybook/addon-actions" "6.5.13" + "@storybook/addon-backgrounds" "6.5.13" + "@storybook/addon-controls" "6.5.13" + "@storybook/addon-docs" "6.5.13" + "@storybook/addon-measure" "6.5.13" + "@storybook/addon-outline" "6.5.13" + "@storybook/addon-toolbars" "6.5.13" + "@storybook/addon-viewport" "6.5.13" + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/core-common" "6.5.13" + "@storybook/node-logger" "6.5.13" core-js "^3.8.2" regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" -"@storybook/addon-links@^6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-6.2.9.tgz#3399d14b0fc587bccdaa602f6294bc8b249c09f0" - integrity sha512-pBiL6EUZI3c9qtCqnGx3RXF46kAxGMdo4xDC2y3mM132W//DzxkzLZRe4ZhxxGwaLzTNlNrypZ6Li6WyIaPZ/w== +"@storybook/addon-links@^6.5.9": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-6.5.13.tgz#816816907e28ca1cccb58908360628d1b3914513" + integrity sha512-K/LYYu9R/Xoah5h9MNh4mSHOic3q5csqjderLqr2YW/KPYiuNubgvzEbAAbzI5xq5JrtAZqnINrZUv2A4CyYbQ== dependencies: - "@storybook/addons" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/csf" "0.0.1" - "@storybook/router" "6.2.9" + "@storybook/addons" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/router" "6.5.13" "@types/qs" "^6.9.5" core-js "^3.8.2" global "^4.4.0" @@ -2529,261 +1913,270 @@ regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" -"@storybook/addon-toolbars@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-6.2.9.tgz#29f2f4cba0bfbcff9424958eb573e537f7e2d5af" - integrity sha512-4WjIofN5npBPNZ8v1UhzPeATB9RnAWRH/y1AVS1HB+zl6Ku92o7aOMqVxs8zR1oSSmtkHh/rcUcpATFKjuofdw== +"@storybook/addon-measure@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-6.5.13.tgz#05c0e9813fee84a13ba1172444ea99ee083acdbd" + integrity sha512-pi5RFB9YTnESRFtYHAVRUrgEI5to0TFc4KndtwcCKt1fMJ8OFjXQeznEfdj95PFeUvW5TNUwjL38vK4LhicB+g== + dependencies: + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/components" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + core-js "^3.8.2" + global "^4.4.0" + +"@storybook/addon-outline@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-6.5.13.tgz#e4233e7d268cd0e1b814c253e8756fb459a341bf" + integrity sha512-8d8taPheO/tryflzXbj2QRuxHOIS8CtzRzcaglCcioqHEMhOIDOx9BdXKdheq54gdk/UN94HdGJUoVxYyXwZ4Q== + dependencies: + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/components" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + core-js "^3.8.2" + global "^4.4.0" + regenerator-runtime "^0.13.7" + ts-dedent "^2.0.0" + +"@storybook/addon-toolbars@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-6.5.13.tgz#0e67552786f08a6c0a443eaaef21ee565acca839" + integrity sha512-Qgr4wKRSP+gY1VaN7PYT4TM1um7KY341X3GHTglXLFHd8nDsCweawfV2shaX3WxCfZmVro8g4G+Oest30kLLCw== dependencies: - "@storybook/addons" "6.2.9" - "@storybook/api" "6.2.9" - "@storybook/client-api" "6.2.9" - "@storybook/components" "6.2.9" + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/components" "6.5.13" + "@storybook/theming" "6.5.13" core-js "^3.8.2" + regenerator-runtime "^0.13.7" -"@storybook/addon-viewport@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-6.2.9.tgz#e380de567cea6c24c4e933efa009e80428d5b49e" - integrity sha512-IK2mu5njmfcAT967SJtBOY2B6NPMikySZga9QuaLdSpQxPd3vXKNMVG1CjnduMLeDaAoUlvlJISeEPbYGuE+1A== - dependencies: - "@storybook/addons" "6.2.9" - "@storybook/api" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/components" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/theming" "6.2.9" +"@storybook/addon-viewport@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-6.5.13.tgz#97771ed2f4ca1bef83d25174ce07db8557cdf795" + integrity sha512-KSfeuCSIjncwWGnUu6cZBx8WNqYvm5gHyFvkSPKEu0+MJtgncbUy7pl53lrEEr6QmIq0GRXvS3A0XzV8RCnrSA== + dependencies: + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/components" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/theming" "6.5.13" core-js "^3.8.2" global "^4.4.0" memoizerific "^1.11.3" prop-types "^15.7.2" regenerator-runtime "^0.13.7" -"@storybook/addons@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.2.9.tgz#b7ba2b9f0e15b852c7d6b57d04fb0a493c57477c" - integrity sha512-GnmEKbJwiN1jncN9NSA8CuR1i2XAlasPcl/Zn0jkfV9WitQeczVcJCPw86SGH84AD+tTBCyF2i9UC0KaOV1YBQ== - dependencies: - "@storybook/api" "6.2.9" - "@storybook/channels" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/router" "6.2.9" - "@storybook/theming" "6.2.9" +"@storybook/addons@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.5.13.tgz#61ec5eab07879400d423d60bb397880d10ee5e73" + integrity sha512-18CqzNnrGMfeZtiKz+R/3rHtSNnfNwz6y6prIQIbWseK16jY8ELTfIFGviwO5V2OqpbHDQi5+xQQ63QAIb89YA== + dependencies: + "@storybook/api" "6.5.13" + "@storybook/channels" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/router" "6.5.13" + "@storybook/theming" "6.5.13" + "@types/webpack-env" "^1.16.0" core-js "^3.8.2" global "^4.4.0" regenerator-runtime "^0.13.7" -"@storybook/api@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.2.9.tgz#a9b46569192ad5d8da6435c9d63dc4b0c8463b51" - integrity sha512-okkA3HAScE9tGnYBrjTOcgzT+L1lRHNoEh3ZfGgh1u/XNEyHGNkj4grvkd6nX7BzRcYQ/l2VkcKCqmOjUnSkVQ== - dependencies: - "@reach/router" "^1.3.4" - "@storybook/channels" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/csf" "0.0.1" - "@storybook/router" "6.2.9" +"@storybook/api@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.5.13.tgz#8671e580721ff68d209fcde2975f967ae79b7d64" + integrity sha512-xVSmB7/IuFd6G7eiJjbI2MuS7SZunoUM6d+YCWpjiehfMeX47MXt1gZtOwFrgJC1ShZlefXFahq/dvxwtmWs+w== + dependencies: + "@storybook/channels" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/router" "6.5.13" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.2.9" - "@types/reach__router" "^1.3.7" + "@storybook/theming" "6.5.13" core-js "^3.8.2" fast-deep-equal "^3.1.3" global "^4.4.0" - lodash "^4.17.20" + lodash "^4.17.21" memoizerific "^1.11.3" - qs "^6.10.0" regenerator-runtime "^0.13.7" store2 "^2.12.0" - telejson "^5.1.0" + telejson "^6.0.8" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/builder-webpack4@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.2.9.tgz#dddff0b1b4590a7ba088ce13e7cc42e482f6455d" - integrity sha512-swECic1huVdj+B+iRJIQ8ds59HuPVE4fmhI+j/nhw0CQCsgAEKqDlOQVYEimW6nZX8GO4WxNm6tiiRzxixejbw== +"@storybook/builder-webpack4@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.5.13.tgz#35b22c49562d72934a0bc311657989f3b43be575" + integrity sha512-Agqy3IKPv3Nl8QqdS7PjtqLp+c0BD8+/3A2ki/YfKqVz+F+J34EpbZlh3uU053avm1EoNQHSmhZok3ZlWH6O7A== dependencies: "@babel/core" "^7.12.10" - "@babel/plugin-proposal-class-properties" "^7.12.1" - "@babel/plugin-proposal-decorators" "^7.12.12" - "@babel/plugin-proposal-export-default-from" "^7.12.1" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" - "@babel/plugin-proposal-object-rest-spread" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.12.7" - "@babel/plugin-proposal-private-methods" "^7.12.1" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.12.1" - "@babel/plugin-transform-block-scoping" "^7.12.12" - "@babel/plugin-transform-classes" "^7.12.1" - "@babel/plugin-transform-destructuring" "^7.12.1" - "@babel/plugin-transform-for-of" "^7.12.1" - "@babel/plugin-transform-parameters" "^7.12.1" - "@babel/plugin-transform-shorthand-properties" "^7.12.1" - "@babel/plugin-transform-spread" "^7.12.1" - "@babel/plugin-transform-template-literals" "^7.12.1" - "@babel/preset-env" "^7.12.11" - "@babel/preset-react" "^7.12.10" - "@babel/preset-typescript" "^7.12.7" - "@storybook/addons" "6.2.9" - "@storybook/api" "6.2.9" - "@storybook/channel-postmessage" "6.2.9" - "@storybook/channels" "6.2.9" - "@storybook/client-api" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/components" "6.2.9" - "@storybook/core-common" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/node-logger" "6.2.9" - "@storybook/router" "6.2.9" + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/channel-postmessage" "6.5.13" + "@storybook/channels" "6.5.13" + "@storybook/client-api" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/components" "6.5.13" + "@storybook/core-common" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/node-logger" "6.5.13" + "@storybook/preview-web" "6.5.13" + "@storybook/router" "6.5.13" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.2.9" - "@storybook/ui" "6.2.9" - "@types/node" "^14.0.10" + "@storybook/store" "6.5.13" + "@storybook/theming" "6.5.13" + "@storybook/ui" "6.5.13" + "@types/node" "^14.0.10 || ^16.0.0" "@types/webpack" "^4.41.26" autoprefixer "^9.8.6" - babel-loader "^8.2.2" - babel-plugin-macros "^2.8.0" - babel-plugin-polyfill-corejs3 "^0.1.0" + babel-loader "^8.0.0" case-sensitive-paths-webpack-plugin "^2.3.0" core-js "^3.8.2" css-loader "^3.6.0" - dotenv-webpack "^1.8.0" file-loader "^6.2.0" find-up "^5.0.0" fork-ts-checker-webpack-plugin "^4.1.6" - fs-extra "^9.0.1" glob "^7.1.6" glob-promise "^3.4.0" global "^4.4.0" html-webpack-plugin "^4.0.0" pnp-webpack-plugin "1.6.4" - postcss "^7.0.35" + postcss "^7.0.36" postcss-flexbugs-fixes "^4.2.1" postcss-loader "^4.2.0" raw-loader "^4.0.2" - react-dev-utils "^11.0.3" stable "^0.1.8" style-loader "^1.3.0" - terser-webpack-plugin "^3.1.0" + terser-webpack-plugin "^4.2.3" ts-dedent "^2.0.0" url-loader "^4.1.1" util-deprecate "^1.0.2" webpack "4" webpack-dev-middleware "^3.7.3" webpack-filter-warnings-plugin "^1.2.1" - webpack-hot-middleware "^2.25.0" + webpack-hot-middleware "^2.25.1" webpack-virtual-modules "^0.2.2" -"@storybook/channel-postmessage@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.2.9.tgz#ad85573e0a5d6f0cde3504f168d87a73cb0b6269" - integrity sha512-OqV+gLeeCHR0KExsIz0B7gD17Cjd9D+I75qnBsLWM9inWO5kc/WZ5svw8Bvjlcm6snWpvxUaT8L+svuqcPSmww== +"@storybook/channel-postmessage@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.5.13.tgz#cdb36cf4180bd75687c0c4ec75248044ac975828" + integrity sha512-R79MBs0mQ7TV8M/a6x/SiTRyvZBidDfMEEthG7Cyo9p35JYiKOhj2535zhW4qlVMESBu95pwKYBibTjASoStPw== dependencies: - "@storybook/channels" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/core-events" "6.2.9" + "@storybook/channels" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/core-events" "6.5.13" core-js "^3.8.2" global "^4.4.0" qs "^6.10.0" - telejson "^5.1.0" + telejson "^6.0.8" -"@storybook/channels@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.2.9.tgz#a9fd7f25102cbec15fb56f76abf891b7b214e9de" - integrity sha512-6dC8Fb2ipNyOQXnUZMDeEUaJGH5DMLzyHlGLhVyDtrO5WR6bO8mQdkzf4+5dSKXgCBNX0BSkssXth4pDjn18rg== +"@storybook/channel-websocket@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-6.5.13.tgz#b7a55149295a77004bb156a4ceefc44839f52bb3" + integrity sha512-kwh667H+tzCiNvs92GNwYOwVXdj9uHZyieRAN5rJtTBJ7XgLzGkpTEU50mWlbc0nDKhgE0qYvzyr5H393Iy5ug== + dependencies: + "@storybook/channels" "6.5.13" + "@storybook/client-logger" "6.5.13" + core-js "^3.8.2" + global "^4.4.0" + telejson "^6.0.8" + +"@storybook/channels@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.5.13.tgz#f3f86b90a7832484ee3dcbc6845f5a47f62f028f" + integrity sha512-sGYSilE30bz0jG+HdHnkv0B4XkAv2hP+KRZr4xmnv+MOOQpRnZpJ5Z3HVU16s17cj/83NWihKj6BuKcEVzyilg== dependencies: core-js "^3.8.2" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-api@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.2.9.tgz#f0bb44e9b2692adfbf30d7ff751c6dd44bcfe1ce" - integrity sha512-aLvEUVkbvv6Qo/2mF4rFCecdqi2CGOUDdsV1a6EFIVS/9gXFdpirsOwKHo9qNjacGdWPlBYGCUcbrw+DvNaSFA== - dependencies: - "@storybook/addons" "6.2.9" - "@storybook/channel-postmessage" "6.2.9" - "@storybook/channels" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/csf" "0.0.1" +"@storybook/client-api@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.5.13.tgz#0bd89339c08898e0409c5a1dd719ed4807b400cb" + integrity sha512-uH1mAWbidPiuuTdMUVEiuaNOfrYXm+9QLSP1MMYTKULqEOZI5MSOGkEDqRfVWxbYv/iWBOPTQ+OM9TQ6ecYacg== + dependencies: + "@storybook/addons" "6.5.13" + "@storybook/channel-postmessage" "6.5.13" + "@storybook/channels" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/store" "6.5.13" "@types/qs" "^6.9.5" "@types/webpack-env" "^1.16.0" core-js "^3.8.2" + fast-deep-equal "^3.1.3" global "^4.4.0" - lodash "^4.17.20" + lodash "^4.17.21" memoizerific "^1.11.3" qs "^6.10.0" regenerator-runtime "^0.13.7" - stable "^0.1.8" store2 "^2.12.0" + synchronous-promise "^2.0.15" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-logger@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.2.9.tgz#77c1ea39684ad2a2cf6836051b381fc5b354e132" - integrity sha512-IfOQZuvpjh66qBInQCJOb9S0dTGpzZ/Cxlcvokp+PYt95KztaWN3mPm+HaDQCeRsrWNe0Bpm1zuickcJ6dBOXg== +"@storybook/client-logger@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.5.13.tgz#83f332dd9bb4ff1696d16b0cc24561df90905264" + integrity sha512-F2SMW3LWFGXLm2ENTwTitrLWJgmMXRf3CWQXdN2EbkNCIBHy5Zcbt+91K4OX8e2e5h9gjGfrdYbyYDYOoUCEfA== dependencies: core-js "^3.8.2" global "^4.4.0" -"@storybook/components@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.2.9.tgz#7189f9715b05720fe083ae8ad014849f14e98e73" - integrity sha512-hnV1MI2aB2g1sJ7NJphpxi7TwrMZQ/tpCJeHnkjmzyC6ez1MXqcBXGrEEdSXzRfAxjQTOEpu6H1mnns0xMP0Ag== - dependencies: - "@popperjs/core" "^2.6.0" - "@storybook/client-logger" "6.2.9" - "@storybook/csf" "0.0.1" - "@storybook/theming" "6.2.9" - "@types/color-convert" "^2.0.0" - "@types/overlayscrollbars" "^1.12.0" - "@types/react-syntax-highlighter" "11.0.5" - color-convert "^2.0.1" +"@storybook/components@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.5.13.tgz#a05fc969458760b348d640f26c2cad310ab35030" + integrity sha512-6Hhx70JK5pGfKCkqMU4yq/BBH+vRTmzj7tZKfPwba+f8VmTMoOr/2ysTQFRtXryiHB6Z15xBYgfq5x2pIwQzLQ== + dependencies: + "@storybook/client-logger" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/theming" "6.5.13" core-js "^3.8.2" - fast-deep-equal "^3.1.3" - global "^4.4.0" - lodash "^4.17.20" - markdown-to-jsx "^7.1.0" memoizerific "^1.11.3" - overlayscrollbars "^1.13.1" - polished "^4.0.5" - prop-types "^15.7.2" - react-colorful "^5.0.1" - react-popper-tooltip "^3.1.1" - react-syntax-highlighter "^13.5.3" - react-textarea-autosize "^8.3.0" + qs "^6.10.0" regenerator-runtime "^0.13.7" - ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/core-client@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-6.2.9.tgz#3f611947e64dee0a297e512ff974087bc52c1877" - integrity sha512-jW841J5lCe1Ub5ZMtzYPgCy/OUddFxxVYeHLZyuNxlH5RoiQQxbDpuFlzuZMYGuIzD6eZw+ANE4w5vW/y5oBfA== - dependencies: - "@storybook/addons" "6.2.9" - "@storybook/channel-postmessage" "6.2.9" - "@storybook/client-api" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/csf" "0.0.1" - "@storybook/ui" "6.2.9" +"@storybook/core-client@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-6.5.13.tgz#5e2a155af5773c4211a0e1fcd72e0cefea52b7ae" + integrity sha512-YuELbRokTBdqjbx/R4/7O4rou9kvbBIOJjlUkor9hdLLuJ3P0yGianERGNkZFfvcfMBAxU0p52o7QvDldSR3kA== + dependencies: + "@storybook/addons" "6.5.13" + "@storybook/channel-postmessage" "6.5.13" + "@storybook/channel-websocket" "6.5.13" + "@storybook/client-api" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/preview-web" "6.5.13" + "@storybook/store" "6.5.13" + "@storybook/ui" "6.5.13" + airbnb-js-shims "^2.2.1" ansi-to-html "^0.6.11" core-js "^3.8.2" global "^4.4.0" - lodash "^4.17.20" + lodash "^4.17.21" qs "^6.10.0" regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" unfetch "^4.2.0" util-deprecate "^1.0.2" -"@storybook/core-common@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.2.9.tgz#54f8e005733d39c4cb90eec7c17f9ca4dcbeec5f" - integrity sha512-ve0Qb4EMit8jGibfZBprmaU2i4LtpB4vSMIzD9nB1YeBmw2cGhHubtmayZ0TwcV3fPQhtYH9wwRWuWyzzHyQyw== +"@storybook/core-common@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.5.13.tgz#941fe2aea3326c2d524d095870a4150b9f9b1845" + integrity sha512-+DVZrRsteE9pw0X5MNffkdBgejQnbnL+UOG3qXkE9xxUamQALnuqS/w1BzpHE9WmOHuf7RWMKflyQEW3OLKAJg== dependencies: "@babel/core" "^7.12.10" "@babel/plugin-proposal-class-properties" "^7.12.1" @@ -2793,6 +2186,7 @@ "@babel/plugin-proposal-object-rest-spread" "^7.12.1" "@babel/plugin-proposal-optional-chaining" "^7.12.7" "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-private-property-in-object" "^7.12.1" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-transform-arrow-functions" "^7.12.1" "@babel/plugin-transform-block-scoping" "^7.12.12" @@ -2806,13 +2200,11 @@ "@babel/preset-react" "^7.12.10" "@babel/preset-typescript" "^7.12.7" "@babel/register" "^7.12.1" - "@storybook/node-logger" "6.2.9" + "@storybook/node-logger" "6.5.13" "@storybook/semver" "^7.3.2" - "@types/glob-base" "^0.3.0" - "@types/micromatch" "^4.0.1" - "@types/node" "^14.0.10" + "@types/node" "^14.0.10 || ^16.0.0" "@types/pretty-hrtime" "^1.0.0" - babel-loader "^8.2.2" + babel-loader "^8.0.0" babel-plugin-macros "^3.0.1" babel-plugin-polyfill-corejs3 "^0.1.0" chalk "^4.1.0" @@ -2821,78 +2213,162 @@ file-system-cache "^1.0.5" find-up "^5.0.0" fork-ts-checker-webpack-plugin "^6.0.4" + fs-extra "^9.0.1" glob "^7.1.6" - glob-base "^0.3.0" + handlebars "^4.7.7" interpret "^2.2.0" json5 "^2.1.3" lazy-universal-dotenv "^3.0.1" - micromatch "^4.0.2" + picomatch "^2.3.0" pkg-dir "^5.0.0" pretty-hrtime "^1.0.3" resolve-from "^5.0.0" + slash "^3.0.0" + telejson "^6.0.8" ts-dedent "^2.0.0" util-deprecate "^1.0.2" webpack "4" -"@storybook/core-events@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.2.9.tgz#4f12947cd15d1eb3c4109923657c012feef521cd" - integrity sha512-xQmbX/oYQK1QsAGN8hriXX5SUKOoTUe3L4dVaVHxJqy7MReRWJpprJmCpbAPJzWS6WCbDFfCM5kVEexHLOzJlQ== +"@storybook/core-events@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.5.13.tgz#a8c0cc92694f09981ca6501d5c5ef328db18db8a" + integrity sha512-kL745tPpRKejzHToA3/CoBNbI+NPRVk186vGxXBmk95OEg0TlwgQExP8BnqEtLlRZMbW08e4+6kilc1M1M4N5w== dependencies: core-js "^3.8.2" -"@storybook/core-server@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-6.2.9.tgz#da8b7f043ff59ee6cd2e8631ba8d0f954fdc265a" - integrity sha512-DzihO73pj1Ro0Y4tq9hjw2mLMUYeSRPrx7CndCOBxcTHCKQ8Kd7Dee3wJ49t5/19V7TW1+4lYR59GAy73FeOAQ== - dependencies: - "@babel/core" "^7.12.10" - "@babel/plugin-transform-template-literals" "^7.12.1" - "@babel/preset-react" "^7.12.10" - "@storybook/addons" "6.2.9" - "@storybook/builder-webpack4" "6.2.9" - "@storybook/core-client" "6.2.9" - "@storybook/core-common" "6.2.9" - "@storybook/node-logger" "6.2.9" +"@storybook/core-server@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-6.5.13.tgz#5f0f13b73122f73b9d27962616815305da2a5b28" + integrity sha512-vs7tu3kAnFwuINio1p87WyqDNlFyZESmeh9s7vvrZVbe/xS/ElqDscr9DT5seW+jbtxufAaHsx+JUTver1dheQ== + dependencies: + "@discoveryjs/json-ext" "^0.5.3" + "@storybook/builder-webpack4" "6.5.13" + "@storybook/core-client" "6.5.13" + "@storybook/core-common" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/csf-tools" "6.5.13" + "@storybook/manager-webpack4" "6.5.13" + "@storybook/node-logger" "6.5.13" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.2.9" - "@storybook/ui" "6.2.9" - "@types/node" "^14.0.10" + "@storybook/store" "6.5.13" + "@storybook/telemetry" "6.5.13" + "@types/node" "^14.0.10 || ^16.0.0" "@types/node-fetch" "^2.5.7" "@types/pretty-hrtime" "^1.0.0" "@types/webpack" "^4.41.26" - airbnb-js-shims "^2.2.1" - babel-loader "^8.2.2" better-opn "^2.1.1" - boxen "^4.2.0" - case-sensitive-paths-webpack-plugin "^2.3.0" + boxen "^5.1.2" chalk "^4.1.0" - cli-table3 "0.6.0" + cli-table3 "^0.6.1" commander "^6.2.1" + compression "^1.7.4" core-js "^3.8.2" - cpy "^8.1.1" - css-loader "^3.6.0" + cpy "^8.1.2" detect-port "^1.3.0" - dotenv-webpack "^1.8.0" + express "^4.17.1" + fs-extra "^9.0.1" + global "^4.4.0" + globby "^11.0.2" + ip "^2.0.0" + lodash "^4.17.21" + node-fetch "^2.6.7" + open "^8.4.0" + pretty-hrtime "^1.0.3" + prompts "^2.4.0" + regenerator-runtime "^0.13.7" + serve-favicon "^2.5.0" + slash "^3.0.0" + telejson "^6.0.8" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + watchpack "^2.2.0" + webpack "4" + ws "^8.2.3" + x-default-browser "^0.4.0" + +"@storybook/core@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.5.13.tgz#4c657c5d8d243f1187dad8763a275d555426957e" + integrity sha512-kw1lCgbsxzUimGww6t5rmuWJmFPe9kGGyzIqvj4RC4BBcEsP40LEu9XhSfvnb8vTOLIULFZeZpdRFfJs4TYbUw== + dependencies: + "@storybook/core-client" "6.5.13" + "@storybook/core-server" "6.5.13" + +"@storybook/csf-tools@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-6.5.13.tgz#cb5cd26083a594bf31b19a66a250ad94863822f6" + integrity sha512-63Ev+VmBqzwSwfUzbuXOLKBD5dMTK2zBYLQ9anTVw70FuTikwTsGIbPgb098K0vsxRCgxl7KM7NpivHqtZtdjw== + dependencies: + "@babel/core" "^7.12.10" + "@babel/generator" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/plugin-transform-react-jsx" "^7.12.12" + "@babel/preset-env" "^7.12.11" + "@babel/traverse" "^7.12.11" + "@babel/types" "^7.12.11" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/mdx1-csf" "^0.0.1" + core-js "^3.8.2" + fs-extra "^9.0.1" + global "^4.4.0" + regenerator-runtime "^0.13.7" + ts-dedent "^2.0.0" + +"@storybook/csf@0.0.2--canary.4566f4d.1": + version "0.0.2--canary.4566f4d.1" + resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz#dac52a21c40ef198554e71fe4d20d61e17f65327" + integrity sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ== + dependencies: + lodash "^4.17.15" + +"@storybook/docs-tools@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-6.5.13.tgz#00c7041ac7bc827d12731face909351a5af0cb3f" + integrity sha512-hB+hk+895ny4SW84j3X5iV55DHs3bCfTOp7cDdcZJdQrlm0wuDb4A6d4ffNC7ZLh9VkUjU6ST4VEV5Bb0Cptow== + dependencies: + "@babel/core" "^7.12.10" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/store" "6.5.13" + core-js "^3.8.2" + doctrine "^3.0.0" + lodash "^4.17.21" + regenerator-runtime "^0.13.7" + +"@storybook/manager-webpack4@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/manager-webpack4/-/manager-webpack4-6.5.13.tgz#73350ac3e8a10494158df3c1ea01dd7f329bec8e" + integrity sha512-pURzS5W3XM0F7bCBWzpl7TRsuy+OXFwLXiWLaexuvo0POZe31Ueo2A1R4rx3MT5Iee8O9mYvG2XTmvK9MlLefQ== + dependencies: + "@babel/core" "^7.12.10" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/preset-react" "^7.12.10" + "@storybook/addons" "6.5.13" + "@storybook/core-client" "6.5.13" + "@storybook/core-common" "6.5.13" + "@storybook/node-logger" "6.5.13" + "@storybook/theming" "6.5.13" + "@storybook/ui" "6.5.13" + "@types/node" "^14.0.10 || ^16.0.0" + "@types/webpack" "^4.41.26" + babel-loader "^8.0.0" + case-sensitive-paths-webpack-plugin "^2.3.0" + chalk "^4.1.0" + core-js "^3.8.2" + css-loader "^3.6.0" express "^4.17.1" file-loader "^6.2.0" - file-system-cache "^1.0.5" find-up "^5.0.0" fs-extra "^9.0.1" - global "^4.4.0" html-webpack-plugin "^4.0.0" - ip "^1.1.5" - node-fetch "^2.6.1" + node-fetch "^2.6.7" pnp-webpack-plugin "1.6.4" - pretty-hrtime "^1.0.3" - prompts "^2.4.0" read-pkg-up "^7.0.1" regenerator-runtime "^0.13.7" resolve-from "^5.0.0" - serve-favicon "^2.5.0" style-loader "^1.3.0" - telejson "^5.1.0" - terser-webpack-plugin "^3.1.0" + telejson "^6.0.8" + terser-webpack-plugin "^4.2.3" ts-dedent "^2.0.0" url-loader "^4.1.1" util-deprecate "^1.0.2" @@ -2900,83 +2376,127 @@ webpack-dev-middleware "^3.7.3" webpack-virtual-modules "^0.2.2" -"@storybook/core@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.2.9.tgz#e32e72b3bdb44384f5f0ff93ad1a483acd033b4b" - integrity sha512-pzbyjWvj0t8m0kR2pC9GQne4sZn7Y/zfcbm6/31CL+yhzOQjfJEj3n4ZFUlxikXqQJPg1aWfypfyaeaLL0QyuA== - dependencies: - "@storybook/core-client" "6.2.9" - "@storybook/core-server" "6.2.9" - -"@storybook/csf@0.0.1": +"@storybook/mdx1-csf@^0.0.1": version "0.0.1" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.0.1.tgz#95901507dc02f0bc6f9ac8ee1983e2fc5bb98ce6" - integrity sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw== + resolved "https://registry.yarnpkg.com/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz#d4184e3f6486fade9f7a6bfaf934d9bc07718d5b" + integrity sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg== dependencies: - lodash "^4.17.15" + "@babel/generator" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/preset-env" "^7.12.11" + "@babel/types" "^7.12.11" + "@mdx-js/mdx" "^1.6.22" + "@types/lodash" "^4.14.167" + js-string-escape "^1.0.1" + loader-utils "^2.0.0" + lodash "^4.17.21" + prettier ">=2.2.1 <=2.3.0" + ts-dedent "^2.0.0" -"@storybook/node-logger@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.2.9.tgz#c67d8d7684514b8d00207502e8a9adda0ee750e5" - integrity sha512-ryRBChWZf1A5hOVONErJZosS25IdMweoMVFAUAcj91iC0ynoSA6YL2jmoE71jQchxEXEgkDeRkX9lR/GlqFGZQ== +"@storybook/node-logger@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.5.13.tgz#f4833ae220efe841747c4fead26419d6625af8d9" + integrity sha512-/r5aVZAqZRoy5FyNk/G4pj7yKJd3lJfPbAaOHVROv2IF7PJP/vtRaDkcfh0g2U6zwuDxGIqSn80j+qoEli9m5A== dependencies: "@types/npmlog" "^4.1.2" chalk "^4.1.0" core-js "^3.8.2" - npmlog "^4.1.2" + npmlog "^5.0.1" pretty-hrtime "^1.0.3" -"@storybook/postinstall@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-6.2.9.tgz#3573ca86a27e9628defdd3a2c64721ee9db359ce" - integrity sha512-HjAjXZV+WItonC7lVrfrUsQuRFZNz1g1lE0GgsEK2LdC5rAcD/JwJxjiWREwY+RGxKL9rpWgqyxVQajpIJRjhA== +"@storybook/postinstall@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-6.5.13.tgz#b57b68682b853fd451061c06becd1eff18a75cf8" + integrity sha512-qmqP39FGIP5NdhXC5IpAs9cFoYx9fg1psoQKwb9snYb98eVQU31uHc1W2MBUh3lG4AjAm7pQaXJci7ti4jOh3g== dependencies: core-js "^3.8.2" -"@storybook/react@^6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.2.9.tgz#84f42b3d9a5c8de814f71ae186886076ba377d2c" - integrity sha512-glvw+o/Vek2oapYIXCYDK6gm3cuSnx0XdOpiJVcXk3KLb8JfLbdzGYYp6dcWUbyOBqGcGFRpXIgMmkcwgn+fvQ== +"@storybook/preview-web@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/preview-web/-/preview-web-6.5.13.tgz#332cac4c95e3fd760c9eb8448dfa50fdb3b6255b" + integrity sha512-GNNYVzw4SmRua3dOc52Ye6Us4iQbq5GKQ56U3iwnzZM3TBdJB+Rft94Fn1/pypHujEHS8hl5Xgp9td6C1lLCow== + dependencies: + "@storybook/addons" "6.5.13" + "@storybook/channel-postmessage" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/store" "6.5.13" + ansi-to-html "^0.6.11" + core-js "^3.8.2" + global "^4.4.0" + lodash "^4.17.21" + qs "^6.10.0" + regenerator-runtime "^0.13.7" + synchronous-promise "^2.0.15" + ts-dedent "^2.0.0" + unfetch "^4.2.0" + util-deprecate "^1.0.2" + +"@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0": + version "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0" + resolved "https://registry.yarnpkg.com/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0.tgz#3103532ff494fb7dc3cf835f10740ecf6a26c0f9" + integrity sha512-eVg3BxlOm2P+chijHBTByr90IZVUtgRW56qEOLX7xlww2NBuKrcavBlcmn+HH7GIUktquWkMPtvy6e0W0NgA5w== + dependencies: + debug "^4.1.1" + endent "^2.0.1" + find-cache-dir "^3.3.1" + flat-cache "^3.0.4" + micromatch "^4.0.2" + react-docgen-typescript "^2.1.1" + tslib "^2.0.0" + +"@storybook/react@^6.5.9": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.5.13.tgz#9b02c4515b6c6a13ce92f1bb4869c20c8ae05dfa" + integrity sha512-4gO8qihEkVZ8RNm9iQd7G2iZz4rRAHizJ6T5m58Sn21fxfyg9zAMzhgd0JzXuPXR8lTTj4AvRyPv1Qx7b43smg== dependencies: "@babel/preset-flow" "^7.12.1" "@babel/preset-react" "^7.12.10" - "@pmmmwh/react-refresh-webpack-plugin" "^0.4.3" - "@storybook/addons" "6.2.9" - "@storybook/core" "6.2.9" - "@storybook/core-common" "6.2.9" - "@storybook/node-logger" "6.2.9" + "@pmmmwh/react-refresh-webpack-plugin" "^0.5.3" + "@storybook/addons" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/core" "6.5.13" + "@storybook/core-common" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" + "@storybook/docs-tools" "6.5.13" + "@storybook/node-logger" "6.5.13" + "@storybook/react-docgen-typescript-plugin" "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0" "@storybook/semver" "^7.3.2" + "@storybook/store" "6.5.13" + "@types/estree" "^0.0.51" + "@types/node" "^14.14.20 || ^16.0.0" "@types/webpack-env" "^1.16.0" + acorn "^7.4.1" + acorn-jsx "^5.3.1" + acorn-walk "^7.2.0" babel-plugin-add-react-displayname "^0.0.5" - babel-plugin-named-asset-import "^0.3.1" babel-plugin-react-docgen "^4.2.1" core-js "^3.8.2" + escodegen "^2.0.0" + fs-extra "^9.0.1" global "^4.4.0" - lodash "^4.17.20" + html-tags "^3.1.0" + lodash "^4.17.21" prop-types "^15.7.2" - react-dev-utils "^11.0.3" - react-docgen-typescript-plugin "^0.6.2" - react-refresh "^0.8.3" + react-element-to-jsx-string "^14.3.4" + react-refresh "^0.11.0" read-pkg-up "^7.0.1" regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" - webpack "4" + util-deprecate "^1.0.2" + webpack ">=4.43.0 <6.0.0" -"@storybook/router@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.2.9.tgz#547543031dd8330870bb6b473dcf7e51982e841c" - integrity sha512-7Bn1OFoItCl8whXRT8N1qp1Lky7kzXJ3aslWp5E8HcM8rxh4OYXfbaeiyJEJxBTGC5zxgY+tAEXHFjsAviFROg== +"@storybook/router@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.5.13.tgz#c8bfed96f2343b097d416cfc95194038365fce94" + integrity sha512-sf5aogfirH5ucD0d0hc2mKf2iyWsZsvXhr5kjxUQmgkcoflkGUWhc34sbSQVRQ1i8K5lkLIDH/q2s1Zr2SbzhQ== dependencies: - "@reach/router" "^1.3.4" - "@storybook/client-logger" "6.2.9" - "@types/reach__router" "^1.3.7" + "@storybook/client-logger" "6.5.13" core-js "^3.8.2" - fast-deep-equal "^3.1.3" - global "^4.4.0" - lodash "^4.17.20" memoizerific "^1.11.3" qs "^6.10.0" - ts-dedent "^2.0.0" + regenerator-runtime "^0.13.7" "@storybook/semver@^7.3.2": version "7.3.2" @@ -2986,101 +2506,129 @@ core-js "^3.6.5" find-up "^4.1.0" -"@storybook/source-loader@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-6.2.9.tgz#ac6b314e48044acad5318d237275b24e684edb9f" - integrity sha512-cx499g7BG2oeXvRFx45r0W0p2gKEy/e88WsUFnqqfMKZBJ8K0R/lx5DI0l1hq+TzSrE6uGe0/uPlaLkJNIro7g== +"@storybook/source-loader@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-6.5.13.tgz#40e6e42888b8c12b43a505ffa6c6f1f2cebb0b0d" + integrity sha512-tHuM8PfeB/0m+JigbaFp+Ld0euFH+fgOObH2W9rjEXy5vnwmaeex/JAdCprv4oL+LcDQEERqNULUUNIvbcTPAg== dependencies: - "@storybook/addons" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/csf" "0.0.1" + "@storybook/addons" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" core-js "^3.8.2" estraverse "^5.2.0" global "^4.4.0" loader-utils "^2.0.0" - lodash "^4.17.20" - prettier "~2.2.1" + lodash "^4.17.21" + prettier ">=2.2.1 <=2.3.0" regenerator-runtime "^0.13.7" -"@storybook/theming@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.2.9.tgz#16bf40180861f222c7ed1d80abd5d1e3cb315660" - integrity sha512-183oJW7AD7Fhqg5NT4ct3GJntwteAb9jZnQ6yhf9JSdY+fk8OhxRbPf7ov0au2gYACcGrWDd9K5pYQsvWlP5gA== +"@storybook/store@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/store/-/store-6.5.13.tgz#0281bdf0e24c880f85ea75ae47b6a84e8545b5f8" + integrity sha512-GG6lm+8fBX1tNUnX7x3raBOjYhhf14bPWLtYiPlxDTFEMs3sJte7zWKZq6NQ79MoBLL6jjzTeolBfDCBw6fiWQ== dependencies: - "@emotion/core" "^10.1.1" - "@emotion/is-prop-valid" "^0.8.6" - "@emotion/styled" "^10.0.27" - "@storybook/client-logger" "6.2.9" + "@storybook/addons" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/csf" "0.0.2--canary.4566f4d.1" core-js "^3.8.2" - deep-object-diff "^1.1.0" - emotion-theming "^10.0.27" + fast-deep-equal "^3.1.3" global "^4.4.0" + lodash "^4.17.21" memoizerific "^1.11.3" - polished "^4.0.5" - resolve-from "^5.0.0" + regenerator-runtime "^0.13.7" + slash "^3.0.0" + stable "^0.1.8" + synchronous-promise "^2.0.15" ts-dedent "^2.0.0" + util-deprecate "^1.0.2" -"@storybook/ui@6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.2.9.tgz#25cdf7ae2ef38ab337570c2377fda1da999792e7" - integrity sha512-jq2xmw3reIqik/6ibUSbNKGR+Xvr9wkAEwexiOl+5WQ5BeYJpw4dmDmsFQf+SQuWaSEUUPolbzkakRQM778Kdg== - dependencies: - "@emotion/core" "^10.1.1" - "@storybook/addons" "6.2.9" - "@storybook/api" "6.2.9" - "@storybook/channels" "6.2.9" - "@storybook/client-logger" "6.2.9" - "@storybook/components" "6.2.9" - "@storybook/core-events" "6.2.9" - "@storybook/router" "6.2.9" - "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.2.9" - "@types/markdown-to-jsx" "^6.11.3" - copy-to-clipboard "^3.3.1" +"@storybook/telemetry@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-6.5.13.tgz#a190001f679ce7899c72b53710765685281fe567" + integrity sha512-PFJEfGbunmfFWabD3rdCF8EHH+45578OHOkMPpXJjqXl94vPQxUH2XTVKQgEQJbYrgX0Vx9Z4tSkdMHuzYDbWQ== + dependencies: + "@storybook/client-logger" "6.5.13" + "@storybook/core-common" "6.5.13" + chalk "^4.1.0" core-js "^3.8.2" - core-js-pure "^3.8.2" - downshift "^6.0.15" - emotion-theming "^10.0.27" - fuse.js "^3.6.1" + detect-package-manager "^2.0.1" + fetch-retry "^5.0.2" + fs-extra "^9.0.1" global "^4.4.0" - lodash "^4.17.20" - markdown-to-jsx "^6.11.4" + isomorphic-unfetch "^3.1.0" + nanoid "^3.3.1" + read-pkg-up "^7.0.1" + regenerator-runtime "^0.13.7" + +"@storybook/theming@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.5.13.tgz#3f905eb9f72ddc28d096384290999057987f3083" + integrity sha512-oif5NGFAUQhizo50r+ctw2hZNLWV4dPHai+L/gFvbaSeRBeHSNkIcMoZ2FlrO566HdGZTDutYXcR+xus8rI28g== + dependencies: + "@storybook/client-logger" "6.5.13" + core-js "^3.8.2" + memoizerific "^1.11.3" + regenerator-runtime "^0.13.7" + +"@storybook/ui@6.5.13": + version "6.5.13" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.5.13.tgz#16b25fd839cdafc2b9989c548bc1ffb711b33dee" + integrity sha512-MklJuSg4Bc+MWjwhZVmZhJaucaeEBUMMa2V9oRWbIgZOdRHqdW72S2vCbaarDAYfBQdnfaoq1GkSQiw+EnWOzA== + dependencies: + "@storybook/addons" "6.5.13" + "@storybook/api" "6.5.13" + "@storybook/channels" "6.5.13" + "@storybook/client-logger" "6.5.13" + "@storybook/components" "6.5.13" + "@storybook/core-events" "6.5.13" + "@storybook/router" "6.5.13" + "@storybook/semver" "^7.3.2" + "@storybook/theming" "6.5.13" + core-js "^3.8.2" memoizerific "^1.11.3" - polished "^4.0.5" qs "^6.10.0" - react-draggable "^4.4.3" - react-helmet-async "^1.0.7" - react-sizeme "^3.0.1" regenerator-runtime "^0.13.7" resolve-from "^5.0.0" - store2 "^2.12.0" -"@types/braces@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" - integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw== +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" -"@types/color-convert@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/color-convert/-/color-convert-2.0.0.tgz#8f5ee6b9e863dcbee5703f5a517ffb13d3ea4e22" - integrity sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ== +"@types/eslint@*": + version "8.4.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" + integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== dependencies: - "@types/color-name" "*" + "@types/estree" "*" + "@types/json-schema" "*" -"@types/color-name@*", "@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== -"@types/glob-base@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@types/glob-base/-/glob-base-0.3.0.tgz#a581d688347e10e50dd7c17d6f2880a10354319d" - integrity sha1-pYHWiDR+EOUN18F9byiAoQNUMZ0= +"@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/glob@*": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.0.0.tgz#321607e9cbaec54f687a0792b2d1d370739455d2" + integrity sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" -"@types/glob@*", "@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" "@types/node" "*" @@ -3093,26 +2641,34 @@ "@types/node" "*" "@types/hast@^2.0.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9" - integrity sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q== + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== dependencies: "@types/unist" "*" +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/html-minifier-terser@^5.0.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" - integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" + integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== "@types/is-function@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" - integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.1.tgz#2d024eace950c836d9e3335a66b97960ae41d022" + integrity sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" @@ -3122,80 +2678,66 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" - integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/markdown-to-jsx@^6.11.3": - version "6.11.3" - resolved "https://registry.yarnpkg.com/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz#cdd1619308fecbc8be7e6a26f3751260249b020e" - integrity sha512-30nFYpceM/ZEvhGiqWjm5quLUxNeld0HCzJEXMZZDpq53FPkS85mTwkWtCXzCqq8s5JYLgM5W392a02xn8Bdaw== - dependencies: - "@types/react" "*" +"@types/lodash@^4.14.167": + version "4.14.189" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.189.tgz#975ff8c38da5ae58b751127b19ad5e44b5b7f6d2" + integrity sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA== "@types/mdast@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" - integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" + integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== dependencies: "@types/unist" "*" -"@types/micromatch@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/micromatch/-/micromatch-4.0.1.tgz#9381449dd659fc3823fd2a4190ceacc985083bc7" - integrity sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw== - dependencies: - "@types/braces" "*" - "@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/node-fetch@^2.5.7": - version "2.5.10" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.10.tgz#9b4d4a0425562f9fcea70b12cb3fcdd946ca8132" - integrity sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ== + version "2.6.2" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== dependencies: "@types/node" "*" form-data "^3.0.0" "@types/node@*": - version "15.6.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08" - integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA== + version "18.11.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" + integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== -"@types/node@^14.0.10": - version "14.17.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.1.tgz#5e07e0cb2ff793aa7a1b41deae76221e6166049f" - integrity sha512-/tpUyFD7meeooTRwl3sYlihx2BrJE7q9XF71EguPFIySj9B7qgnRtHsHTho+0AUm4m1SvWGm6uSncrR94q6Vtw== +"@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0": + version "16.18.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.3.tgz#d7f7ba828ad9e540270f01ce00d391c54e6e0abc" + integrity sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg== "@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/npmlog@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@types/npmlog/-/npmlog-4.1.2.tgz#d070fe6a6b78755d1092a3dc492d34c3d8f871c4" - integrity sha512-4QQmOF5KlwfxJ5IGXFIudkeLCdMABz03RcUXu+LCb24zmln8QW6aDjuGl4d4XPVLf2j+FnjelHTP7dvceAFbhA== - -"@types/overlayscrollbars@^1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@types/overlayscrollbars/-/overlayscrollbars-1.12.0.tgz#98456caceca8ad73bd5bb572632a585074e70764" - integrity sha512-h/pScHNKi4mb+TrJGDon8Yb06ujFG0mSg12wIO0sWMUF3dQIe2ExRRdNRviaNt9IjxIiOfnRr7FsQAdHwK4sMg== + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/npmlog/-/npmlog-4.1.4.tgz#30eb872153c7ead3e8688c476054ddca004115f6" + integrity sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ== "@types/parse-json@^4.0.0": version "4.0.0" @@ -3208,47 +2750,33 @@ integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== "@types/pretty-hrtime@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/pretty-hrtime/-/pretty-hrtime-1.0.0.tgz#c5a2d644a135e988b2932f99737e67b3c62528d0" - integrity sha512-xl+5r2rcrxdLViAYkkiLMYsoUs3qEyrAnHFyEzYysgRxdVp3WbhysxIvJIxZp9FvZ2CYezh0TaHZorivH+voOQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz#72a26101dc567b0d68fd956cf42314556e42d601" + integrity sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ== "@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/qs@^6.9.5": - version "6.9.6" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" - integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== - -"@types/reach__router@^1.3.7": - version "1.3.7" - resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.7.tgz#de8ab374259ae7f7499fc1373b9697a5f3cd6428" - integrity sha512-cyBEb8Ef3SJNH5NYEIDGPoMMmYUxROatuxbICusVRQIqZUB85UCt6R2Ok60tKS/TABJsJYaHyNTW3kqbpxlMjg== - dependencies: - "@types/react" "*" - -"@types/react-syntax-highlighter@11.0.5": - version "11.0.5" - resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz#0d546261b4021e1f9d85b50401c0a42acb106087" - integrity sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg== - dependencies: - "@types/react" "*" + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/react@*": - version "17.0.6" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.6.tgz#0ec564566302c562bf497d73219797a5e0297013" - integrity sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw== + version "18.0.25" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.25.tgz#8b1dcd7e56fe7315535a4af25435e0bb55c8ae44" + integrity sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" "@types/scheduler@*": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" - integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== "@types/source-list-map@*": version "0.1.2" @@ -3256,40 +2784,45 @@ integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== "@types/tapable@^1", "@types/tapable@^1.0.5": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.7.tgz#545158342f949e8fd3bfd813224971ecddc3fac4" - integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ== + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" + integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== "@types/uglify-js@*": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124" - integrity sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q== + version "3.17.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.1.tgz#e0ffcef756476410e5bce2cb01384ed878a195b5" + integrity sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g== dependencies: source-map "^0.6.1" "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" - integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== "@types/webpack-env@^1.16.0": - version "1.16.0" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.0.tgz#8c0a9435dfa7b3b1be76562f3070efb3f92637b4" - integrity sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw== + version "1.18.0" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.18.0.tgz#ed6ecaa8e5ed5dfe8b2b3d00181702c9925f13fb" + integrity sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg== "@types/webpack-sources@*": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" - integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b" + integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg== dependencies: "@types/node" "*" "@types/source-list-map" "*" source-map "^0.7.3" "@types/webpack@^4.41.26", "@types/webpack@^4.41.8": - version "4.41.29" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.29.tgz#2e66c1de8223c440366469415c50a47d97625773" - integrity sha512-6pLaORaVNZxiB3FSHbyBiWM7QdazAWda1zvAq4SbZObZqHSDbWLi62iFdblVea6SK9eyBIVp5yHhKt/yNQdR7Q== + version "4.41.33" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.33.tgz#16164845a5be6a306bcbe554a8e67f9cac215ffc" + integrity sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g== dependencies: "@types/node" "*" "@types/tapable" "^1" @@ -3299,25 +2832,24 @@ source-map "^0.6.0" "@types/yargs-parser@*": - version "20.2.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^15.0.0": - version "15.0.13" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" - integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== + version "15.0.14" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== dependencies: "@types/yargs-parser" "*" -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" "@webassemblyjs/ast@1.9.0": version "1.9.0" @@ -3328,43 +2860,36 @@ "@webassemblyjs/helper-wasm-bytecode" "1.9.0" "@webassemblyjs/wast-parser" "1.9.0" -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== "@webassemblyjs/floating-point-hex-parser@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== "@webassemblyjs/helper-api-error@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== "@webassemblyjs/helper-buffer@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== - dependencies: - "@webassemblyjs/wast-printer" "1.8.5" - "@webassemblyjs/helper-code-frame@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" @@ -3372,24 +2897,11 @@ dependencies: "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== - "@webassemblyjs/helper-fsm@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== - dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" - "@webassemblyjs/helper-module-context@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" @@ -3397,25 +2909,34 @@ dependencies: "@webassemblyjs/ast" "1.9.0" -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== "@webassemblyjs/helper-wasm-bytecode@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" "@webassemblyjs/helper-wasm-section@1.9.0": version "1.9.0" @@ -3427,10 +2948,10 @@ "@webassemblyjs/helper-wasm-bytecode" "1.9.0" "@webassemblyjs/wasm-gen" "1.9.0" -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== dependencies: "@xtuc/ieee754" "^1.2.0" @@ -3441,10 +2962,10 @@ dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== dependencies: "@xtuc/long" "4.2.2" @@ -3455,29 +2976,29 @@ dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== "@webassemblyjs/utf8@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" "@webassemblyjs/wasm-edit@1.9.0": version "1.9.0" @@ -3493,16 +3014,16 @@ "@webassemblyjs/wasm-parser" "1.9.0" "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" "@webassemblyjs/wasm-gen@1.9.0": version "1.9.0" @@ -3515,15 +3036,15 @@ "@webassemblyjs/leb128" "1.9.0" "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" "@webassemblyjs/wasm-opt@1.9.0": version "1.9.0" @@ -3535,17 +3056,17 @@ "@webassemblyjs/wasm-gen" "1.9.0" "@webassemblyjs/wasm-parser" "1.9.0" -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" "@webassemblyjs/wasm-parser@1.9.0": version "1.9.0" @@ -3559,18 +3080,6 @@ "@webassemblyjs/leb128" "1.9.0" "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" - "@xtuc/long" "4.2.2" - "@webassemblyjs/wast-parser@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" @@ -3583,13 +3092,12 @@ "@webassemblyjs/helper-fsm" "1.9.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" "@webassemblyjs/wast-printer@1.9.0": @@ -3623,63 +3131,60 @@ mini-css-extract-plugin "0.4.3" postcss-loader "3.0.0" -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abort-controller@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" -accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== +accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + mime-types "~2.1.34" + negotiator "0.6.3" -ace-builds@^1.4.5: - version "1.4.8" - resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.4.8.tgz#d14be41d30294a2a12581f0bcfee4b696481ffdd" - integrity sha512-8ZVAxwyCGAxQX8mOp9imSXH0hoSPkGfy8igJy+WO/7axL30saRhKgg1XPACSmxxPA7nfHVwM+ShWXT+vKsNuFg== +ace-builds@^1.7.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.13.1.tgz#8afa31a79bea3bb83fbbdf99c4176396a271ceca" + integrity sha512-HvkZv/AhDRSA4k5Co5Dg8dWOTfID0AQ7Sa5cU6V82fz/XfCA0A/icC3sdBoh9yg0WQoJqbFrRYc+ogr/971Vww== -acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.2.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== - acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== - acorn@^7.4.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -address@1.1.2, address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== +acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +address@^1.0.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.1.tgz#25bb61095b7522d65b357baa11bc05492d4c8acd" + integrity sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA== adjust-sourcemap-loader@2.0.0: version "2.0.0" @@ -3692,6 +3197,13 @@ adjust-sourcemap-loader@2.0.0: object-path "0.11.4" regex-parser "2.2.10" +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3728,17 +3240,12 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== - -ajv-keywords@^3.5.2: +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, 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@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3748,86 +3255,65 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.12.4, ajv json-schema-traverse "^0.4.1" uri-js "^4.2.2" -amphtml-validator@1.0.30: - version "1.0.30" - resolved "https://registry.yarnpkg.com/amphtml-validator/-/amphtml-validator-1.0.30.tgz#b722ea5e965d0cc028cbdc360fc76b97e669715e" - integrity sha512-CaEm2ivIi4M4QTiFnCE9t4MRgawCf88iAV/+VsS0zEw6T4VBU6zoXcgn4L+dt6/WZ/NYxKpc38duSoRLqZJhNQ== +ally.js@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/ally.js/-/ally.js-1.4.1.tgz#9fb7e6ba58efac4ee9131cb29aa9ee3b540bcf1e" + integrity sha512-ZewdfuwP6VewtMN36QY0gmiyvBfMnmEaNwbVu2nTS6zRt069viTgkYgaDiqu6vRJ1VJCriNqV0jGMu44R8zNbA== dependencies: - colors "1.2.5" - commander "2.15.1" - promise "8.0.1" + css.escape "^1.5.0" + platform "1.3.3" + +anser@1.4.9: + version "1.4.9" + resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" + integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: - string-width "^3.0.0" + string-width "^4.1.0" ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== - dependencies: - type-fest "^0.11.0" - -ansi-html@0.0.7, ansi-html@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= +ansi-html-community@0.0.8, ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - ansi-to-html@^0.6.11: version "0.6.15" resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.15.tgz#ac6ad4798a00f6aa045535d7f6a9cb9294eebea7" @@ -3843,7 +3329,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.0, anymatch@^3.0.3: +anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -3851,31 +3337,28 @@ anymatch@^3.0.0, anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - app-root-dir@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" - integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= + integrity sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g== + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== dependencies: delegates "^1.0.0" - readable-stream "^2.0.6" + readable-stream "^3.6.0" argparse@^1.0.7: version "1.0.10" @@ -3884,15 +3367,20 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arity-n@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" - integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + integrity sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ== arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -3902,42 +3390,38 @@ arr-flatten@^1.1.0: arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== array-find@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" - integrity sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg= + integrity sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ== array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" - integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== +array-includes@^3.0.3, array-includes@^3.1.4, array-includes@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.1.1" - is-string "^1.0.5" - -array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - is-string "^1.0.5" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" -array-union@^1.0.1, array-union@^1.0.2: +array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== dependencies: array-uniq "^1.0.1" @@ -3949,83 +3433,74 @@ array-union@^2.1.0: array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.flat@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" - integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== -array.prototype.flat@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== +array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.5: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== +array.prototype.flatmap@^1.2.1, array.prototype.flatmap@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" - integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== +array.prototype.map@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.5.tgz#6e43c2fee6c0fb5e4806da2dc92eb00970809e55" + integrity sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" -array.prototype.map@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.3.tgz#1609623618d3d84134a37d4a220030c2bd18420b" - integrity sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA== +array.prototype.reduce@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" + integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.5" + is-string "^1.0.7" arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" assert@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + integrity sha512-N+aAxov+CKVS3JuhDIQFr24XvZvwE96Wlhk9dytTg/GmwWoghdOvR8dspx8MVz71O+Y0pA3UPqHF68D6iy8UvQ== dependencies: util "0.10.3" @@ -4040,7 +3515,7 @@ assert@^1.1.1: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== ast-types@0.13.2: version "0.13.2" @@ -4054,142 +3529,75 @@ ast-types@^0.14.2: dependencies: tslib "^2.0.1" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-retry@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" - integrity sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q== - dependencies: - retry "0.12.0" - -async-sema@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/async-sema/-/async-sema-3.0.0.tgz#9e22d6783f0ab66a1cf330e21a905e39b3b3a975" - integrity sha512-zyCMBDl4m71feawrxYcVbHxv/UUkqm4nKJiLu3+l9lfiQha6jQ/9dxhrXLnzzBXVFqCTDwiUkZOz9XFbdEGQsg== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autodll-webpack-plugin@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/autodll-webpack-plugin/-/autodll-webpack-plugin-0.4.2.tgz#36e98fbaf30c235d1d5d076330464ac80901415c" - integrity sha512-JLrV3ErBNKVkmhi0celM6PJkgYEtztFnXwsNBApjinpVHtIP3g/m2ZZSOvsAe7FoByfJzDhpOXBKFbH3k2UNjw== - dependencies: - bluebird "^3.5.0" - del "^3.0.0" - find-cache-dir "^1.0.0" - lodash "^4.17.4" - make-dir "^1.0.0" - memory-fs "^0.4.1" - read-pkg "^2.0.0" - tapable "^1.0.0" - webpack-merge "^4.1.0" - webpack-sources "^1.0.1" - -autoprefixer@^9.6.1: - version "9.7.3" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.3.tgz#fd42ed03f53de9beb4ca0d61fb4f7268a9bb50b4" - integrity sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q== - dependencies: - browserslist "^4.8.0" - caniuse-lite "^1.0.30001012" - chalk "^2.4.2" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.23" - postcss-value-parser "^4.0.2" +attr-accept@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" + integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== autoprefixer@^9.8.6: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + version "9.8.8" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" + integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== dependencies: browserslist "^4.12.0" caniuse-lite "^1.0.30001109" - colorette "^1.2.1" normalize-range "^0.1.2" num2fraction "^1.2.2" + picocolors "^0.2.1" postcss "^7.0.32" postcss-value-parser "^4.1.0" -axios@^0.26.1: - version "0.26.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" - integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: - follow-redirects "^1.14.8" + follow-redirects "^1.14.9" + form-data "^4.0.0" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== dependencies: chalk "^1.1.3" esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - -babel-eslint@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-loader@8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== - dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - pify "^4.0.1" - -babel-loader@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== +babel-loader@^8.0.0, babel-loader@^8.2.5: + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== dependencies: find-cache-dir "^3.3.1" - loader-utils "^1.4.0" + loader-utils "^2.0.0" make-dir "^3.1.0" schema-utils "^2.6.5" babel-plugin-add-react-displayname@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" - integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U= + integrity sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw== babel-plugin-apply-mdx-type-prop@1.6.22: version "1.6.22" @@ -4199,13 +3607,6 @@ babel-plugin-apply-mdx-type-prop@1.6.22: "@babel/helper-plugin-utils" "7.10.4" "@mdx-js/util" "1.6.22" -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== - dependencies: - object.assign "^4.1.0" - babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -4214,9 +3615,9 @@ babel-plugin-dynamic-import-node@^2.3.3: object.assign "^4.1.0" babel-plugin-emotion@^10.0.27: - version "10.0.33" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz#ce1155dcd1783bbb9286051efee53f4e2be63e03" - integrity sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ== + version "10.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz#a1fe3503cff80abfd0bdda14abd2e8e57a79d17d" + integrity sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA== dependencies: "@babel/helper-module-imports" "^7.0.0" "@emotion/hash" "0.8.0" @@ -4237,17 +3638,17 @@ babel-plugin-extract-import-names@1.6.22: "@babel/helper-plugin-utils" "7.10.4" babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.8.0: +babel-plugin-macros@^2.0.0: version "2.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== @@ -4265,18 +3666,13 @@ babel-plugin-macros@^3.0.1: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-named-asset-import@^0.3.1: - version "0.3.7" - resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd" - integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw== - -babel-plugin-polyfill-corejs2@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.1.tgz#ae2cf6d6f1aa7c0edcf04a25180e8856a6d1184f" - integrity sha512-hXGSPbr6IbjeMyGew+3uGIAkRjBFSOJ9FLDZNOfHuyJZCcoia4nd/72J0bSgvfytcVfUcP/dxEVcUhVJuQRtSw== +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.1" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" babel-plugin-polyfill-corejs3@^0.1.0: @@ -4287,20 +3683,20 @@ babel-plugin-polyfill-corejs3@^0.1.0: "@babel/helper-define-polyfill-provider" "^0.1.5" core-js-compat "^3.8.1" -babel-plugin-polyfill-corejs3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.1.tgz#786f40218040030f0edecfd48e6e59f1ee9bef53" - integrity sha512-WZCqF3DLUhdTD/P381MDJfuP18hdCZ+iqJ+wHtzhWENpsiof284JJ1tMQg1CE+hfCWyG48F7e5gDMk2c3Laz7w== +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.1" - core-js-compat "^3.9.1" + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" -babel-plugin-polyfill-regenerator@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.1.tgz#ca9595d7d5f3afefec2d83126148b90db751a091" - integrity sha512-T3bYyL3Sll2EtC94v3f+fA8M28q7YPTOZdB++SRHjvYZTvtd+WorMUq3tDTD4Q7Kjk1LG0gGromslKjcO5p2TA== +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.1" + "@babel/helper-define-polyfill-provider" "^0.3.3" babel-plugin-react-docgen@^4.2.1: version "4.2.1" @@ -4314,7 +3710,7 @@ babel-plugin-react-docgen@^4.2.1: babel-plugin-syntax-jsx@6.18.0, babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== babel-plugin-transform-define@2.0.0: version "2.0.0" @@ -4335,14 +3731,14 @@ bail@^1.0.0: integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base@^0.11.1: version "0.11.2" @@ -4357,11 +3753,6 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -batch-processor@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" - integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= - better-opn@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-2.1.1.tgz#94a55b4695dc79288f31d7d0e5f658320759f7c6" @@ -4369,6 +3760,11 @@ better-opn@^2.1.1: dependencies: open "^7.0.3" +big-integer@^1.6.7: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -4380,54 +3776,75 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" -bluebird@^3.3.5, bluebird@^3.5.0, bluebird@^3.5.5: +bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.9: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: - bytes "3.1.0" + bytes "3.1.2" content-type "~1.0.4" debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== dependencies: ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +bplist-parser@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" + integrity sha512-2AEM0FXy8ZxVLBuqX0hqt1gDwcnz2zygEkQ6zaD5Wko/sB9paUNwlpawrFtKeHUAQUOzjVy9AO4oeonqIHKA9Q== + dependencies: + big-integer "^1.6.7" brace-expansion@^1.1.7: version "1.1.11" @@ -4453,7 +3870,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -4463,7 +3880,7 @@ braces@^3.0.1, braces@~3.0.2: brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" @@ -4496,26 +3913,28 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -4524,35 +3943,25 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@4.14.2: - version "4.14.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" - integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== - dependencies: - caniuse-lite "^1.0.30001125" - electron-to-chromium "^1.3.564" - escalade "^3.0.2" - node-releases "^1.1.61" - -browserslist@4.8.3, browserslist@^4.6.0, browserslist@^4.6.4, browserslist@^4.8.0, browserslist@^4.8.2: - version "4.8.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.3.tgz#65802fcd77177c878e015f0e3189f2c4f627ba44" - integrity sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg== - dependencies: - caniuse-lite "^1.0.30001017" - electron-to-chromium "^1.3.322" - node-releases "^1.1.44" - -browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" +browserslist@4.13.0: + version "4.13.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" + integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== + dependencies: + caniuse-lite "^1.0.30001093" + electron-to-chromium "^1.3.488" + escalade "^3.0.1" + node-releases "^1.1.58" + +browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" bser@2.1.1: version "2.1.1" @@ -4561,25 +3970,23 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-json@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" - integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== +buffer-from@^1.0.0, buffer-from@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" buffer@^4.3.0: version "4.9.2" @@ -4593,40 +4000,63 @@ buffer@^4.3.0: builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== c8@^7.6.0: - version "7.7.2" - resolved "https://registry.yarnpkg.com/c8/-/c8-7.7.2.tgz#30ff37b8125d96cab3eb065895a0b68dbc495a0f" - integrity sha512-8AqNnUMxB3hsgYCYso2GJjlwnaNPlrEEbYbCQb7N76V1nrOgCKXiTcE3gXU18rIj0FeduPywROrIBMC7XAKApg== + version "7.12.0" + resolved "https://registry.yarnpkg.com/c8/-/c8-7.12.0.tgz#402db1c1af4af5249153535d1c84ad70c5c96b14" + integrity sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@istanbuljs/schema" "^0.1.2" + "@istanbuljs/schema" "^0.1.3" find-up "^5.0.0" foreground-child "^2.0.0" - istanbul-lib-coverage "^3.0.0" + istanbul-lib-coverage "^3.2.0" istanbul-lib-report "^3.0.0" - istanbul-reports "^3.0.2" - rimraf "^3.0.0" + istanbul-reports "^3.1.4" + rimraf "^3.0.2" test-exclude "^6.0.0" - v8-to-istanbul "^7.1.0" + v8-to-istanbul "^9.0.0" yargs "^16.2.0" - yargs-parser "^20.2.7" + yargs-parser "^20.2.9" + +cacache@15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" + unique-filename "^1.1.1" cacache@^12.0.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" @@ -4645,10 +4075,11 @@ cacache@^12.0.2: y18n "^4.0.0" cacache@^15.0.5: - version "15.1.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.1.0.tgz#164c2f857ee606e4cc793c63018fefd0ea5eba7b" - integrity sha512-mfx0C+mCfWjD1PnwQ9yaOrwG1ou9FkKnx0SvzUHWdFt7r7GaRtzT+9M8HAvLu62zIHtnpQ/1m93nWNDCckJGXQ== + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== dependencies: + "@npmcli/fs" "^1.0.0" "@npmcli/move-file" "^1.0.1" chownr "^2.0.0" fs-minipass "^2.0.0" @@ -4682,18 +4113,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cache-loader@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz#9948cae353aec0a1fcb1eafda2300816ec85387e" - integrity sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw== - dependencies: - buffer-json "^2.0.0" - find-cache-dir "^3.0.0" - loader-utils "^1.2.3" - mkdirp "^0.5.1" - neo-async "^2.6.1" - schema-utils "^2.0.0" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -4703,28 +4122,28 @@ call-bind@^1.0.0, call-bind@^1.0.2: get-intrinsic "^1.0.2" call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== dependencies: callsites "^2.0.0" caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== dependencies: caller-callsite "^2.0.0" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== callsites@^3.0.0: version "3.1.0" @@ -4744,6 +4163,14 @@ camelcase-css@2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ== + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + camelcase@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" @@ -4754,20 +4181,20 @@ camelcase@5.3.1, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001012: - version "1.0.30001015" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz#15a7ddf66aba786a71d99626bc8f2b91c6f0f5f0" - integrity sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ== +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw== -caniuse-lite@^1.0.30001017: - version "1.0.30001038" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz#44da3cbca2ab6cb6aa83d1be5d324e17f141caff" - integrity sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ== +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001219: - version "1.0.30001228" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" - integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== +caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001113, caniuse-lite@^1.0.30001400: + version "1.0.30001431" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz#e7c59bd1bc518fae03a4656be442ce6c4887a795" + integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ== capture-exit@^2.0.0: version "2.0.0" @@ -4786,19 +4213,18 @@ ccount@^1.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== +chalk@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" + integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + ansi-styles "^4.1.0" + supports-color "^7.1.0" chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -4806,18 +4232,19 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" chalk@^4.0.0, chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -4835,14 +4262,9 @@ character-entities@^1.0.0: character-reference-invalid@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chokidar@^2.0.2, chokidar@^2.1.8: +chokidar@2.1.8, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -4861,37 +4283,22 @@ chokidar@^2.0.2, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" - optionalDependencies: - fsevents "~2.1.1" - chokidar@^3.4.1, chokidar@^3.4.2: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" -chownr@^1.1.1, chownr@^1.1.4: +chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -4902,13 +4309,11 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -ci-info@2.0.0, ci-info@^2.0.0: +ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== @@ -4931,20 +4336,20 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.2.5: - version "2.3.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== - -classnames@^2.2.6: +classnames@2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== +classnames@^2.2.6, classnames@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + version "4.2.4" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== dependencies: source-map "~0.6.0" @@ -4953,53 +4358,19 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.0: +cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" - integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== - -cli-table3@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" - integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== +cli-table3@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== dependencies: - object-assign "^4.1.0" string-width "^4.2.0" optionalDependencies: - colors "^1.1.2" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -clipboard@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" - integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== - dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" + "@colors/colors" "1.5.0" cliui@^7.0.2: version "7.0.4" @@ -5019,16 +4390,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" @@ -5037,7 +4398,7 @@ collapse-white-space@^1.0.2: collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -5059,27 +4420,17 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -colors@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" - integrity sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg== - -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +color-support@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== combined-stream@^1.0.8: version "1.0.8" @@ -5093,11 +4444,6 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== -commander@2.15.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== - commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -5113,10 +4459,15 @@ commander@^6.2.1: resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== component-emitter@^1.2.1: version "1.3.0" @@ -5126,18 +4477,18 @@ component-emitter@^1.2.1: compose-function@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" - integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + integrity sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg== dependencies: arity-n "^1.0.4" compressible@~2.0.16: - version "2.0.17" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" - integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: - mime-db ">= 1.40.0 < 2" + mime-db ">= 1.43.0 < 2" -compression@1.7.4: +compression@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== @@ -5150,15 +4501,10 @@ compression@1.7.4: safe-buffer "5.1.2" vary "~1.1.2" -compute-scroll-into-view@^1.0.17: - version "1.0.17" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab" - integrity sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.0: version "1.6.2" @@ -5170,52 +4516,34 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" -conf@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/conf/-/conf-5.0.0.tgz#6530308a36041bf010ab96b05a0f4aff5101c65d" - integrity sha512-lRNyt+iRD4plYaOSVTxu1zPWpaH0EOxgFIR1l3mpC/DGZ7XzhoGFMKmbl54LAgXcSu6knqWgOwdINkqm58N85A== - dependencies: - ajv "^6.10.0" - dot-prop "^5.0.0" - env-paths "^2.2.0" - json-schema-typed "^7.0.0" - make-dir "^3.0.0" - pkg-up "^3.0.1" - write-file-atomic "^3.0.0" - console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: - safe-buffer "5.1.2" + safe-buffer "5.2.1" -content-type@1.0.4, content-type@~1.0.4: +content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -5225,17 +4553,22 @@ convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^0.3.3: version "0.3.5" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" - integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + integrity sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg== + +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== copy-concurrently@^1.0.0: version "1.0.5" @@ -5252,45 +4585,29 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -copy-to-clipboard@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" - integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== - dependencies: - toggle-selection "^1.0.6" - -core-js-compat@^3.1.1: - version "3.4.8" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.8.tgz#f72e6a4ed76437ea710928f44615f926a81607d5" - integrity sha512-l3WTmnXHV2Sfu5VuD7EHE2w7y+K68+kULKt5RJg8ZJk3YhHF1qLD4O8v8AmNq+8vbOwnPFFDvds25/AoEvMqlQ== - dependencies: - browserslist "^4.8.2" - semver "^6.3.0" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== -core-js-compat@^3.8.1, core-js-compat@^3.9.0, core-js-compat@^3.9.1: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.12.1.tgz#2c302c4708505fa7072b0adb5156d26f7801a18b" - integrity sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ== +core-js-compat@^3.25.1, core-js-compat@^3.6.2, core-js-compat@^3.8.1: + version "3.26.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.26.1.tgz#0e710b09ebf689d719545ac36e49041850f943df" + integrity sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A== dependencies: - browserslist "^4.16.6" - semver "7.0.0" + browserslist "^4.21.4" -core-js-pure@^3.8.2: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.12.1.tgz#934da8b9b7221e2a2443dc71dfa5bd77a7ea00b8" - integrity sha512-1cch+qads4JnDSWsvc7d6nzlKAippwjUlf6vykkTLW53VSV+NkE6muGBToAjEA8pG90cSfcud3JgVmW2ds5TaQ== +core-js-pure@^3.23.3: + version "3.26.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.1.tgz#653f4d7130c427820dcecd3168b594e8bb095a33" + integrity sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ== core-js@^3.0.4, core-js@^3.6.5, core-js@^3.8.2: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.12.1.tgz#6b5af4ff55616c08a44d386f1f510917ff204112" - integrity sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw== + version "3.26.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.26.1.tgz#7a9816dabd9ee846c1c0fe0e8fcad68f3709134e" + integrity sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA== core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cosmiconfig@^5.0.0: version "5.2.1" @@ -5314,9 +4631,9 @@ cosmiconfig@^6.0.0: yaml "^1.7.2" cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" @@ -5334,7 +4651,7 @@ cp-file@^7.0.0: nested-error-stacks "^2.0.0" p-event "^4.1.0" -cpy@^8.1.1: +cpy@^8.1.2: version "8.1.2" resolved "https://registry.yarnpkg.com/cpy/-/cpy-8.1.2.tgz#e339ea54797ad23f8e3919a5cffd37bfc3f25935" integrity sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg== @@ -5350,12 +4667,12 @@ cpy@^8.1.1: p-map "^3.0.0" create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" - elliptic "^6.0.0" + elliptic "^6.5.3" create-emotion@^10.0.14, create-emotion@^10.0.27: version "10.0.27" @@ -5367,7 +4684,7 @@ create-emotion@^10.0.14, create-emotion@^10.0.27: "@emotion/sheet" "0.9.4" "@emotion/utils" "0.11.3" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -5378,7 +4695,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -5390,32 +4707,21 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-context@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" - integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== - dependencies: - gud "^1.0.0" - warning "^4.0.3" - -cross-fetch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.4.tgz#7bef7020207e684a7638ef5f2f698e24d9eb283c" - integrity sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw== +cross-fetch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.5.tgz#2739d2981892e7ab488a7ad03b92df2816e03f4c" + integrity sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew== dependencies: node-fetch "2.6.0" - whatwg-fetch "3.0.0" -cross-spawn@7.0.3, cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +cross-fetch@3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" + node-fetch "2.6.7" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -5426,7 +4732,16 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -crypto-browserify@^3.11.0: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@3.12.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -5443,21 +4758,6 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -css-blank-pseudo@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" - integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== - dependencies: - postcss "^7.0.5" - -css-has-pseudo@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" - integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^5.0.0-rc.4" - css-loader@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.0.tgz#9f46aaa5ca41dbe31860e3b62b8e23c42916bf56" @@ -5476,23 +4776,23 @@ css-loader@1.0.0: postcss-value-parser "^3.3.0" source-list-map "^2.0.0" -css-loader@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.3.0.tgz#65f889807baec3197313965d6cda9899f936734d" - integrity sha512-x9Y1vvHe5RR+4tzwFdWExPueK00uqFTCw7mZy+9aE/X1SKWOArm5luaOrtJ4d05IpOwJ6S86b/tVcIdhw1Bu4A== +css-loader@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" + integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== dependencies: - camelcase "^5.3.1" + camelcase "^6.0.0" cssesc "^3.0.0" icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.23" + loader-utils "^2.0.0" + postcss "^7.0.32" postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.1.1" + postcss-modules-local-by-default "^3.0.3" + postcss-modules-scope "^2.2.0" postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.2" - schema-utils "^2.6.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.1" + semver "^7.3.2" css-loader@^3.6.0: version "3.6.0" @@ -5513,38 +4813,36 @@ css-loader@^3.6.0: schema-utils "^2.7.0" semver "^6.3.0" -css-prefers-color-scheme@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" - integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== - dependencies: - postcss "^7.0.5" - -css-select@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" css-selector-tokenizer@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== + version "0.7.3" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" + cssesc "^3.0.0" + fastparse "^1.1.2" + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +css.escape@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== -css@2.2.4, css@^2.0.0: +css@^2.0.0: version "2.2.4" resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== @@ -5554,55 +4852,63 @@ css@2.2.4, css@^2.0.0: source-map-resolve "^0.5.2" urix "^0.1.0" -cssdb@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" - integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-simple@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.0.1.tgz#a53b3c7b67faf49e0a1d79c4a9b7af9dd3d6c812" - integrity sha512-i5MsRDS0EAfefQ2Q70EZ2h3bapKz2fCUdo/I5AmeRaF5atZ6BDLryyvVmBs8ZCrZdaxQdmyK6MRlqJnrg7TICQ== +cssnano-preset-simple@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.1.4.tgz#7b287a31df786348565d02342df71af8f758ac82" + integrity sha512-EYKDo65W+AxMViUijv/hvhbEnxUjmu3V7omcH1MatPOwjRLrAgVArUOE8wTUyc1ePFEtvV8oCT4/QSRJDorm/A== dependencies: - postcss "^7.0.18" + postcss "^7.0.32" -cssnano-simple@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.0.0.tgz#a9322f7f4c192fad29c6d48afcb7927a9c5c597b" - integrity sha512-B7u9vvtXEqeU2rzdt+Kfw5O9Nd46R7KNjJoP7Y5lGQs6c7n1Et5Ilofh2W9OjBV/ZiJV5+7j9ShWgiYNtH/57A== +cssnano-preset-simple@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.0.tgz#afcf13eb076e8ebd91c4f311cd449781c14c7371" + integrity sha512-zojGlY+KasFeQT/SnD/WqYXHcKddz2XHRDtIwxrWpGqGHp5IyLWsWFS3UW7pOf3AWvfkpYSRdxOSlYuJPz8j8g== + dependencies: + caniuse-lite "^1.0.30001093" + postcss "^7.0.32" + +cssnano-simple@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.0.5.tgz#66ee528f3a4e60754e2625ea9f51ac315f5f0a92" + integrity sha512-NJjx2Er1C3pa75v1GwMKm0w6xAp1GsW2Ql1As4CWPNFxTgYFN5e8wblYeHfna13sANAhyIdSIPqKJjBO4CU5Eg== dependencies: - cssnano-preset-simple "^1.0.0" - postcss "^7.0.18" + cssnano-preset-simple "1.1.4" + postcss "^7.0.32" + +cssnano-simple@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.0.tgz#b8cc5f52c2a52e6513b4636d0da165ec9d48d327" + integrity sha512-pton9cZ70/wOCWMAbEGHO1ACsW1KggTB6Ikj7k71uOEsz6SfByH++86+WAmXjRSc9q/g9gxkpFP9bDX9vRotdA== + dependencies: + cssnano-preset-simple "1.2.0" + postcss "^7.0.32" csstype@^2.5.7: - version "2.6.10" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" - integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== + version "2.6.21" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" + integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== csstype@^3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" - integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== + dependencies: + array-find-index "^1.0.1" cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + integrity sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A== d@1, d@^1.0.1: version "1.0.1" @@ -5612,94 +4918,97 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" +data-uri-to-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.0.tgz#8a3088a5efd3f53c3682343313c6895d498eb8d7" + integrity sha512-MJ6mFTZ+nPQO+39ua/ltwNePXrfdF3Ww0wP1Od7EePySXN1cP9XNqRQOG3FxTfipp8jx898LUCgBCEP11Qw/ZQ== + dependencies: + buffer-from "^1.1.1" + dateformat@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - ms "^2.1.1" + ms "2.1.2" -debug@^4.0.1, debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== +debug@^3.0.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" +decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -deep-object-diff@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" - integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= +default-browser-id@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-1.0.4.tgz#e59d09a5d157b828b876c26816e61c3d2a2c203a" + integrity sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw== dependencies: - clone "^1.0.2" + bplist-parser "^0.1.0" + meow "^3.1.0" + untildify "^2.0.0" -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== dependencies: - object-keys "^1.0.12" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" @@ -5711,37 +5020,20 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== des.js@^1.0.0: version "1.0.1" @@ -5751,10 +5043,10 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detab@2.0.4: version "2.0.4" @@ -5763,31 +5055,20 @@ detab@2.0.4: dependencies: repeat-string "^1.5.4" -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -detect-port-alt@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== +detect-package-manager@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-package-manager/-/detect-package-manager-2.0.1.tgz#6b182e3ae5e1826752bfef1de9a7b828cffa50d8" + integrity sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A== dependencies: - address "^1.0.1" - debug "^2.6.0" + execa "^5.1.1" detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" - integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== dependencies: address "^1.0.1" - debug "^2.6.0" - -devalue@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/devalue/-/devalue-2.0.1.tgz#5d368f9adc0928e47b77eea53ca60d2f346f9762" - integrity sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q== + debug "4" diff@^4.0.1: version "4.0.2" @@ -5817,14 +5098,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -5839,21 +5112,31 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-converter@^0.2: +dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: utila "~0.4" -dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom-serializer@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.0.1.tgz#79695eb49af3cd8abc8d93a73da382deb1ca0795" + integrity sha512-1Aj1Qy3YLbdslkI75QEOfdp9TkQ3o8LRISAzxOibjBs/xWwr1WxZFOQphFkZuepHFGo+kB8e5FVJSS0faAJ4Rw== dependencies: - "@babel/runtime" "^7.1.2" + domelementtype "^2.0.1" + domhandler "^3.0.0" + entities "^2.0.0" -dom-serializer@0, dom-serializer@^0.2.1: +dom-serializer@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== @@ -5861,6 +5144,15 @@ dom-serializer@0, dom-serializer@^0.2.1: domelementtype "^2.0.1" entities "^2.0.0" +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" @@ -5871,46 +5163,49 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domhandler@3.0.0, domhandler@^3.0.0: +domhandler@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== dependencies: domelementtype "^2.0.1" -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== +domhandler@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== dependencies: - domelementtype "1" + domelementtype "^2.0.1" -domutils@2.0.0, domutils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.0.0.tgz#15b8278e37bfa8468d157478c58c367718133c08" - integrity sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg== +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.1.0.tgz#7ade3201af43703fde154952e3a868eb4b635f16" + integrity sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg== dependencies: dom-serializer "^0.2.1" domelementtype "^2.0.1" domhandler "^3.0.0" -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== +domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: - dom-serializer "0" - domelementtype "1" + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" dot-case@^3.0.4: version "3.0.4" @@ -5920,62 +5215,21 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dot-prop@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" - integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== - dependencies: - is-obj "^2.0.0" - -dotenv-defaults@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.1.1.tgz#032c024f4b5906d9990eb06d722dc74cc60ec1bd" - integrity sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q== - dependencies: - dotenv "^6.2.0" - dotenv-expand@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== -dotenv-webpack@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz#7ca79cef2497dd4079d43e81e0796bc9d0f68a5e" - integrity sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg== - dependencies: - dotenv-defaults "^1.0.2" - -dotenv@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" - integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== - dotenv@^8.0.0: version "8.6.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== -downshift@^6.0.15: - version "6.1.3" - resolved "https://registry.yarnpkg.com/downshift/-/downshift-6.1.3.tgz#e794b7805d24810968f21e81ad6bdd9f3fdc40da" - integrity sha512-RA1MuaNcTbt0j+sVLhSs8R2oZbBXYAtdQP/V+uHhT3DoDteZzJPjlC+LQVm9T07Wpvo84QXaZtUCePLDTDwGXg== - dependencies: - "@babel/runtime" "^7.13.10" - compute-scroll-into-view "^1.0.17" - prop-types "^15.7.2" - react-is "^17.0.2" - drange@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/drange/-/drange-1.1.1.tgz#b2aecec2aab82fcef11dbbd7b9e32b83f8f6c0b8" integrity sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA== -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= - duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -5986,36 +5240,17 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.3.322: - version "1.3.322" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" - integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.723: - version "1.3.737" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.737.tgz#196f2e9656f4f3c31930750e1899c091b72d36b5" - integrity sha512-P/B84AgUSQXaum7a8m11HUsYL8tj9h/Pt5f7Hg7Ty6bm5DxlFq+e5+ouHUoNQMsKDJ7u4yGfI8mOErCmSH9wyg== - -element-resize-detector@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.2.tgz#bf7c3ff915957e4e62e86241ed2f9c86b078892b" - integrity sha512-+LOXRkCJc4I5WhEJxIDjhmE3raF8jtOMBDqSCgZTMz2TX3oXAX5pE2+MDeopJlGdXzP7KzPbBJaUGfNaP9HG4A== - dependencies: - batch-processor "1.0.0" +electron-to-chromium@^1.3.488, electron-to-chromium@^1.4.251: + version "1.4.284" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== -elliptic@^6.0.0: +elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -6028,16 +5263,6 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -"emoji-regex@>=6.0.0 <=6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" - integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -6046,21 +5271,12 @@ emoji-regex@^8.0.0: emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + integrity sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng== emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -emotion-theming@^10.0.27: - version "10.0.27" - resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.27.tgz#1887baaec15199862c89b1b984b79806f2b9ab10" - integrity sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/weak-memoize" "0.2.5" - hoist-non-react-statics "^3.3.0" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== emotion@^10.0.14: version "10.0.27" @@ -6073,7 +5289,7 @@ emotion@^10.0.14: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" @@ -6083,33 +5299,24 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: once "^1.4.0" endent@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/endent/-/endent-2.0.1.tgz#fb18383a3f37ae3213a5d9f6c4a880d1061eb4c5" - integrity sha512-mADztvcC+vCk4XEZaCz6xIPO2NHQuprv5CAEjuVAu6aZwqAj7nVNlMyl1goPFYqCCpS2OJV9jwpumJLkotZrNw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/endent/-/endent-2.1.0.tgz#5aaba698fb569e5e18e69e1ff7a28ff35373cd88" + integrity sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w== dependencies: dedent "^0.7.0" fast-json-parse "^1.0.3" - objectorarray "^1.0.4" + objectorarray "^1.0.5" enhanced-resolve@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" - integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4= + integrity sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw== dependencies: graceful-fs "^4.1.2" memory-fs "^0.2.0" tapable "^0.1.8" -enhanced-resolve@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enhanced-resolve@^4.5.0: +enhanced-resolve@^4.3.0, enhanced-resolve@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== @@ -6118,25 +5325,23 @@ enhanced-resolve@^4.5.0: memory-fs "^0.5.0" tapable "^1.0.0" -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +enhanced-resolve@^5.10.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" + integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== - -env-paths@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" - integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" @@ -6148,50 +5353,41 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" error-stack-parser@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== - dependencies: - stackframe "^1.1.1" - -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: - version "1.17.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" - integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" + stackframe "^1.3.4" -es-abstract@^1.17.0-next.0, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" - get-intrinsic "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -6212,6 +5408,18 @@ es-get-iterator@^1.0.2: is-string "^1.0.5" isarray "^2.0.5" +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== + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -6222,23 +5430,23 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" es5-shim@^4.5.13: - version "4.5.15" - resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.15.tgz#6a26869b261854a3b045273f5583c52d390217fe" - integrity sha512-FYpuxEjMeDvU4rulKqFdukQyZSTpzhg4ScQHrAosrlVpR6GFyaw14f74yn2+4BugniIS0Frpg7TvwZocU4ZMTw== + version "4.6.7" + resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.6.7.tgz#bc67ae0fc3dd520636e0a1601cc73b450ad3e955" + integrity sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ== -es6-iterator@2.0.3, es6-iterator@~2.0.3: +es6-iterator@2.0.3, es6-iterator@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: d "1" es5-ext "^0.10.35" @@ -6249,7 +5457,7 @@ es6-shim@^0.35.5: resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.6.tgz#d10578301a83af2de58b9eadb7c2c9945f7388a0" integrity sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA== -es6-symbol@^3.1.1, es6-symbol@~3.1.3: +es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== @@ -6257,7 +5465,7 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" -escalade@^3.0.2, escalade@^3.1.1: +escalade@^3.0.1, escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== @@ -6265,17 +5473,17 @@ escalade@^3.0.2, escalade@^3.1.1: escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: version "2.0.0" @@ -6289,87 +5497,96 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^6.10.1: - version "6.10.1" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.10.1.tgz#129ef9ec575d5ddc0e269667bf09defcd898642a" - integrity sha512-svTy6zh1ecQojvpbJSgH3aei/Rt7C6i090l5f2WQ4aB05lYHeZIR1qL4wZyyILTbtmnbHP5Yn8MrsOJMGa8RkQ== - dependencies: - get-stdin "^6.0.0" +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== -eslint-import-resolver-node@^0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== dependencies: - debug "^2.6.9" - resolve "^1.13.1" + debug "^3.2.7" + resolve "^1.20.0" -eslint-import-resolver-webpack@^0.12.1: - version "0.12.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.12.1.tgz#771ae561e887ca4e53ee87605fbb36c5e290b0f5" - integrity sha512-O/sUAXk6GWrICiN8JUkkjdt9uZpqZHP+FVnTxtEILL6EZMaPSrnP4lGPSFwcKsv7O211maqq4Nz60+dh236hVg== +eslint-import-resolver-webpack@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.2.tgz#fc813df0d08b9265cc7072d22393bda5198bdc1e" + integrity sha512-XodIPyg1OgE2h5BDErz3WJoK7lawxKTJNhgPNafRST6csC/MZC+L5P6kKqsZGRInpbgc02s/WZMrb4uGJzcuRg== dependencies: array-find "^1.0.0" - debug "^2.6.9" + debug "^3.2.7" enhanced-resolve "^0.9.1" find-root "^1.1.0" has "^1.0.3" - interpret "^1.2.0" - lodash "^4.17.15" - node-libs-browser "^1.0.0 || ^2.0.0" - resolve "^1.13.1" + interpret "^1.4.0" + is-core-module "^2.7.0" + is-regex "^1.1.4" + lodash "^4.17.21" + resolve "^1.20.0" semver "^5.7.1" -eslint-module-utils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" - integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== +eslint-module-utils@^2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" + debug "^3.2.7" -eslint-plugin-import@^2.22.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" - integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== +eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== dependencies: - array-includes "^3.1.1" - array.prototype.flat "^1.2.3" - contains-path "^0.1.0" + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.3" - eslint-module-utils "^2.6.0" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" - tsconfig-paths "^3.9.0" - -eslint-plugin-prettier@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba" - integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA== + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-react@^7.20.1: - version "7.20.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz#0590525e7eb83890ce71f73c2cf836284ad8c2f1" - integrity sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg== +eslint-plugin-react@^7.30.1: + version "7.31.10" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz#6782c2c7fe91c09e715d536067644bbb9491419a" + integrity sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA== dependencies: - array-includes "^3.1.1" - array.prototype.flatmap "^1.2.3" + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.4.1" - object.entries "^1.1.2" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.17.0" - string.prototype.matchall "^4.0.2" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" eslint-scope@^4.0.3: version "4.0.3" @@ -6379,111 +5596,113 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" + esrecurse "^4.3.0" + estraverse "^5.2.0" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: - eslint-visitor-keys "^1.1.0" + eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== - dependencies: - "@babel/code-frame" "^7.0.0" +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.20.0: + version "8.27.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.27.0.tgz#d547e2f7239994ad1faa4bb5d84e5d809db7cf64" + integrity sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^7.0.0" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe" - integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q== +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: - estraverse "^5.0.0" + estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" - integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== - -estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-to-babel@^3.1.0: version "3.2.1" @@ -6494,25 +5713,25 @@ estree-to-babel@^3.1.0: "@babel/types" "^7.2.0" c8 "^7.6.0" -esutils@^2.0.0, esutils@^2.0.2: +esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@1.8.1, etag@~1.8.1: +etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== +events@^3.0.0, events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -6540,10 +5759,25 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -6554,59 +5788,60 @@ expand-brackets@^2.1.4: to-regex "^3.0.1" express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: - accepts "~1.3.7" + accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" + body-parser "1.20.1" + content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.0" + cookie "0.5.0" cookie-signature "1.0.6" debug "2.6.9" - depd "~1.1.2" + depd "2.0.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "~1.1.2" + finalhandler "1.2.0" fresh "0.5.2" + http-errors "2.0.0" merge-descriptors "1.0.1" methods "~1.1.2" - on-finished "~2.3.0" + on-finished "2.4.1" parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" + proxy-addr "~2.0.7" + qs "6.11.0" range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== dependencies: - type "^2.0.0" + type "^2.7.2" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -6616,15 +5851,6 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -6666,17 +5892,16 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" + micromatch "^4.0.4" fast-json-parse@^1.0.3: version "1.0.3" @@ -6688,24 +5913,24 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fastparse@^1.1.1: +fastparse@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" -fault@^1.0.0, fault@^1.0.2: +fault@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== @@ -6713,38 +5938,36 @@ fault@^1.0.0, fault@^1.0.2: format "^0.2.0" fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" +fetch-retry@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.3.tgz#edfa3641892995f9afee94f25b168827aa97fe3d" + integrity sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw== + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - flat-cache "^2.0.1" + flat-cache "^3.0.4" -file-loader@4.2.0, file-loader@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.2.0.tgz#5fb124d2369d7075d70a9a5abecd12e60a95215e" - integrity sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ== +file-loader@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" + integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== dependencies: loader-utils "^1.2.3" - schema-utils "^2.0.0" + schema-utils "^2.5.0" file-loader@^6.2.0: version "6.2.0" @@ -6759,24 +5982,30 @@ file-saver@^2.0.5: resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== +file-selector@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.6.0.tgz#fa0a8d9007b829504db4d07dd4de0310b65287dc" + integrity sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw== + dependencies: + tslib "^2.4.0" + file-system-cache@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f" - integrity sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08= + version "1.1.0" + resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.1.0.tgz#984de17b976b75a77a27e08d6828137c1aa80fa1" + integrity sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw== dependencies: - bluebird "^3.3.5" - fs-extra "^0.30.0" - ramda "^0.21.0" + fs-extra "^10.1.0" + ramda "^0.28.0" -filesize@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" - integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -6790,32 +6019,27 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" encodeurl "~1.0.2" escape-html "~1.0.3" - on-finished "~2.3.0" + on-finished "2.4.1" parseurl "~1.3.3" - statuses "~1.5.0" + statuses "2.0.1" unpipe "~1.0.0" -finally-polyfill@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/finally-polyfill/-/finally-polyfill-0.1.0.tgz#2a17b16581d9477db16a703c7b79a898ac0b7d50" - integrity sha512-J1LEcZ5VXe1l3sEO+S//WqL5wcJ/ep7QeKJA6HhNZrcEEFj0eyC8IW3DEZhxySI2bx3r85dwAXz+vYPGuHx5UA== - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= +find-cache-dir@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== dependencies: commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" + make-dir "^3.0.2" + pkg-dir "^4.1.0" find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" @@ -6826,10 +6050,10 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" make-dir "^3.0.2" @@ -6840,27 +6064,20 @@ find-root@^1.1.0: resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@2.1.0, find-up@^2.0.0, find-up@^2.1.0: +find-up@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" -find-up@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.0.0.tgz#c367f8024de92efb75f2d4906536d24682065c3a" - integrity sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q== - dependencies: - locate-path "^5.0.0" - -find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" + path-exists "^2.0.0" + pinkie-promise "^2.0.0" find-up@^3.0.0: version "3.0.0" @@ -6869,6 +6086,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -6877,24 +6102,18 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + flatted "^3.1.0" + rimraf "^3.0.2" -flatten@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" - integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== flush-write-stream@^1.0.0: version "1.1.1" @@ -6904,20 +6123,15 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0: - version "1.14.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" - integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== - -follow-redirects@^1.14.8: - version "1.14.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" - integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== +follow-redirects@^1.14.9: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== foreground-child@^2.0.0: version "2.0.0" @@ -6927,21 +6141,7 @@ foreground-child@^2.0.0: cross-spawn "^7.0.0" signal-exit "^3.0.2" -fork-ts-checker-webpack-plugin@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz#a1642c0d3e65f50c2cc1742e9c0a80f441f86b19" - integrity sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ== - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^3.3.0" - micromatch "^3.1.10" - minimatch "^3.0.4" - semver "^5.6.0" - tapable "^1.0.0" - worker-rpc "^0.1.0" - -fork-ts-checker-webpack-plugin@4.1.6, fork-ts-checker-webpack-plugin@^4.1.6: +fork-ts-checker-webpack-plugin@^4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== @@ -6955,9 +6155,9 @@ fork-ts-checker-webpack-plugin@4.1.6, fork-ts-checker-webpack-plugin@^4.1.6: worker-rpc "^0.1.0" fork-ts-checker-webpack-plugin@^6.0.4: - version "6.2.10" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.10.tgz#800ab1fa523c76011a3413bc4e7815e45b63e826" - integrity sha512-HveFCHWSH2WlYU1tU3PkrupvW8lNFMTfH3Jk0TfC2mtktE9ibHGcifhCsCFvj+kqlDfNIlwmNLiNqR9jnSA7OQ== + version "6.5.2" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" + integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== dependencies: "@babel/code-frame" "^7.8.3" "@types/json-schema" "^7.0.5" @@ -6982,46 +6182,53 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + format@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" - integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" fs-extra@^9.0.0, fs-extra@^9.0.1: version "9.1.0" @@ -7033,13 +6240,6 @@ fs-extra@^9.0.0, fs-extra@^9.0.1: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -7047,7 +6247,7 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" -fs-monkey@1.0.3: +fs-monkey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== @@ -7055,7 +6255,7 @@ fs-monkey@1.0.3: fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -7065,69 +6265,55 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: + bindings "^1.5.0" nan "^2.12.1" - node-pre-gyp "^0.12.0" -fsevents@^2.1.2, fsevents@~2.3.1: +fsevents@^2.1.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fsevents@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.4.tgz#e4ea839b9d3672ae99d0efd9f38d9191c5eaac83" - integrity sha512-iqy1pIotY/RmhdFZygSSlW0wko2yxkSCKqsuv4pr8QESohpYyG/Z7B/XXvPRKTJS//960rgguE5mSRUsDdaJrQ== +function.prototype.name@^1.1.0, function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + es-abstract "^1.19.0" functions-have-names "^1.2.2" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - functions-have-names@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.2.tgz#98d93991c39da9361f8e50b337c4f6e41f120e21" - integrity sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA== - -fuse.js@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" - integrity sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw== + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== dependencies: - aproba "^1.0.3" + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -7139,24 +6325,24 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" + has-symbols "^1.0.3" get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== get-stream@^4.0.0: version "4.1.0" @@ -7165,61 +6351,50 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== github-slugger@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" - integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== - dependencies: - emoji-regex ">=6.0.0 <=6.1.1" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" + version "1.5.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob-parent@^5.1.0: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob-parent@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: - is-glob "^4.0.1" + is-glob "^4.0.3" glob-promise@^3.4.0: version "3.4.0" @@ -7231,52 +6406,24 @@ glob-promise@^3.4.0: glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + integrity sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig== glob-to-regexp@^0.4.1: version "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.3, glob@^7.1.4: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.6: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" global@^4.4.0: version "4.4.0" @@ -7291,43 +6438,32 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== dependencies: - type-fest "^0.8.1" + type-fest "^0.20.2" globalthis@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b" - integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" -globby@11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== +globby@^11.0.2: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - globby@^9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" @@ -7342,52 +6478,44 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= - dependencies: - delegate "^3.1.2" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - -graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -gzip-size@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== +handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: - duplexer "^0.1.1" - pify "^4.0.1" + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" @@ -7397,29 +6525,38 @@ has-flag@^4.0.0: has-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-glob/-/has-glob-1.0.0.tgz#9aaa9eedbffb1ba3990a7b0010fb678ee0081207" - integrity sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc= + integrity sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g== dependencies: is-glob "^3.0.0" -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" -has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" -has-unicode@^2.0.0: +has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -7428,7 +6565,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -7437,12 +6574,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -7455,12 +6592,13 @@ has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -7496,9 +6634,9 @@ hast-util-from-parse5@^6.0.0: web-namespaces "^1.0.0" hast-util-parse-selector@^2.0.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz#60c99d0b519e12ab4ed32e58f150ec3f61ed1974" - integrity sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA== + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== hast-util-raw@6.0.1: version "6.0.1" @@ -7527,16 +6665,6 @@ hast-util-to-parse5@^6.0.0: xtend "^4.0.0" zwitch "^1.0.0" -hastscript@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" - integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== - dependencies: - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" - hastscript@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" @@ -7548,31 +6676,26 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" -he@^1.2.0: +he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -highlight.js@^10.1.1, highlight.js@~10.7.0: - version "10.7.2" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.2.tgz#89319b861edc66c48854ed1e6da21ea89f847360" - integrity sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg== - -highlight.js@~9.15.0, highlight.js@~9.15.1: - version "9.15.10" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.10.tgz#7b18ed75c90348c045eef9ed08ca1319a2219ad2" - integrity sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw== +highlight.js@^10.4.1, highlight.js@~10.7.0: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.3.0: +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -7584,15 +6707,10 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -html-entities@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= - -html-entities@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== +html-entities@^2.1.0: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== html-escaper@^2.0.0: version "2.0.2" @@ -7613,9 +6731,9 @@ html-minifier-terser@^5.0.1: terser "^4.6.3" html-tags@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" - integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" + integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== html-void-elements@^1.0.0: version "1.0.5" @@ -7647,55 +6765,46 @@ htmlparser2@4.1.0: domutils "^2.0.0" entities "^2.0.0" -htmlparser2@^3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: - depd "~1.1.2" + depd "2.0.0" inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-proxy@1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" - integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +https-proxy-agent@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -7705,12 +6814,12 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + integrity sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg== icss-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= + integrity sha512-bsVoyn/1V4R1kYYjLcWLedozAM4FClZUdjE9nIr8uWY7xs78y9DATgwz2wGU7M+7z55KenmmTkN2DVJ7bqzjAA== dependencies: postcss "^6.0.1" @@ -7722,71 +6831,51 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: postcss "^7.0.14" ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== ignore-loader@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/ignore-loader/-/ignore-loader-0.1.2.tgz#d81f240376d0ba4f0d778972c3ad25874117a463" - integrity sha1-2B8kA3bQuk8Nd4lyw60lh0EXpGM= - -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" + integrity sha512-yOJQEKrNwoYqrWLS4DcnzM7SEQhRKis5mB+LdKKh4cPmGYlLPR0ozRzHV5jmEk2IxptqJNQA5Cc0gw8Fj12bXA== -ignore@^4.0.3, ignore@^4.0.6: +ignore@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - -immer@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" - integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + integrity sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg== dependencies: import-from "^2.1.0" import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== dependencies: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -7797,25 +6886,27 @@ import-fresh@^3.2.1: import-from@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + integrity sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w== dependencies: resolve-from "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg== + dependencies: + repeating "^2.0.0" indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" @@ -7824,12 +6915,12 @@ infer-owner@^1.0.3, infer-owner@^1.0.4: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -7837,51 +6928,18 @@ inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, i inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA== inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.5, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -inquirer@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" - integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.15" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.5.3" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -internal-slot@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" - integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== - dependencies: - es-abstract "^1.17.0-next.1" - has "^1.0.3" - side-channel "^1.0.2" - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -7891,27 +6949,27 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -interpret@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== interpret@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: +invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" -ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== ipaddr.js@1.9.1: version "1.9.1" @@ -7926,7 +6984,7 @@ is-absolute-url@^3.0.0: is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== dependencies: kind-of "^3.0.2" @@ -7951,26 +7009,29 @@ is-alphanumerical@^1.0.0: is-decimal "^1.0.0" is-arguments@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== dependencies: binary-extensions "^1.0.0" @@ -7982,11 +7043,12 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-buffer@^1.1.5: version "1.1.6" @@ -7998,15 +7060,10 @@ is-buffer@^2.0.0: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.4, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== - -is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-ci@^2.0.0: version "2.0.0" @@ -8015,17 +7072,17 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== +is-core-module@^2.7.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== dependencies: kind-of "^3.0.2" @@ -8037,9 +7094,11 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" is-decimal@^1.0.0: version "1.0.4" @@ -8067,14 +7126,9 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== -is-docker@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" - integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== - -is-docker@^2.0.0: +is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== @@ -8090,7 +7144,7 @@ is-dom@^1.0.0: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" @@ -8099,27 +7153,15 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -8131,24 +7173,17 @@ is-function@^1.0.2: resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== -is-glob@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - is-glob@^3.0.0, is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -8162,20 +7197,22 @@ is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" @@ -8184,49 +7221,25 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - is-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" - integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== +is-plain-object@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" @@ -8235,54 +7248,44 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== - dependencies: - has "^1.0.3" - -is-regex@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== +is-regex@^1.1.2, is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" - has-symbols "^1.0.2" - -is-root@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + has-tostringtag "^1.0.0" is-set@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: - has-symbols "^1.0.1" + has-tostringtag "^1.0.0" -is-symbol@^1.0.3: +is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== @@ -8292,7 +7295,19 @@ is-symbol@^1.0.3: is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" is-whitespace-character@^1.0.0: version "1.0.4" @@ -8302,7 +7317,7 @@ is-whitespace-character@^1.0.0: is-window@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" - integrity sha1-LIlspT25feRdPDMTOmXYyfVjSA0= + integrity sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg== is-windows@^1.0.2: version "1.0.2" @@ -8314,17 +7329,12 @@ is-word-character@^1.0.0: resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== -is-wsl@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" - integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== - is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== -is-wsl@^2.1.1: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -8334,7 +7344,7 @@ is-wsl@^2.1.1: isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isarray@^2.0.5: version "2.0.5" @@ -8344,38 +7354,47 @@ isarray@^2.0.5: isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== isobject@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== +isomorphic-unfetch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" + integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== + dependencies: + node-fetch "^2.6.1" + unfetch "^4.2.0" -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: - "@babel/core" "^7.7.5" + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" + istanbul-lib-coverage "^3.2.0" semver "^6.3.0" istanbul-lib-report@^3.0.0: @@ -8387,18 +7406,18 @@ istanbul-lib-report@^3.0.0: make-dir "^3.0.0" supports-color "^7.1.0" -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== +istanbul-reports@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" iterate-iterator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" - integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== + version "1.0.2" + resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.2.tgz#551b804c9eaa15b847ea6a7cdc2f5bf1ec150f91" + integrity sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw== iterate-value@^1.0.2: version "1.0.2" @@ -8462,7 +7481,7 @@ jest-worker@24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest-worker@^26.2.1, jest-worker@^26.6.2: +jest-worker@^26.5.0, jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== @@ -8471,15 +7490,24 @@ jest-worker@^26.2.1, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +js-sdsl@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a" + integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== js-string-escape@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= + integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -8489,16 +7517,23 @@ js-string-escape@^1.0.1: js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -8507,34 +7542,27 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-parse-better-errors@^1.0.1, 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" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-typed@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" - integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json5@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== - dependencies: - minimist "^1.2.0" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.1: version "1.0.1" @@ -8543,26 +7571,10 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.0, json5@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" - integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== - dependencies: - minimist "^1.2.5" - -json5@^2.1.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" +json5@^2.1.0, json5@^2.1.2, json5@^2.1.3, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== jsonfile@^6.0.1: version "6.1.0" @@ -8573,78 +7585,45 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonwebtoken@8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^5.6.0" - -jsx-ast-utils@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" - integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== dependencies: - array-includes "^3.1.1" - object.assign "^4.1.0" + array-includes "^3.1.5" + object.assign "^4.1.3" -jszip@^3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.9.1.tgz#784e87f328450d1e8151003a9c67733e2b901051" - integrity sha512-H9A60xPqJ1CuC4Ka6qxzXZeU8aNmgOeP5IFqwJbQQwtu2EUYxota3LdsiZWplF7Wgd9tkAd0mdu36nceSaPuYw== +jszip@^3.10.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== dependencies: lie "~3.3.0" pako "~1.0.2" readable-stream "~2.3.6" - set-immediate-shim "~1.0.1" + setimmediate "^1.0.5" junk@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -jwt-decode@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-2.2.0.tgz#7d86bd56679f58ce6a84704a657dd392bba81a79" - integrity sha1-fYa9VmefWM5qhHBKZX3TkruoGnk= +jwt-decode@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" + integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" @@ -8653,35 +7632,20 @@ kind-of@^5.0.0: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= - optionalDependencies: - graceful-fs "^4.1.9" - +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -klona@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" - integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== - -launch-editor@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca" - integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw== - dependencies: - chalk "^2.3.0" - shell-quote "^1.6.1" +klona@^2.0.3, klona@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== lazy-universal-dotenv@^3.0.1: version "3.0.1" @@ -8694,10 +7658,30 @@ lazy-universal-dotenv@^3.0.1: dotenv "^8.0.0" dotenv-expand "^5.1.0" -levn@^0.3.0, levn@~0.3.0: +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" @@ -8710,26 +7694,32 @@ lie@~3.3.0: immediate "~3.0.5" lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" pify "^2.0.0" - strip-bom "^3.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" -loader-runner@^2.3.1, loader-runner@^2.4.0: +loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -8738,7 +7728,7 @@ loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2. emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@2.0.0, loader-utils@^2.0.0: +loader-utils@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== @@ -8747,19 +7737,28 @@ loader-utils@2.0.0, loader-utils@^2.0.0: emojis-list "^3.0.0" json5 "^2.1.2" -loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.4.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" + integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" json5 "^1.0.1" +loader-utils@^2.0.0, loader-utils@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -8786,93 +7785,36 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - -lodash.curry@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" - integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== lodash.uniq@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -8880,6 +7822,14 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ== + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -8887,15 +7837,7 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowlight@1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.12.1.tgz#014acf8dd73a370e02ff1cc61debcde3bb1681eb" - integrity sha512-OqaVxMGIESnawn+TU/QMV5BJLbUghUfjDWPAtFqDYDmDtr4FnB+op8xM+pR7nKlauHNUHXGt0VgWatFB8voS5w== - dependencies: - fault "^1.0.2" - highlight.js "~9.15.0" - -lowlight@^1.14.0: +lowlight@^1.17.0: version "1.20.0" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.20.0.tgz#ddb197d33462ad0d93bf19d17b6c301aa3941888" integrity sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw== @@ -8903,26 +7845,19 @@ lowlight@^1.14.0: fault "^1.0.0" highlight.js "~10.7.0" -lru-cache@5.1.1, lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: +lru-cache@6.0.0, lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: - pify "^3.0.0" + yallist "^3.0.2" make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" @@ -8932,53 +7867,39 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" - integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== - dependencies: - semver "^6.0.0" - -make-dir@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" - integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== - dependencies: - semver "^6.0.0" - -make-dir@^3.1.0: +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - tmpl "1.0.x" - -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + tmpl "1.0.5" map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-or-similar@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" - integrity sha1-beJlMXSt+12e3DPGnT6Sobdvrwg= + integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg== map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" @@ -8987,19 +7908,6 @@ markdown-escapes@^1.0.0: resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== -markdown-to-jsx@^6.11.4: - version "6.11.4" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz#b4528b1ab668aef7fe61c1535c27e837819392c5" - integrity sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw== - dependencies: - prop-types "^15.6.2" - unquote "^1.1.0" - -markdown-to-jsx@^7.1.0: - version "7.1.3" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.1.3.tgz#f00bae66c0abe7dd2d274123f84cb6bd2a2c7c6a" - integrity sha512-jtQ6VyT7rMT5tPV0g2EJakEnXLiPksnvlYtwQsVVZ611JsWGN8bQ1tVSDX4s6JllfEH6wmsYxNjTUAMrPmNA8w== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -9045,41 +7953,41 @@ mdast-util-to-string@^1.0.0: mdurl@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.1.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.2.2.tgz#5de461389d596e3f23d48bb7c2afb6161f4df40e" - integrity sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q== + version "3.4.11" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.11.tgz#3a34837ade675825d805a2c135e88cefe5e53aaf" + integrity sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w== dependencies: - fs-monkey "1.0.3" + fs-monkey "^1.0.3" memoize-one@^5.0.4: - version "5.1.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" - integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== memoizerific@^1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" - integrity sha1-fIekZGREwy11Q4VwkF8tvRsagFo= + integrity sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog== dependencies: map-or-similar "^1.5.0" memory-fs@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" - integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA= + integrity sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng== memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -9092,17 +8000,33 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" +meow@^3.1.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA== + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -9110,7 +8034,7 @@ merge2@^1.2.3, merge2@^1.3.0: methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== microevent.ts@~0.1.1: version "0.1.1" @@ -9136,13 +8060,13 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - braces "^3.0.1" - picomatch "^2.2.3" + braces "^3.0.2" + picomatch "^2.3.1" miller-rabin@^4.0.0: version "4.0.1" @@ -9152,44 +8076,27 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.42.0, "mime-db@>= 1.40.0 < 2": - version "1.42.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" - integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== - -mime-db@1.47.0: - version "1.47.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== - -mime-types@^2.1.12, mime-types@^2.1.27: - version "2.1.30" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== - dependencies: - mime-db "1.47.0" +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@~2.1.24: - version "2.1.25" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" - integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.42.0" + mime-db "1.52.0" mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.2, mime@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mime@^2.4.4: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== mimic-fn@^2.1.0: version "2.1.0" @@ -9199,7 +8106,7 @@ mimic-fn@^2.1.0: min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== dependencies: dom-walk "^0.1.0" @@ -9217,16 +8124,6 @@ mini-css-extract-plugin@0.4.3: schema-utils "^1.0.0" webpack-sources "^1.1.0" -mini-css-extract-plugin@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" - integrity sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw== - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -9235,19 +8132,19 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -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== +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== minipass-collect@^1.0.2: version "1.0.2" @@ -9270,28 +8167,13 @@ minipass-pipeline@^1.2.2: dependencies: minipass "^3.0.0" -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + version "3.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== dependencies: yallist "^4.0.0" -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -9324,13 +8206,20 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +mkdirp@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" + integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== dependencies: minimist "^1.2.5" +mkdirp@^0.5.1, mkdirp@^0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -9339,7 +8228,7 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -9351,27 +8240,32 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@2.1.2, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + version "2.17.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== + +nanoid@^3.3.1: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== nanomatch@^1.2.9: version "1.2.13" @@ -9390,141 +8284,107 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -native-url@0.2.6, native-url@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" - integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== +native-url@0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.3.4.tgz#29c943172aed86c63cee62c8c04db7f5756661f8" + integrity sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA== dependencies: querystring "^0.2.0" natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + nested-error-stacks@^2.0.0, nested-error-stacks@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" - integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== + version "2.1.1" + resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5" + integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - -next@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/next/-/next-9.3.2.tgz#fabf907f5397ae3581d4227789f625533fb4e64e" - integrity sha512-KVNnnFyvtO1DwSEyMgt3wtxpkprnGCldEOyMXbt9Zxf8RcCw3YnRImbg8mVgrcXJRzkQpve4bdJKYY5MVwT/RA== - dependencies: - "@ampproject/toolbox-optimizer" "2.0.1" - "@babel/core" "7.7.2" - "@babel/plugin-proposal-class-properties" "7.7.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "7.7.4" - "@babel/plugin-proposal-numeric-separator" "7.8.3" - "@babel/plugin-proposal-object-rest-spread" "7.6.2" - "@babel/plugin-proposal-optional-chaining" "7.7.4" +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +next@^9.5.5: + version "9.5.5" + resolved "https://registry.yarnpkg.com/next/-/next-9.5.5.tgz#37a37095e7c877ed6c94ba82e34ab9ed02b4eb33" + integrity sha512-KF4MIdTYeI6YIGODNw27w9HGzCll4CXbUpkP6MNvyoHlpsunx8ybkQHm/hYa7lWMozmsn58LwaXJOhe4bSrI0g== + dependencies: + "@ampproject/toolbox-optimizer" "2.6.0" + "@babel/code-frame" "7.10.4" + "@babel/core" "7.7.7" + "@babel/plugin-proposal-class-properties" "7.10.4" + "@babel/plugin-proposal-export-namespace-from" "7.10.4" + "@babel/plugin-proposal-numeric-separator" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.11.0" "@babel/plugin-syntax-bigint" "7.8.3" - "@babel/plugin-syntax-dynamic-import" "7.2.0" - "@babel/plugin-transform-modules-commonjs" "7.7.0" - "@babel/plugin-transform-runtime" "7.6.2" - "@babel/preset-env" "7.7.1" - "@babel/preset-modules" "0.1.1" - "@babel/preset-react" "7.7.0" - "@babel/preset-typescript" "7.7.2" - "@babel/runtime" "7.7.2" - "@babel/types" "7.7.4" - "@next/polyfill-nomodule" "9.3.2" - amphtml-validator "1.0.30" - async-retry "1.2.3" - async-sema "3.0.0" - autodll-webpack-plugin "0.4.2" - babel-core "7.0.0-bridge.0" - babel-loader "8.0.6" - babel-plugin-syntax-jsx "6.18.0" + "@babel/plugin-syntax-dynamic-import" "7.8.3" + "@babel/plugin-syntax-jsx" "7.10.4" + "@babel/plugin-transform-modules-commonjs" "7.10.4" + "@babel/plugin-transform-runtime" "7.11.5" + "@babel/preset-env" "7.11.5" + "@babel/preset-modules" "0.1.4" + "@babel/preset-react" "7.10.4" + "@babel/preset-typescript" "7.10.4" + "@babel/runtime" "7.11.2" + "@babel/types" "7.11.5" + "@hapi/accept" "5.0.1" + "@next/env" "9.5.5" + "@next/polyfill-module" "9.5.5" + "@next/react-dev-overlay" "9.5.5" + "@next/react-refresh-utils" "9.5.5" + ast-types "0.13.2" babel-plugin-transform-define "2.0.0" babel-plugin-transform-react-remove-prop-types "0.4.24" - browserslist "4.8.3" - cache-loader "4.1.0" - chalk "2.4.2" - ci-info "2.0.0" - compression "1.7.4" - conf "5.0.0" - content-type "1.0.4" - cookie "0.4.0" - css-loader "3.3.0" - cssnano-simple "1.0.0" - devalue "2.0.1" - escape-string-regexp "2.0.0" - etag "1.8.1" - file-loader "4.2.0" - finally-polyfill "0.1.0" - find-up "4.0.0" - fork-ts-checker-webpack-plugin "3.1.1" - fresh "0.5.2" - gzip-size "5.1.1" - http-proxy "1.18.0" - ignore-loader "0.1.2" - is-docker "2.0.0" - is-wsl "2.1.1" + browserslist "4.13.0" + buffer "5.6.0" + cacache "15.0.5" + caniuse-lite "^1.0.30001113" + chokidar "2.1.8" + crypto-browserify "3.12.0" + css-loader "4.3.0" + cssnano-simple "1.2.0" + find-cache-dir "3.3.1" jest-worker "24.9.0" - json5 "2.1.1" - jsonwebtoken "8.5.1" - launch-editor "2.2.1" loader-utils "2.0.0" - lodash.curry "4.1.1" - lru-cache "5.1.1" - mini-css-extract-plugin "0.8.0" - native-url "0.2.6" - node-fetch "2.6.0" - ora "3.4.0" - path-to-regexp "6.1.0" - pnp-webpack-plugin "1.5.0" - postcss-flexbugs-fixes "4.2.0" - postcss-loader "3.0.0" - postcss-preset-env "6.7.0" + mkdirp "0.5.3" + native-url "0.3.4" + neo-async "2.6.1" + node-html-parser "^1.2.19" + path-browserify "1.0.1" + pnp-webpack-plugin "1.6.4" + postcss "7.0.32" + process "0.11.10" prop-types "15.7.2" - prop-types-exact "1.2.0" - raw-body "2.4.0" - react-error-overlay "5.1.6" - react-is "16.8.6" - recast "0.18.5" + react-is "16.13.1" + react-refresh "0.8.3" resolve-url-loader "3.1.1" - sass-loader "8.0.2" - send "0.17.1" - source-map "0.6.1" - string-hash "1.1.3" - strip-ansi "5.2.0" - style-loader "1.0.0" - styled-jsx "3.2.5" - terser "4.4.2" - thread-loader "2.1.3" - unfetch "4.1.0" - url "0.11.0" - use-subscription "1.1.1" + sass-loader "10.0.2" + schema-utils "2.7.1" + stream-browserify "3.0.0" + style-loader "1.2.1" + styled-jsx "3.3.0" + use-subscription "1.4.1" + vm-browserify "1.1.2" watchpack "2.0.0-beta.13" - webpack "4.42.0" - webpack-dev-middleware "3.7.0" - webpack-hot-middleware "2.25.0" + web-vitals "0.2.4" + webpack "4.44.1" webpack-sources "1.4.3" nice-try@^1.0.4: @@ -9543,7 +8403,7 @@ no-case@^3.0.4: node-dir@^0.1.10: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" - integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= + integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== dependencies: minimatch "^3.0.2" @@ -9552,17 +8412,26 @@ node-fetch@2.6.0: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== -node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-html-parser@^1.2.19: + version "1.4.9" + resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c" + integrity sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw== + dependencies: + he "1.2.0" node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -"node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.2.1: +node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== @@ -9591,51 +8460,22 @@ node-int64@^0.4.0: util "^0.11.0" vm-browserify "^1.0.1" -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= +node-releases@^1.1.58: + version "1.1.77" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.1.44: - version "1.1.53" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" - integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== - -node-releases@^1.1.61, node-releases@^1.1.71: - version "1.1.72" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" - integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== normalize-html-whitespace@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz#5e3c8e192f1b06c3b9eee4b7e7f28854c7601e34" integrity sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA== -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -9648,7 +8488,7 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== dependencies: remove-trailing-separator "^1.0.1" @@ -9660,97 +8500,64 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.7" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" - integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: path-key "^2.0.0" -npmlog@^4.0.2, npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== +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" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" + path-key "^3.0.0" -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: - boolbase "~1.0.0" + boolbase "^1.0.0" num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== - -object-inspect@^1.9.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" - integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -9758,119 +8565,86 @@ object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: object-path@0.11.4: version "0.11.4" resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" - integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk= + integrity sha512-ICbQN+aw/eAASDtaC7+SJXSAruz7fvvNjxMFfS3mTdvZaaiuuw81XXYu+9CSJeUVrS3YpRhTr862YGywMQUOWg== object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +object.assign@^4.1.0, object.assign@^4.1.3, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" - integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" - -object.entries@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" - integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - has "^1.0.3" - -"object.fromentries@^2.0.0 || ^1.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== +object.entries@^1.1.0, object.entries@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.fromentries@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" - integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== +"object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + version "2.1.5" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" + integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== dependencies: + array.prototype.reduce "^1.0.5" call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.hasown@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.20.4" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" -object.values@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" - integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== +object.values@^1.1.0, object.values@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" - -object.values@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" -objectorarray@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.4.tgz#d69b2f0ff7dc2701903d308bb85882f4ddb49483" - integrity sha512-91k8bjcldstRz1bG6zJo8lWD7c6QXcB4nTDUqiEvIL1xAsLoZlOOZZG+nd6YPz+V7zY1580J4Xxh1vZtyv4i/w== +objectorarray@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.5.tgz#2c05248bbefabd8f43ad13b41085951aac5e68a5" + integrity sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg== -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" @@ -9882,25 +8656,18 @@ on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -open@^7.0.2, open@^7.0.3: +open@^7.0.3: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== @@ -9908,7 +8675,16 @@ open@^7.0.2, open@^7.0.3: is-docker "^2.0.0" is-wsl "^2.1.1" -optionator@^0.8.1, optionator@^0.8.3: +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -9920,45 +8696,27 @@ optionator@^0.8.1, optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -ora@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -overlayscrollbars@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz#0b840a88737f43a946b9d87875a2f9e421d0338a" - integrity sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ== + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== p-all@^2.1.0: version "2.1.0" @@ -9984,7 +8742,7 @@ p-filter@^2.1.0: p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-limit@^1.1.0: version "1.3.0" @@ -9994,9 +8752,9 @@ p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" @@ -10010,7 +8768,7 @@ p-limit@^3.0.2: p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" @@ -10035,11 +8793,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -10069,23 +8822,18 @@ p-timeout@^3.1.0: p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@~1.0.2: +pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== - parallel-transform@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" @@ -10110,30 +8858,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: - asn1.js "^4.0.0" + asn1.js "^5.2.0" browserify-aes "^1.0.0" - create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-entities@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -10149,26 +8884,26 @@ parse-entities@^2.0.0: parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== dependencies: error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" parse-json@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" - integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" + json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" parse5@^6.0.0: @@ -10192,22 +8927,34 @@ pascal-case@^3.1.2: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== path-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== +path-browserify@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== + dependencies: + pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -10217,24 +8964,19 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -10242,19 +8984,16 @@ path-parse@^1.0.6: path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-to-regexp@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.1.0.tgz#0b18f88b7a0ce0bfae6a25990c909ab86f512427" - integrity sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw== + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== dependencies: + graceful-fs "^4.1.2" pify "^2.0.0" + pinkie-promise "^2.0.0" path-type@^3.0.0: version "3.0.0" @@ -10269,9 +9008,9 @@ path-type@^4.0.0: integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -10279,25 +9018,30 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -picomatch@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" - integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== -picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.0, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pify@^4.0.1: version "4.0.1" @@ -10307,28 +9051,19 @@ pify@^4.0.1: pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^4.0.0, pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" +pirates@^4.0.1, pirates@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^3.0.0: version "3.0.0" @@ -10351,19 +9086,10 @@ pkg-dir@^5.0.0: dependencies: find-up "^5.0.0" -pkg-up@3.1.0, pkg-up@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -pnp-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" - integrity sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg== - dependencies: - ts-pnp "^1.1.2" +platform@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.3.tgz#646c77011899870b6a0903e75e997e8e51da7461" + integrity sha512-VJK1SRmXBpjwsB4YOHYSturx48rLKMzHgCqDH2ZDa6ZbMS/N5huoNqyQdK5Fj/xayu3fqbXckn5SeCS1EbMDZg== pnp-webpack-plugin@1.6.4: version "1.6.4" @@ -10372,121 +9098,17 @@ pnp-webpack-plugin@1.6.4: dependencies: ts-pnp "^1.1.6" -polished@^4.0.5: - version "4.1.2" - resolved "https://registry.yarnpkg.com/polished/-/polished-4.1.2.tgz#c04fcc203e287e2d866e9cfcaf102dae1c01a816" - integrity sha512-jq4t3PJUpVRcveC53nnbEX35VyQI05x3tniwp26WFdm1dwaNUBHAi5awa/roBlwQxx1uRhwNSYeAi/aMbfiJCQ== +polished@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/polished/-/polished-4.2.2.tgz#2529bb7c3198945373c52e34618c8fe7b1aa84d1" + integrity sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ== dependencies: - "@babel/runtime" "^7.13.17" + "@babel/runtime" "^7.17.8" posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-attribute-case-insensitive@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz#b2a721a0d279c2f9103a36331c88981526428cc7" - integrity sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0" - -postcss-color-functional-notation@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" - integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-gray@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" - integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-color-hex-alpha@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" - integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== - dependencies: - postcss "^7.0.14" - postcss-values-parser "^2.0.1" - -postcss-color-mod-function@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" - integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-rebeccapurple@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" - integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-custom-media@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" - integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== - dependencies: - postcss "^7.0.14" - -postcss-custom-properties@^8.0.11: - version "8.0.11" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" - integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== - dependencies: - postcss "^7.0.17" - postcss-values-parser "^2.0.1" - -postcss-custom-selectors@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" - integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-dir-pseudo-class@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" - integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-double-position-gradients@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" - integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== - dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-env-function@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" - integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-flexbugs-fixes@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.0.tgz#662b3dcb6354638b9213a55eed8913bcdc8d004a" - integrity sha512-QRE0n3hpkxxS/OGvzOa+PDuy4mh/Jg4o9ui22/ko5iGYOG3M5dfJabjnAZjTdh2G9F85c7Hv8hWcEDEKW/xceQ== - dependencies: - postcss "^7.0.26" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== postcss-flexbugs-fixes@^4.2.1: version "4.2.1" @@ -10495,63 +9117,10 @@ postcss-flexbugs-fixes@^4.2.1: dependencies: postcss "^7.0.26" -postcss-focus-visible@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" - integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== - dependencies: - postcss "^7.0.2" - -postcss-focus-within@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" - integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== - dependencies: - postcss "^7.0.2" - -postcss-font-variant@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz#71dd3c6c10a0d846c5eda07803439617bbbabacc" - integrity sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg== - dependencies: - postcss "^7.0.2" - -postcss-gap-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" - integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== - dependencies: - postcss "^7.0.2" - -postcss-image-set-function@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" - integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-initial@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d" - integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== - dependencies: - lodash.template "^4.5.0" - postcss "^7.0.2" - -postcss-lab-function@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" - integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - postcss-load-config@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" - integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== dependencies: cosmiconfig "^5.0.0" import-cwd "^2.0.0" @@ -10577,20 +9146,6 @@ postcss-loader@^4.2.0: schema-utils "^3.0.0" semver "^7.3.4" -postcss-logical@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" - integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== - dependencies: - postcss "^7.0.2" - -postcss-media-minmax@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" - integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== - dependencies: - postcss "^7.0.2" - postcss-modules-extract-imports@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" @@ -10608,30 +9163,30 @@ postcss-modules-extract-imports@^2.0.0: postcss-modules-local-by-default@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + integrity sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA== dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-local-by-default@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" - integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== +postcss-modules-local-by-default@^3.0.2, postcss-modules-local-by-default@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== dependencies: icss-utils "^4.1.1" - postcss "^7.0.16" + postcss "^7.0.32" postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.0" + postcss-value-parser "^4.1.0" postcss-modules-scope@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + integrity sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw== dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-scope@^2.1.1, postcss-modules-scope@^2.2.0: +postcss-modules-scope@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== @@ -10642,7 +9197,7 @@ postcss-modules-scope@^2.1.1, postcss-modules-scope@^2.2.0: postcss-modules-values@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + integrity sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA== dependencies: icss-replace-symbols "^1.1.0" postcss "^6.0.1" @@ -10655,150 +9210,30 @@ postcss-modules-values@^3.0.0: icss-utils "^4.0.0" postcss "^7.0.6" -postcss-nesting@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" - integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== - dependencies: - postcss "^7.0.2" - -postcss-overflow-shorthand@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" - integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== - dependencies: - postcss "^7.0.2" - -postcss-page-break@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" - integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== - dependencies: - postcss "^7.0.2" - -postcss-place@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" - integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-preset-env@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" - integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== - dependencies: - autoprefixer "^9.6.1" - browserslist "^4.6.4" - caniuse-lite "^1.0.30000981" - css-blank-pseudo "^0.1.4" - css-has-pseudo "^0.10.0" - css-prefers-color-scheme "^3.1.1" - cssdb "^4.4.0" - postcss "^7.0.17" - postcss-attribute-case-insensitive "^4.0.1" - postcss-color-functional-notation "^2.0.1" - postcss-color-gray "^5.0.0" - postcss-color-hex-alpha "^5.0.3" - postcss-color-mod-function "^3.0.3" - postcss-color-rebeccapurple "^4.0.1" - postcss-custom-media "^7.0.8" - postcss-custom-properties "^8.0.11" - postcss-custom-selectors "^5.1.2" - postcss-dir-pseudo-class "^5.0.0" - postcss-double-position-gradients "^1.0.0" - postcss-env-function "^2.0.2" - postcss-focus-visible "^4.0.0" - postcss-focus-within "^3.0.0" - postcss-font-variant "^4.0.0" - postcss-gap-properties "^2.0.0" - postcss-image-set-function "^3.0.1" - postcss-initial "^3.0.0" - postcss-lab-function "^2.0.1" - postcss-logical "^3.0.0" - postcss-media-minmax "^4.0.0" - postcss-nesting "^7.0.0" - postcss-overflow-shorthand "^2.0.0" - postcss-page-break "^2.0.0" - postcss-place "^4.0.1" - postcss-pseudo-class-any-link "^6.0.0" - postcss-replace-overflow-wrap "^3.0.0" - postcss-selector-matches "^4.0.0" - postcss-selector-not "^4.0.0" - -postcss-pseudo-class-any-link@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" - integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-replace-overflow-wrap@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" - integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== - dependencies: - postcss "^7.0.2" - -postcss-selector-matches@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" - integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-not@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0" - integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ== - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== +postcss-safe-parser@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" + integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" + postcss "^7.0.26" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== dependencies: cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" + util-deprecate "^1.0.2" postcss-value-parser@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" - integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== - postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - -postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" - integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" + 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@7.0.21: version "7.0.21" @@ -10809,6 +9244,15 @@ postcss@7.0.21: source-map "^0.6.1" supports-color "^6.1.0" +postcss@7.0.32: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + postcss@^6.0.1, postcss@^6.0.23: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" @@ -10818,42 +9262,23 @@ postcss@^6.0.1, postcss@^6.0.23: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.24" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.24.tgz#972c3c5be431b32e40caefe6c81b5a19117704c2" - integrity sha512-Xl0XvdNWg+CblAXzNvbSOUvgJXwSjmbAKORqyw9V2AlHrm1js2gFw9y3jibBAhpKZi8b5JzJCVh/FyzPsTtgTA== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^7.0.26: - version "7.0.27" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" - integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== +postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.39" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== dependencies: - chalk "^2.4.2" + picocolors "^0.2.1" source-map "^0.6.1" - supports-color "^6.1.0" -postcss@^7.0.32, postcss@^7.0.35: - version "7.0.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" - integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prettier-linter-helpers@^1.0.0: version "1.0.0" @@ -10862,15 +9287,15 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.4.tgz#2d1bae173e355996ee355ec9830a7a1ee05457ef" - integrity sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w== +"prettier@>=2.2.1 <=2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18" + integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== -prettier@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +prettier@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== pretty-error@^2.1.1: version "2.1.2" @@ -10883,123 +9308,78 @@ pretty-error@^2.1.1: pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== -primeflex@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/primeflex/-/primeflex-1.3.1.tgz#60eee9d636112b79addd85c173e8637cc9898557" - integrity sha512-APU4DNof9nvQ6/6XxdQ8ACjADktsNpO5RjDf6h5B46OcegAL9vaslKepVt8CpJc/5bYZEAwA5hz9mAUhxBgJWA== +primeflex@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/primeflex/-/primeflex-3.3.0.tgz#6c755230ddf30c8fffed9f817efed28d5fe2bdff" + integrity sha512-4hvyIO7lERN5bnyURn67Qpozghins8Jq/GSXO6tymc3oa2ADHWuiYBti8ZptPwHu+uD/HTEisS26NEmeIGfPZQ== -primeicons@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/primeicons/-/primeicons-1.0.0.tgz#90061f168ef6227f21f0a7db8204ffa85cd27aec" - integrity sha512-p/hzIjUVccW4eJPhuORHI3AUkDpqfvCQVrjxbFEejnTEdWY4C8fomVfjiaA9jCu83fSQnBHuRIGB96iAR8R6uA== +primeicons@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/primeicons/-/primeicons-5.0.0.tgz#73a0b6028a77c58a9eeb331ad13aaf085e8451ee" + integrity sha512-heygWF0X5HFI1otlZE62pp6ye7sZ8om78J9au2BRkg8O7Y8AHTZ9qKMRzchZUHLe8zUAvdi6hZzzm9XxgwIExw== -primereact@^4.2.1: +primereact@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/primereact/-/primereact-4.2.2.tgz#9671cdf62f782712359b8acb10570c16da5cfdc2" integrity sha512-7IfNGRqTUKSWCCbTKeeMLKOShShUmUm0rV0DfsPn0vw0SeT+HQ7HA1cDhdfCuc+bbAK9cLts8j6O8oFOXMDJ7A== -prismjs@^1.21.0, prismjs@~1.23.0: - version "1.23.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.23.0.tgz#d3b3967f7d72440690497652a9d40ff046067f33" - integrity sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA== - optionalDependencies: - clipboard "^2.0.0" - -prismjs@^1.8.4: - version "1.20.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.20.0.tgz#9b685fc480a3514ee7198eac6a3bf5024319ff03" - integrity sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ== - optionalDependencies: - clipboard "^2.0.0" - -prismjs@~1.17.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" - integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== - optionalDependencies: - clipboard "^2.0.0" +prismjs@^1.27.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== -private@^0.1.6, private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== +prismjs@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" + integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: +process@0.11.10, process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise.allsettled@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.4.tgz#65e71f2a604082ed69c548b68603294090ee6803" - integrity sha512-o73CbvQh/OnPFShxHcHxk0baXR2a1m4ozb85ha0H14VEoi/EJJLa9mnPfEWJx9RjA9MLfhdjZ8I6HhWtBa64Ag== + version "1.0.6" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.6.tgz#8dc8ba8edf429feb60f8e81335b920e109c94b6e" + integrity sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg== dependencies: - array.prototype.map "^1.0.3" + array.prototype.map "^1.0.5" call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" iterate-value "^1.0.2" promise.prototype.finally@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz#b8af89160c9c673cefe3b4c4435b53cfd0287067" - integrity sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.0" - function-bind "^1.1.1" - -promise@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.1.tgz#e45d68b00a17647b6da711bf85ed6ed47208f450" - integrity sha1-5F1osAoXZHttpxG/he1u1HII9FA= - dependencies: - asap "~2.0.3" - -prompts@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" - integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + version "3.1.4" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.4.tgz#4e756a154e4db27fae24c6b18703495c31da3927" + integrity sha512-nNc3YbgMfLzqtqvO/q5DP6RR0SiHI9pUPGzyDf1q+usTwCN2kjvAnJkBb7bHe3o+fFSBPpsGMoYtaSi+LTNqng== dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" prompts@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" - integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types-exact@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" - integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== - dependencies: - has "^1.0.3" - object.assign "^4.1.0" - reflect.ownkeys "^0.2.0" - -prop-types@15.7.2, prop-types@^15.0.0, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -11008,32 +9388,34 @@ prop-types@15.7.2, prop-types@^15.0.0, prop-types@^15.6.0, prop-types@^15.6.1, p object-assign "^4.1.1" react-is "^16.8.1" -property-information@^5.0.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943" - integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA== +prop-types@^15.0.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: - xtend "^4.0.0" + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" -property-information@^5.3.0: +property-information@^5.0.0, property-information@^5.3.0: version "5.6.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== dependencies: xtend "^4.0.0" -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== public-encrypt@^4.0.0: version "4.0.3" @@ -11075,57 +9457,49 @@ pumpify@^1.3.3: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@^6.10.0: - version "6.10.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== +qs@6.11.0, qs@^6.10.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== -querystring@0.2.0, querystring@^0.2.0: +querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== + +querystring@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -ramda@^0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" - integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU= +ramda@^0.28.0: + version "0.28.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.28.0.tgz#acd785690100337e8b063cab3470019be427cc97" + integrity sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA== randexp@^0.5.3: version "0.5.3" @@ -11155,13 +9529,13 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: - bytes "3.1.0" - http-errors "1.7.2" + bytes "3.1.2" + http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" @@ -11173,83 +9547,27 @@ raw-loader@^4.0.2: loader-utils "^2.0.0" schema-utils "^3.0.0" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-colorful@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.2.0.tgz#1cd24ca7deff73a70cf34261813a4ed6c45129c2" - integrity sha512-SJXywyc9oew0rOp7xjmtStiJ5N4Mk2RYc/1OptlaEnbuCz9PvILmRotoHfowdmO142HASUSgKdngL4WOHo/TnQ== - -react-dev-utils@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-11.0.4.tgz#a7ccb60257a1ca2e0efe7a83e38e6700d17aa37a" - integrity sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A== - dependencies: - "@babel/code-frame" "7.10.4" - address "1.1.2" - browserslist "4.14.2" - chalk "2.4.2" - cross-spawn "7.0.3" - detect-port-alt "1.1.6" - escape-string-regexp "2.0.0" - filesize "6.1.0" - find-up "4.1.0" - fork-ts-checker-webpack-plugin "4.1.6" - global-modules "2.0.0" - globby "11.0.1" - gzip-size "5.1.1" - immer "8.0.1" - is-root "2.1.0" - loader-utils "2.0.0" - open "^7.0.2" - pkg-up "3.1.0" - prompts "2.4.0" - react-error-overlay "^6.0.9" - recursive-readdir "2.2.2" - shell-quote "1.7.2" - strip-ansi "6.0.0" - text-table "0.2.0" - react-diff-viewer@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/react-diff-viewer/-/react-diff-viewer-3.1.1.tgz#21ac9c891193d05a3734bfd6bd54b107ee6d46cc" integrity sha512-rmvwNdcClp6ZWdS11m1m01UnBA4OwYaLG/li0dB781e/bQEzsGyj+qewVd6W5ztBwseQ72pO7nwaCcq5jnlzcw== dependencies: classnames "^2.2.6" - create-emotion "^10.0.14" - diff "^4.0.1" - emotion "^10.0.14" - memoize-one "^5.0.4" - prop-types "^15.6.2" - -react-docgen-typescript-plugin@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-0.6.3.tgz#664b22601df083597ecb1e60bd21beca60125fdf" - integrity sha512-av1S/fmWBNFGgNa4qtkidFjjOz23eEi6EdCtwSWo9WNhGzUMyMygbD/DosMWoeFlZpk9R3MXPkRE7PDH6j5GMQ== - dependencies: - debug "^4.1.1" - endent "^2.0.1" - micromatch "^4.0.2" - react-docgen-typescript "^1.20.5" - tslib "^2.0.0" + create-emotion "^10.0.14" + diff "^4.0.1" + emotion "^10.0.14" + memoize-one "^5.0.4" + prop-types "^15.6.2" -react-docgen-typescript@^1.20.5: - version "1.22.0" - resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-1.22.0.tgz#00232c8e8e47f4437cac133b879b3e9437284bee" - integrity sha512-MPLbF8vzRwAG3GcjdL+OHQlhgtWsLTXs+7uJiHfEeT3Ur7IsZaNYqRTLQ9sj2nB6M6jylcPCeCmH7qbszJmecg== +react-docgen-typescript@^2.1.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c" + integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== react-docgen@^5.0.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-5.4.0.tgz#2cd7236720ec2769252ef0421f23250b39a153a1" - integrity sha512-JBjVQ9cahmNlfjMGxWUxJg919xBBKAoy3hgDgKERbR+BcF4ANpDuzWAScC7j27hZfd8sJNmMPOLWo9+vB/XJEQ== + version "5.4.3" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-5.4.3.tgz#7d297f73b977d0c7611402e5fc2a168acf332b26" + integrity sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA== dependencies: "@babel/core" "^7.7.5" "@babel/generator" "^7.12.11" @@ -11262,57 +9580,33 @@ react-docgen@^5.0.0: node-dir "^0.1.10" strip-indent "^3.0.0" -react-dom@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" - integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== +react-dom@^16.14.0: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" scheduler "^0.19.1" -react-draggable@^4.4.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.3.tgz#0727f2cae5813e36b0e4962bf11b2f9ef2b406f3" - integrity sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.0" - -react-element-to-jsx-string@^14.3.2: - version "14.3.2" - resolved "https://registry.yarnpkg.com/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.2.tgz#c0000ed54d1f8b4371731b669613f2d4e0f63d5c" - integrity sha512-WZbvG72cjLXAxV7VOuSzuHEaI3RHj10DZu8EcKQpkKcAj7+qAkG5XUeSdX5FXrA0vPrlx0QsnAzZEBJwzV0e+w== +react-dropzone@^14.2.3: + version "14.2.3" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.2.3.tgz#0acab68308fda2d54d1273a1e626264e13d4e84b" + integrity sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug== dependencies: - "@base2/pretty-print-object" "1.0.0" - is-plain-object "3.0.1" - -react-error-overlay@5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.1.6.tgz#0cd73407c5d141f9638ae1e0c63e7b2bf7e9929d" - integrity sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q== - -react-error-overlay@^6.0.9: - version "6.0.9" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" - integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== + attr-accept "^2.2.2" + file-selector "^0.6.0" + prop-types "^15.8.1" -react-fast-compare@^3.0.1, react-fast-compare@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" - integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== - -react-helmet-async@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.9.tgz#5b9ed2059de6b4aab47f769532f9fbcbce16c5ca" - integrity sha512-N+iUlo9WR3/u9qGMmP4jiYfaD6pe9IvDTapZLFJz2D3xlTlCM1Bzy4Ab3g72Nbajo/0ZyW+W9hdz8Hbe4l97pQ== +react-element-to-jsx-string@^14.3.4: + version "14.3.4" + resolved "https://registry.yarnpkg.com/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz#709125bc72f06800b68f9f4db485f2c7d31218a8" + integrity sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg== dependencies: - "@babel/runtime" "^7.12.5" - invariant "^2.2.4" - prop-types "^15.7.2" - react-fast-compare "^3.2.0" - shallowequal "^1.1.0" + "@base2/pretty-print-object" "1.0.1" + is-plain-object "5.0.0" + react-is "17.0.2" react-inspector@^5.1.0: version "5.1.1" @@ -11323,139 +9617,93 @@ react-inspector@^5.1.0: is-dom "^1.0.0" prop-types "^15.0.0" -react-is@16.8.6: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" - integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== - -react-is@^16.7.0, react-is@^16.8.1, react-is@^16.9.0: +react-is@16.13.1, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.2: +react-is@17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - -react-popper-tooltip@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz#329569eb7b287008f04fcbddb6370452ad3f9eac" - integrity sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ== - dependencies: - "@babel/runtime" "^7.12.5" - "@popperjs/core" "^2.5.4" - react-popper "^2.2.4" - -react-popper@^2.2.4: - version "2.2.5" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.2.5.tgz#1214ef3cec86330a171671a4fbcbeeb65ee58e96" - integrity sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw== - dependencies: - react-fast-compare "^3.0.1" - warning "^4.0.2" +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-redux@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d" - integrity sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA== +react-redux@^8.0.2: + version "8.0.5" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.5.tgz#e5fb8331993a019b8aaf2e167a93d10af469c7bd" + integrity sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw== dependencies: - "@babel/runtime" "^7.5.5" - hoist-non-react-statics "^3.3.0" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^16.9.0" + "@babel/runtime" "^7.12.1" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/use-sync-external-store" "^0.0.3" + hoist-non-react-statics "^3.3.2" + react-is "^18.0.0" + use-sync-external-store "^1.0.0" -react-refresh@^0.8.3: +react-refresh@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== -react-sizeme@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-3.0.1.tgz#4d12f4244e0e6a0fb97253e7af0314dc7c83a5a0" - integrity sha512-9Hf1NLgSbny1bha77l9HwvwwxQUJxFUqi44Ih+y3evA+PezBpGdCGlnvye6avss2cIgs9PgdYgMnfuzJWn/RUw== - dependencies: - element-resize-detector "^1.2.2" - invariant "^2.2.4" - shallowequal "^1.1.0" - throttle-debounce "^3.0.1" - -react-syntax-highlighter@^12.2.1: - version "12.2.1" - resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-12.2.1.tgz#14d78352da1c1c3f93c6698b70ec7c706b83493e" - integrity sha512-CTsp0ZWijwKRYFg9xhkWD4DSpQqE4vb2NKVMdPAkomnILSmsNBHE0n5GuI5zB+PU3ySVvXvdt9jo+ViD9XibCA== - dependencies: - "@babel/runtime" "^7.3.1" - highlight.js "~9.15.1" - lowlight "1.12.1" - prismjs "^1.8.4" - refractor "^2.4.1" +react-refresh@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" + integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== -react-syntax-highlighter@^13.5.3: - version "13.5.3" - resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-13.5.3.tgz#9712850f883a3e19eb858cf93fad7bb357eea9c6" - integrity sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg== +react-syntax-highlighter@^15.5.0: + version "15.5.0" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz#4b3eccc2325fa2ec8eff1e2d6c18fa4a9e07ab20" + integrity sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg== dependencies: "@babel/runtime" "^7.3.1" - highlight.js "^10.1.1" - lowlight "^1.14.0" - prismjs "^1.21.0" - refractor "^3.1.0" + highlight.js "^10.4.1" + lowlight "^1.17.0" + prismjs "^1.27.0" + refractor "^3.6.0" -react-textarea-autosize@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.2.tgz#4f9374d357b0a6f6469956726722549124a1b2db" - integrity sha512-JrMWVgQSaExQByP3ggI1eA8zF4mF0+ddVuX7acUeK2V7bmrpjVOY72vmLz2IXFJSAXoY3D80nEzrn0GWajWK3Q== - dependencies: - "@babel/runtime" "^7.10.2" - use-composed-ref "^1.0.0" - use-latest "^1.0.0" - -react-timeago@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/react-timeago/-/react-timeago-4.4.0.tgz#4520dd9ba63551afc4d709819f52b14b9343ba2b" - integrity sha512-Zj8RchTqZEH27LAANemzMR2RpotbP2aMd+UIajfYMZ9KW4dMcViUVKzC7YmqfiqlFfz8B0bjDw2xUBjmcxDngA== +react-timeago@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/react-timeago/-/react-timeago-7.1.0.tgz#248bc6aa40a561249e756b2df402c94f1a296a85" + integrity sha512-rouF7MiEm55fH791Y8cg+VobIJgx8gtNJ+gjr86R4ZqO1WKPkXiXjdT/lRzrvEkUzsxT1exHqV2V+Zdi114H3A== react-tooltip@^4.2.21: - version "4.2.21" - resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.21.tgz#840123ed86cf33d50ddde8ec8813b2960bfded7f" - integrity sha512-zSLprMymBDowknr0KVDiJ05IjZn9mQhhg4PRsqln0OZtURAJ1snt1xi5daZfagsh6vfsziZrc9pErPTDY1ACig== + version "4.5.0" + resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.5.0.tgz#862a39fbb05522624fb6efa782b245a89a0db784" + integrity sha512-mJNurq29atce+TJc9Xe+/FHrcEs3K9J7wkjZZXwbK5Yq6uG5SZeKSFHwd0wcRPUipVwx5crmgzSW8Zu1xyvLTQ== dependencies: - prop-types "^15.7.2" + prop-types "^15.8.1" uuid "^7.0.3" -react-transition-group@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.2.1.tgz#61fc9e36568bff9a1fe4e60fae323c8a6dbc0680" - integrity sha512-IXrPr93VzCPupwm2O6n6C2kJIofJ/Rp5Ltihhm9UfE8lkuVX2ng/SUUl/oWjblybK9Fq2Io7LGa6maVqPB762Q== +react-transition-group@^4.4.2: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: - "@babel/runtime" "^7.4.5" - dom-helpers "^3.4.0" + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" -react@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" - integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== +react@^16.14.0: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" + find-up "^1.0.0" + read-pkg "^1.0.0" read-pkg-up@^7.0.1: version "7.0.1" @@ -11466,14 +9714,14 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== dependencies: - load-json-file "^2.0.0" + load-json-file "^1.0.0" normalize-package-data "^2.3.2" - path-type "^2.0.0" + path-type "^1.0.0" read-pkg@^5.2.0: version "5.2.0" @@ -11485,10 +9733,10 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -11498,7 +9746,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1: +readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -11516,123 +9764,73 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" -recast@0.18.5: - version "0.18.5" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.18.5.tgz#9d5adbc07983a3c8145f3034812374a493e0fe4d" - integrity sha512-sD1WJrpLQAkXGyQZyGzTM75WJvyAd98II5CHdK3IYbt/cZlU0UzCRVU11nUFNXX9fBVEt4E9ajkMjBlUlG+Oog== - dependencies: - ast-types "0.13.2" - esprima "~4.0.0" - private "^0.1.8" - source-map "~0.6.1" - -recursive-readdir@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g== dependencies: - minimatch "3.0.4" + indent-string "^2.1.0" + strip-indent "^1.0.1" redux-devtools-extension@^2.13.2: - version "2.13.8" - resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz#37b982688626e5e4993ff87220c9bbb7cd2d96e1" - integrity sha512-8qlpooP2QqPtZHQZRhx3x3OP5skEV1py/zUdMY28WNAocbafxdG2tRD1MWE7sp8obGMNYuLWanhhQ7EQvT1FBg== + version "2.13.9" + resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz#6b764e8028b507adcb75a1cae790f71e6be08ae7" + integrity sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A== redux-persist@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8" integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== -redux-thunk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" - integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== - -redux@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" - integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== - dependencies: - loose-envify "^1.4.0" - symbol-observable "^1.2.0" - -reflect.ownkeys@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" - integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= +redux-thunk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" + integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== -refractor@^2.4.1: - version "2.10.1" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" - integrity sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw== +redux@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" + integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== dependencies: - hastscript "^5.0.0" - parse-entities "^1.1.2" - prismjs "~1.17.0" + "@babel/runtime" "^7.9.2" -refractor@^3.1.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.3.1.tgz#ebbc04b427ea81dc25ad333f7f67a0b5f4f0be3a" - integrity sha512-vaN6R56kLMuBszHSWlwTpcZ8KTMG6aUCok4GrxYDT20UIOXxOc5o6oDc8tNTzSlH3m2sI+Eu9Jo2kVdDcUTWYw== +refractor@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.6.0.tgz#ac318f5a0715ead790fcfb0c71f4dd83d977935a" + integrity sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA== dependencies: hastscript "^6.0.0" parse-entities "^2.0.0" - prismjs "~1.23.0" + prismjs "~1.27.0" -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== - dependencies: - regenerate "^1.4.0" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== dependencies: - regenerate "^1.4.0" - -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + regenerate "^1.4.2" -regenerator-runtime@^0.13.7: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== - dependencies: - private "^0.1.6" +regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: + version "0.13.10" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" + integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== dependencies: "@babel/runtime" "^7.8.4" @@ -11649,100 +9847,48 @@ regex-parser@2.2.10: resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.10.tgz#9e66a8f73d89a107616e63b39d4deddfee912b37" integrity sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA== -regexp.prototype.flags@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -regexp.prototype.flags@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" + functions-have-names "^1.2.2" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= - -regjsgen@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= +regexpu-core@^5.1.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc" + integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw== dependencies: - jsesc "~0.5.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsgen "^0.7.1" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== - dependencies: - jsesc "~0.5.0" +regjsgen@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" + integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== remark-external-links@^8.0.0: version "8.0.0" @@ -11797,9 +9943,9 @@ remark-parse@8.0.3: xtend "^4.0.1" remark-slug@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-6.0.0.tgz#2b54a14a7b50407a5e462ac2f376022cce263e2c" - integrity sha512-ln67v5BrGKHpETnm6z6adlJPhESFJwfuZZ3jrmi+lKTzeZxh2tzFzUfDD4Pm2hRGOarHLuGToO86MNMZ/hA67Q== + version "6.1.0" + resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-6.1.0.tgz#0503268d5f0c4ecb1f33315c00465ccdd97923ce" + integrity sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ== dependencies: github-slugger "^1.0.0" mdast-util-to-string "^1.0.0" @@ -11815,48 +9961,55 @@ remark-squeeze-paragraphs@4.0.0: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== renderkid@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" - integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== dependencies: - css-select "^2.0.2" - dom-converter "^0.2" - htmlparser2 "^3.10.1" - lodash "^4.17.20" - strip-ansi "^3.0.0" + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== + dependencies: + is-finite "^1.0.0" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +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== -reselect@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" - integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== +reselect@^4.1.6: + version "4.1.7" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" + integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== resolve-from@^4.0.0: version "4.0.0" @@ -11887,52 +10040,25 @@ resolve-url-loader@3.1.1: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" - integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== - dependencies: - path-parse "^1.0.6" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== -resolve@^1.12.0, resolve@^1.13.1: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.14.2, resolve@^1.19.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -resolve@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.3.2, resolve@^1.8.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== +resolve@^2.0.0-next.3: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" ret@^0.2.0: version "0.2.2" @@ -11944,11 +10070,6 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -11957,31 +10078,24 @@ reusify@^1.0.4: rework-visit@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" - integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + integrity sha512-W6V2fix7nCLUYX1v6eGPrBOZlc03/faqzP4sUxMAJMBMOPYhfV/RyLegTufn5gJKaOITyi+gvf0LXDZ9NzkHnQ== rework@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" - integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + integrity sha512-eEjL8FdkdsxApd0yWVZgBGzfCQiT8yqSc2H1p4jpZpQdtz7ohETiDMoje5PlM8I9WgkqkreVxFUKYOiJdVWDXw== dependencies: convert-source-map "^0.3.3" css "^2.0.0" -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -12001,13 +10115,6 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-async@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" - integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== - dependencies: - is-promise "^2.1.0" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -12018,17 +10125,10 @@ run-parallel@^1.1.9: run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== dependencies: aproba "^1.1.1" -rxjs@^6.5.3: - version "6.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" - integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== - dependencies: - tslib "^1.9.0" - safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -12039,19 +10139,28 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -12071,21 +10180,16 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sass-loader@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" - integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== +sass-loader@10.0.2: + version "10.0.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.2.tgz#c7b73010848b264792dd45372eea0b87cba4401e" + integrity sha512-wV6NDUVB8/iEYMalV/+139+vl2LaRFlZGEd5/xmdcdzQcgmis+npyco6NsDTVOlNA3y2NV9Gcz+vHyFMIT+ffg== dependencies: - clone-deep "^4.0.1" - loader-utils "^1.2.3" - neo-async "^2.6.1" - schema-utils "^2.6.1" - semver "^6.3.0" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + klona "^2.0.3" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^2.7.1" + semver "^7.3.2" scheduler@^0.19.1: version "0.19.1" @@ -12104,6 +10208,15 @@ schema-utils@2.7.0: ajv "^6.12.2" ajv-keywords "^3.4.1" +schema-utils@2.7.1, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0, schema-utils@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -12113,90 +10226,50 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.0.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.1.tgz#eb78f0b945c7bcfa2082b3565e8db3548011dc4f" - integrity sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg== - dependencies: - ajv "^6.10.2" - ajv-keywords "^3.4.1" - -schema-utils@^2.6.0, schema-utils@^2.6.1: - version "2.6.5" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.5.tgz#c758f0a7e624263073d396e29cd40aa101152d8a" - integrity sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ== - dependencies: - ajv "^6.12.0" - ajv-keywords "^3.4.1" - -schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== dependencies: - "@types/json-schema" "^7.0.6" + "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" -select@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" + depd "2.0.0" + destroy "1.2.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.7.2" + http-errors "2.0.0" mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" + ms "2.1.3" + on-finished "2.4.1" range-parser "~1.2.1" - statuses "~1.5.0" - -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + statuses "2.0.1" serialize-javascript@^4.0.0: version "4.0.0" @@ -12205,10 +10278,24 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + serve-favicon@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" - integrity sha1-k10kDN/g9YBTB/3+ln2IlCosvPA= + integrity sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA== dependencies: etag "~1.8.1" fresh "0.5.2" @@ -12216,25 +10303,20 @@ serve-favicon@^2.5.0: parseurl "~1.3.2" safe-buffer "5.1.1" -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" + send "0.18.0" -set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-immediate-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -12246,15 +10328,15 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" @@ -12271,15 +10353,10 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -12293,26 +10370,18 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@1.7.2, shell-quote@^1.6.1: +shell-quote@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== -side-channel@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" - integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== - dependencies: - es-abstract "^1.17.0-next.1" - object-inspect "^1.7.0" - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -12322,10 +10391,10 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== sisteransi@^1.0.5: version "1.0.5" @@ -12342,15 +10411,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -12381,64 +10441,61 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.16: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== +source-map-support@^0.5.16, source-map-support@~0.5.12, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@0.7.3, source-map@^0.7.3: +source-map@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map@0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== space-separated-tokens@^1.0.0: version "1.1.5" @@ -12446,30 +10503,30 @@ space-separated-tokens@^1.0.0: integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -12481,7 +10538,7 @@ split-string@^3.0.1, split-string@^3.0.2: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== ssri@^6.0.1: version "6.0.2" @@ -12490,7 +10547,7 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -ssri@^8.0.1: +ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== @@ -12502,10 +10559,17 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +stacktrace-parser@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" state-toggle@^1.0.0: version "1.0.3" @@ -12515,20 +10579,28 @@ state-toggle@^1.0.0: static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== store2@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/store2/-/store2-2.12.0.tgz#e1f1b7e1a59b6083b2596a8d067f6ee88fd4d3cf" - integrity sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw== + version "2.14.2" + resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.2.tgz#56138d200f9fe5f582ad63bc2704dbc0e4a45068" + integrity sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w== + +stream-browserify@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" stream-browserify@^2.0.1: version "2.0.2" @@ -12558,156 +10630,73 @@ stream-http@^2.7.2: xtend "^4.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-hash@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -string-width@^4.0.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" +string-hash@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A== -string-width@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" -"string.prototype.matchall@^4.0.0 || ^3.0.1": - version "4.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29" - integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== +"string.prototype.matchall@^4.0.0 || ^3.0.1", string.prototype.matchall@^4.0.7: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has-symbols "^1.0.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" + regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" -string.prototype.matchall@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" - integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - has-symbols "^1.0.1" - internal-slot "^1.0.2" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.2" - string.prototype.padend@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" - integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== + version "3.1.4" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6" + integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" string.prototype.padstart@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.2.tgz#f9b9ce66bedd7c06acb40ece6e34c6046e1a019d" - integrity sha512-HDpngIP3pd0DeazrfqzuBrQZa+D2arKWquEHfGt5LzVjd+roLC3cjqVI0X8foaZz5rrrhcu8oJAQamW8on9dqw== + version "3.1.4" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.4.tgz#4842d58a09df2addac23cf0b325ce9f087978e90" + integrity sha512-XqOHj8horGsF+zwxraBvMTkBFM28sS/jHBJajh17JtJKA92qazidiQbLosV4UA18azvLOVKYo/E3g3T9Y5826w== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" -string.prototype.trimend@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz#ee497fd29768646d84be2c9b819e292439614373" - integrity sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string.prototype.trimend@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimleft@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" - integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimstart "^1.0.0" - -string.prototype.trimright@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" - integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimend "^1.0.0" - -string.prototype.trimstart@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz#afe596a7ce9de905496919406c9734845f01a2f2" - integrity sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" + define-properties "^1.1.4" + es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trimstart@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -12723,14 +10712,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@5.2.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@6.0.0, strip-ansi@^6.0.0: +strip-ansi@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== @@ -12740,26 +10722,45 @@ strip-ansi@6.0.0, strip-ansi@^6.0.0: strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== dependencies: - ansi-regex "^3.0.0" + is-utf8 "^0.2.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +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-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA== + dependencies: + get-stdin "^4.0.1" strip-indent@^3.0.0: version "3.0.0" @@ -12768,23 +10769,18 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" - integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -style-loader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.0.0.tgz#1d5296f9165e8e2c85d24eee0b7caf9ec8ca1f82" - integrity sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw== +style-loader@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a" + integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== dependencies: - loader-utils "^1.2.3" - schema-utils "^2.0.1" + loader-utils "^2.0.0" + schema-utils "^2.6.6" style-loader@^1.3.0: version "1.3.0" @@ -12801,10 +10797,10 @@ style-to-object@0.3.0, style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" -styled-jsx@3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.2.5.tgz#0172a3e13a0d6d8bf09167dcaf32cf7102d932ca" - integrity sha512-prEahkYwQHomUljJzXzrFnBmQrSMtWOBbXn8QeEkpfFkqMZQGshxzzp4H8ebBIsbVlHF/3+GSXMnmK/fp7qVYQ== +styled-jsx@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.3.0.tgz#32335c1a3ecfc923ba4f9c056eeb3d4699006b09" + integrity sha512-sh8BI5eGKyJlwL4kNXHjb27/a/GJV8wP4ElRIkRXrGW3sHKOsY9Pa1VZRNxyvf3+lisdPwizD9JDkzVO9uGwZw== dependencies: "@babel/types" "7.8.3" babel-plugin-syntax-jsx "6.18.0" @@ -12828,7 +10824,7 @@ stylis@3.5.4: supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" @@ -12844,72 +10840,59 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" -symbol-observable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== symbol.prototype.description@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.4.tgz#c30edd3fe8c040d941cf7dc15842be15adf66855" - integrity sha512-fZkHwJ8ZNRVRzF/+/2OtygyyH06CjC0YZAQRHu9jKKw8RXlJpbizEHvGRUu22Qkg182wJk1ugb5Aovcv3UPrww== + version "1.0.5" + resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz#d30e01263b6020fbbd2d2884a6276ce4d49ab568" + integrity sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ== dependencies: call-bind "^1.0.2" - es-abstract "^1.18.0-next.2" - has-symbols "^1.0.1" + get-symbol-description "^1.0.0" + has-symbols "^1.0.2" object.getownpropertydescriptors "^2.1.2" -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" +synchronous-promise@^2.0.15: + version "2.0.16" + resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.16.tgz#669b75e86b4295fdcc1bb0498de9ac1af6fd51a9" + integrity sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A== tapable@^0.1.8: version "0.1.10" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" - integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q= + integrity sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ== tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== tar@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== + version "6.1.12" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.12.tgz#3b742fb05669b55671fb769ab67a7791ea1a62e6" + integrity sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -12918,10 +10901,10 @@ tar@^6.0.2: mkdirp "^1.0.3" yallist "^4.0.0" -telejson@^5.1.0: - version "5.3.3" - resolved "https://registry.yarnpkg.com/telejson/-/telejson-5.3.3.tgz#fa8ca84543e336576d8734123876a9f02bf41d2e" - integrity sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA== +telejson@^6.0.8: + version "6.0.8" + resolved "https://registry.yarnpkg.com/telejson/-/telejson-6.0.8.tgz#1c432db7e7a9212c1fbd941c3e5174ec385148f7" + integrity sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg== dependencies: "@types/is-function" "^1.0.0" global "^4.4.0" @@ -12932,67 +10915,74 @@ telejson@^5.1.0: lodash "^4.17.21" memoizerific "^1.11.3" -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - terser-webpack-plugin@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" - integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + serialize-javascript "^4.0.0" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser-webpack-plugin@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-3.1.0.tgz#91e6d39571460ed240c0cf69d295bcf30ebf98cb" - integrity sha512-cjdZte66fYkZ65rQ2oJfrdCAkkhJA7YLYk5eGOcGCSGlq0ieZupRdjedSQXYknMPo2IveQL+tPdrxUkERENCFA== +terser-webpack-plugin@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" + integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== dependencies: cacache "^15.0.5" find-cache-dir "^3.3.1" - jest-worker "^26.2.1" + jest-worker "^26.5.0" p-limit "^3.0.2" - schema-utils "^2.6.6" - serialize-javascript "^4.0.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" source-map "^0.6.1" - terser "^4.8.0" + terser "^5.3.4" webpack-sources "^1.4.3" -terser@4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.2.tgz#448fffad0245f4c8a277ce89788b458bfd7706e8" - integrity sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ== +terser-webpack-plugin@^5.1.3: + version "5.3.6" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" + integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.14.1" + +terser@4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" -terser@4.6.7, terser@^4.1.2: - version "4.6.7" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" - integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== +terser@^4.1.2, terser@^4.6.3: + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" -terser@^4.6.3, terser@^4.8.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== +terser@^5.14.1, terser@^5.3.4: + version "5.15.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.1.tgz#8561af6e0fd6d839669c73b92bdd5777d870ed6c" + integrity sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw== dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + source-map-support "~0.5.20" test-exclude@^6.0.0: version "6.0.0" @@ -13003,24 +10993,10 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@0.2.0, text-table@^0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thread-loader@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda" - integrity sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg== - dependencies: - loader-runner "^2.3.1" - loader-utils "^1.1.0" - neo-async "^2.6.0" - -throttle-debounce@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" - integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== through2@^2.0.0: version "2.0.5" @@ -13030,31 +11006,14 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" -tiny-emitter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" - integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: +tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== @@ -13062,24 +11021,24 @@ tmpl@1.0.x: to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -13101,20 +11060,32 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -toggle-selection@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== traverse@0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + integrity sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw== + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw== trim-trailing-lines@^1.0.0: version "1.1.4" @@ -13124,7 +11095,7 @@ trim-trailing-lines@^1.0.0: trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== trough@^1.0.0: version "1.0.5" @@ -13132,73 +11103,70 @@ trough@^1.0.0: integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== ts-dedent@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.1.1.tgz#6dd56870bb5493895171334fa5d7e929107e5bbc" - integrity sha512-riHuwnzAUCfdIeTBNUq7+Yj+ANnrMXo/7+Z74dIdudS7ys2k8aSGMzpJRMFDF7CLwUTbtvi1ZZff/Wl+XxmqIA== - -ts-essentials@^2.0.3: - version "2.0.12" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" - integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== - -ts-pnp@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.5.tgz#840e0739c89fce5f3abd9037bb091dbff16d9dec" - integrity sha512-ti7OGMOUOzo66wLF3liskw6YQIaSsBgc4GOAlWRnIEj8htCxJUxskanMUoJOD6MDCRAXo36goXJZch+nOS0VMA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" + integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== -tsconfig-paths@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" - integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.1" - minimist "^1.2.0" + minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@~1.6.17, type-is@~1.6.18: +type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -13211,10 +11179,10 @@ type@^1.0.1: resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== -type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" - integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -13226,23 +11194,23 @@ typedarray-to-buffer@^3.1.5: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -unbox-primitive@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -unfetch@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.1.0.tgz#6ec2dd0de887e58a4dee83a050ded80ffc4137db" - integrity sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg== - unfetch@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" @@ -13256,33 +11224,28 @@ unherit@^1.0.4: inherits "^2.0.0" xtend "^4.0.0" -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unified@9.2.0: version "9.2.0" @@ -13306,11 +11269,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -13391,26 +11349,36 @@ universalify@^2.0.0: unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unquote@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" +untildify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0" + integrity sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig== + dependencies: + os-homedir "^1.0.0" + upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -13421,16 +11389,16 @@ uri-js@^4.2.2: urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== -url-loader@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.0.1.tgz#6c47fc7090e3d48939e01fe3c6efcba5938dcec5" - integrity sha512-nd+jtHG6VgYx/NnXxXSWCJ7FtHIhuyk6Pe48HKhq29Avq3r5FSdIrenvzlbb67A3SNFaQyLk0/lMZfubj0+5ww== +url-loader@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" + integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== dependencies: - loader-utils "^1.1.0" + loader-utils "^1.2.3" mime "^2.4.4" - schema-utils "^1.0.0" + schema-utils "^2.5.0" url-loader@^4.1.1: version "4.1.1" @@ -13441,37 +11409,25 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -url@0.11.0, url@^0.11.0: +url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== dependencies: punycode "1.3.2" querystring "0.2.0" -use-composed-ref@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.1.0.tgz#9220e4e94a97b7b02d7d27eaeab0b37034438bbc" - integrity sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg== +use-subscription@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.4.1.tgz#edcbcc220f1adb2dd4fa0b2f61b6cc308e620069" + integrity sha512-7+IIwDG/4JICrWHL/Q/ZPK5yozEnvRm6vHImu0LKwQlmWGKeiF7mbAenLlK/cTNXrTtXHU/SFASQHzB6+oSJMQ== dependencies: - ts-essentials "^2.0.3" - -use-isomorphic-layout-effect@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" - integrity sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ== + object-assign "^4.1.1" -use-latest@^1.0.0: +use-sync-external-store@^1.0.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.0.tgz#a44f6572b8288e0972ec411bdd0840ada366f232" - integrity sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw== - dependencies: - use-isomorphic-layout-effect "^1.0.0" - -use-subscription@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.1.1.tgz#5509363e9bb152c4fb334151d4dceb943beaa7bb" - integrity sha512-gk4fPTYvNhs6Ia7u8/+K7bM7sZ7O7AMfWtS+zPO8luH+zWuiGgGcrW0hL4MRWZSzXo+4ofNorf87wZwBKz2YdQ== + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== use@^3.1.0: version "3.1.1" @@ -13481,7 +11437,7 @@ use@^3.1.0: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util.promisify@1.0.0: version "1.0.0" @@ -13494,7 +11450,7 @@ util.promisify@1.0.0: util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ== dependencies: inherits "2.0.1" @@ -13508,22 +11464,22 @@ util@^0.11.0: utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid-browser@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid-browser/-/uuid-browser-3.1.0.tgz#0f05a40aef74f9e5951e20efbf44b11871e56410" - integrity sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA= + integrity sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg== uuid@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== uuid@^7.0.3: version "7.0.3" @@ -13535,19 +11491,14 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" - integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== - -v8-to-istanbul@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== +v8-to-istanbul@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" - source-map "^0.7.3" validate-npm-package-license@^3.0.1: version "3.0.4" @@ -13560,7 +11511,7 @@ validate-npm-package-license@^3.0.1: vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vfile-location@^3.0.0, vfile-location@^3.2.0: version "3.2.0" @@ -13585,24 +11536,17 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" -vm-browserify@^1.0.1: +vm-browserify@1.1.2, vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -warning@^4.0.2, warning@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: - loose-envify "^1.0.0" + makeerror "1.0.12" watchpack-chokidar2@^2.0.1: version "2.0.1" @@ -13619,15 +11563,6 @@ watchpack@2.0.0-beta.13: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -watchpack@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== - dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - watchpack@^1.7.4: version "1.7.5" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" @@ -13639,27 +11574,33 @@ watchpack@^1.7.4: chokidar "^3.4.1" watchpack-chokidar2 "^2.0.1" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= +watchpack@^2.2.0, watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: - defaults "^1.0.3" + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" web-namespaces@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== -webpack-dev-middleware@3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff" - integrity sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.2" - range-parser "^1.2.1" - webpack-log "^2.0.0" +web-vitals@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-0.2.4.tgz#ec3df43c834a207fd7cdefd732b2987896e08511" + integrity sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-dev-middleware@^3.7.3: version "3.7.3" @@ -13677,15 +11618,14 @@ webpack-filter-warnings-plugin@^1.2.1: resolved "https://registry.yarnpkg.com/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz#dc61521cf4f9b4a336fbc89108a75ae1da951cdb" integrity sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg== -webpack-hot-middleware@2.25.0, webpack-hot-middleware@^2.25.0: - version "2.25.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" - integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== +webpack-hot-middleware@^2.25.1: + version "2.25.3" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz#be343ce2848022cfd854dd82820cd730998c6794" + integrity sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA== dependencies: - ansi-html "0.0.7" - html-entities "^1.2.0" - querystring "^0.2.0" - strip-ansi "^3.0.0" + ansi-html-community "0.0.8" + html-entities "^2.1.0" + strip-ansi "^6.0.0" webpack-log@^2.0.0: version "2.0.0" @@ -13695,14 +11635,7 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@^4.1.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - -webpack-sources@1.4.3, webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: +webpack-sources@1.4.3, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -13710,6 +11643,11 @@ webpack-sources@1.4.3, webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-s source-list-map "^2.0.0" source-map "~0.6.1" +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-virtual-modules@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz#20863dc3cb6bb2104729fff951fbe14b18bd0299" @@ -13717,7 +11655,7 @@ webpack-virtual-modules@^0.2.2: dependencies: debug "^3.0.0" -webpack@4: +webpack@4, webpack@4.46.0: version "4.46.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== @@ -13746,39 +11684,81 @@ webpack@4: watchpack "^1.7.4" webpack-sources "^1.4.1" -webpack@4.42.0: - version "4.42.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8" - integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w== +webpack@4.44.1: + version "4.44.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" + integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.1" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" + enhanced-resolve "^4.3.0" eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" loader-runner "^2.4.0" loader-utils "^1.2.3" memory-fs "^0.4.1" micromatch "^3.1.10" - mkdirp "^0.5.1" + mkdirp "^0.5.3" neo-async "^2.6.1" node-libs-browser "^2.2.1" schema-utils "^1.0.0" tapable "^1.1.3" terser-webpack-plugin "^1.4.3" - watchpack "^1.6.0" + watchpack "^1.7.4" webpack-sources "^1.4.1" -whatwg-fetch@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" - integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== +"webpack@>=4.43.0 <6.0.0": + version "5.75.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" + integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== + dependencies: + "@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" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + 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.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" which-boxed-primitive@^1.0.2: version "1.0.2" @@ -13791,7 +11771,7 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which@^1.2.9, which@^1.3.1: +which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -13805,12 +11785,12 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== +wide-align@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - string-width "^1.0.2 || 2" + string-width "^1.0.2 || 2 || 3 || 4" widest-line@^3.1.0: version "3.1.0" @@ -13819,11 +11799,16 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -13850,24 +11835,29 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.1.tgz#558328352e673b5bb192cf86500d60b230667d4b" - integrity sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw== + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" is-typedarray "^1.0.0" signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" +ws@^8.2.3: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + +x-default-browser@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/x-default-browser/-/x-default-browser-0.4.0.tgz#70cf0da85da7c0ab5cb0f15a897f2322a6bdd481" + integrity sha512-7LKo7RtWfoFN/rHx1UELv/2zHGMx8MkZKDq1xENmOCTkfIqZJ0zZ26NEJX8czhnPXVcqS0ARjjfJB+eJ0/5Cvw== + optionalDependencies: + default-browser-id "^1.0.4" xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" @@ -13875,16 +11865,16 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -13894,20 +11884,15 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: +yaml@^1.10.0, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^1.7.2: - version "1.10.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" - integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== - -yargs-parser@^20.2.2, yargs-parser@^20.2.7: - version "20.2.7" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs@^16.2.0: version "16.2.0" diff --git a/components/inspectit-ocelot-configurationserver/build.gradle b/components/inspectit-ocelot-configurationserver/build.gradle index 71d46c203e..eb85899b7d 100644 --- a/components/inspectit-ocelot-configurationserver/build.gradle +++ b/components/inspectit-ocelot-configurationserver/build.gradle @@ -12,13 +12,13 @@ apply plugin: 'io.spring.dependency-management' node { // Version of node to use. - version = '12.16.1' + version = '12.22.0' // Version of npm to use. npmVersion = '6.13.4' // Version of Yarn to use. - yarnVersion = '1.16.0' + yarnVersion = '1.22.0' // If true, it will download node using above parameters. // If false, it will try to use globally installed node. @@ -87,9 +87,9 @@ cyclonedxBom { repositories { mavenCentral() } - -sourceCompatibility = 1.8 - +//to guarantee that the Configuration Server is compatible with Java 8 runtime environments +sourceCompatibility = 1.8 // Java version compatibility to use when compiling Java source. +targetCompatibility = 1.8 // Java version to generate classes for. test { useJUnitPlatform() @@ -122,7 +122,7 @@ dependencies { 'org.apache.httpcomponents:httpclient:4.5.12', //Required for PATCH-Requests - "org.xerial:sqlite-jdbc:3.28.0", + 'org.xerial:sqlite-jdbc:3.39.3.0', "com.github.gwenn:sqlite-dialect:0.1.0", 'io.jsonwebtoken:jjwt-api:0.10.5', 'io.jsonwebtoken:jjwt-impl:0.10.5', diff --git a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentcommunication/AgentCommandManager.java b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentcommunication/AgentCommandManager.java index 710d7aa09c..09e29cffe6 100644 --- a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentcommunication/AgentCommandManager.java +++ b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentcommunication/AgentCommandManager.java @@ -4,7 +4,6 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import lombok.extern.java.Log; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -13,8 +12,6 @@ import rocks.inspectit.ocelot.config.model.InspectitServerSettings; import javax.annotation.PostConstruct; -import java.time.Duration; -import java.util.LinkedList; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutionException; import java.util.concurrent.LinkedBlockingQueue; @@ -82,7 +79,6 @@ public void addCommand(String agentId, Command command) throws ExecutionExceptio public Command getCommand(String agentId, boolean waitForCommand) { try { BlockingQueue commandQueue = agentCommandCache.get(agentId); - Command command; if (waitForCommand) { AgentCommandSettings commandSettings = configuration.getAgentCommand(); @@ -92,7 +88,7 @@ public Command getCommand(String agentId, boolean waitForCommand) { command = commandQueue.poll(); } - if (commandQueue.isEmpty()) { + if (command == null) { agentCommandCache.invalidate(agentId); } return command; diff --git a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentcommunication/handlers/impl/EnvironmentCommandHandler.java b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentcommunication/handlers/impl/EnvironmentCommandHandler.java new file mode 100644 index 0000000000..b082b82ccd --- /dev/null +++ b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentcommunication/handlers/impl/EnvironmentCommandHandler.java @@ -0,0 +1,87 @@ +package rocks.inspectit.ocelot.agentcommunication.handlers.impl; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.async.DeferredResult; +import rocks.inspectit.ocelot.agentcommunication.handlers.CommandHandler; +import rocks.inspectit.ocelot.commons.models.command.Command; +import rocks.inspectit.ocelot.commons.models.command.CommandResponse; +import rocks.inspectit.ocelot.commons.models.command.impl.EnvironmentCommand; +import rocks.inspectit.ocelot.config.model.InspectitServerSettings; + +import java.time.Duration; + +/** + * Handler for the Agent Environment command. + */ +@Slf4j +@Component +public class EnvironmentCommandHandler implements CommandHandler { + + @Autowired + private InspectitServerSettings configuration; + + /** + * Checks if the given {@link Command} is an instance of {@link EnvironmentCommand}. + * + * @param command The command which should be checked. + * + * @return True if the given command is an instance of {@link EnvironmentCommand}. + */ + @Override + public boolean canHandle(Command command) { + return command instanceof EnvironmentCommand; + } + + /** + * Checks if the given {@link CommandResponse} is an instance of {@link EnvironmentCommand.Response}. + * + * @param response The response which should be checked. + * + * @return True if the given response is an instance of {@link EnvironmentCommand.Response}. + */ + @Override + public boolean canHandle(CommandResponse response) { + return response instanceof EnvironmentCommand.Response; + } + + /** + * Prepares an instance of {@link DeferredResult} by setting the Timeout as well as the onTimeout function. + * This onTimeout function sets the {@link ResponseEntity} to the status REQUEST_TIMEOUT. + * + * @param agentId The id of the agent the command is meant for. + * @param command The command to be Executed. + * + * @return An instance of {@link DeferredResult} with a set timeout value and a set timeout function. + */ + @Override + public DeferredResult> prepareResponse(String agentId, Command command) { + if (!canHandle(command)) { + throw new IllegalArgumentException("EnvironmentCommandHandler can only handle commands of type EnvironmentCommand."); + } + + Duration responseTimeout = configuration.getAgentCommand().getResponseTimeout(); + DeferredResult> deferredResult = new DeferredResult<>(responseTimeout.toMillis()); + deferredResult.onTimeout(() -> ResponseEntity.status(HttpStatus.REQUEST_TIMEOUT).build()); + + return deferredResult; + } + + /** + * Takes an instance of {@link CommandResponse} as well as an instance of {@link DeferredResult}. + * Sets the {@link ResponseEntity} of the {@link DeferredResult} according to the + * Environment Information received from the respective Agent. + * + * @param response The {@link CommandResponse} to be handled. + * @param result The {@link DeferredResult} the response should be written in. + */ + @Override + public void handleResponse(CommandResponse response, DeferredResult> result) { + EnvironmentCommand.Response environmentResponse = (EnvironmentCommand.Response) response; + result.setResult(ResponseEntity.ok().body(environmentResponse.getEnvironment())); + } + +} diff --git a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentMetaInformation.java b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentMetaInformation.java index 9a2c93f97a..65d36ba331 100644 --- a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentMetaInformation.java +++ b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentMetaInformation.java @@ -50,6 +50,11 @@ public class AgentMetaInformation { */ private static final String HEADER_VM_VENDOR = HEADER_PREFIX + "vm-vendor"; + /** + * Name of the service states header. + */ + private static final String HEADER_SERVICE_STATES = HEADER_PREFIX + "service-states-map"; + /** * Generates a {@link AgentMetaInformation} instance based on the given map which represents the used HTTP headers. * The headers will be considered to be sent by an agent if the give map contains an entry with key @@ -98,6 +103,11 @@ public static AgentMetaInformation of(Map headers) { */ private String vmVendor; + /** + * The current setting states in a json string + */ + private String serviceStates; + private AgentMetaInformation(Map headers) { Preconditions.checkArgument(StringUtils.isNotBlank(headers.get(HEADER_AGENT_ID)), "It is required that the given map contains an agent header!"); @@ -107,5 +117,6 @@ private AgentMetaInformation(Map headers) { startTime = headers.get(HEADER_START_TIME); vmName = headers.get(HEADER_VM_NAME); vmVendor = headers.get(HEADER_VM_VENDOR); + serviceStates = headers.get(HEADER_SERVICE_STATES); } } diff --git a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatus.java b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatus.java index 59a52df5a8..7469207d7e 100644 --- a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatus.java +++ b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatus.java @@ -4,7 +4,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthState; import java.util.Date; import java.util.Map; @@ -47,5 +47,5 @@ public class AgentStatus { /** * The health status of the agent. */ - private AgentHealth health; + private AgentHealthState healthState; } diff --git a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatusManager.java b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatusManager.java index 6c556e7106..4314ccc470 100644 --- a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatusManager.java +++ b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatusManager.java @@ -1,5 +1,8 @@ package rocks.inspectit.ocelot.agentstatus; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectReader; import com.google.common.annotations.VisibleForTesting; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; @@ -8,6 +11,7 @@ import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.agentconfiguration.AgentConfiguration; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthState; import rocks.inspectit.ocelot.config.model.InspectitServerSettings; import javax.annotation.PostConstruct; @@ -79,18 +83,27 @@ public void notifyAgentConfigurationFetched(Map agentAttributes, } if (headers.containsKey(HEADER_AGENT_HEALTH)) { - AgentHealth agentHealth = AgentHealth.valueOf(headers.get(HEADER_AGENT_HEALTH)); - agentStatus.setHealth(agentHealth); - logHealthIfChanged(statusKey, agentHealth); + ObjectReader objectReader = new ObjectMapper().reader().forType(AgentHealthState.class); + + AgentHealthState agentHealthState = null; + try { + agentHealthState = objectReader.readValue(headers.get(HEADER_AGENT_HEALTH)); + } catch (JsonProcessingException e) { //If this exception occurs we assume the corresponding agent uses the legacy health indicator. + AgentHealth agentHealth = AgentHealth.valueOf(headers.get(HEADER_AGENT_HEALTH)); + agentHealthState = AgentHealthState.defaultState(); + agentHealthState.setHealth(agentHealth); + } + agentStatus.setHealthState(agentHealthState); + logHealthIfChanged(statusKey, agentHealthState); } attributesToAgentStatusCache.put(statusKey, agentStatus); } - private void logHealthIfChanged(Object statusKey, AgentHealth agentHealth) { + private void logHealthIfChanged(Object statusKey, AgentHealthState agentHealth) { AgentStatus lastStatus = attributesToAgentStatusCache.getIfPresent(statusKey); - if (lastStatus == null || lastStatus.getHealth() != agentHealth) { + if (lastStatus == null || lastStatus.getHealthState().getHealth() != agentHealth.getHealth()) { log.info("Health of agent {} changed to {}.", statusKey, agentHealth); } } diff --git a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/agent/AgentController.java b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/agent/AgentController.java index ea3d3a63f9..a1bfafeea4 100644 --- a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/agent/AgentController.java +++ b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/agent/AgentController.java @@ -8,6 +8,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.async.DeferredResult; import rocks.inspectit.ocelot.agentcommunication.AgentCallbackManager; import rocks.inspectit.ocelot.agentcommunication.AgentCommandManager; import rocks.inspectit.ocelot.agentconfiguration.AgentConfiguration; @@ -20,6 +21,7 @@ import java.util.Map; import java.util.UUID; +import java.util.concurrent.ExecutionException; /** * The rest controller providing the interface used by the agent for configuration fetching. @@ -40,6 +42,9 @@ public class AgentController extends AbstractBaseController { @Autowired private AgentCallbackManager agentCallbackManager; + @Autowired + private AgentService agentService; + @ExceptionHandler public void e(Exception e) { e.printStackTrace(); @@ -97,4 +102,17 @@ public ResponseEntity fetchCommand(@RequestHeader Map h return ResponseEntity.ok().body(nextCommand); } } + + /** + * Returns the data for building the downloadable support archive for the agent with the given name in the frontend. + * + * @param attributes the attributes of the agents used to select the appropriate data. + * + * @return The data used in the support archive. + */ + @ApiOperation(value = "Fetch an Agents Data for Downloading a Support Archive", notes = "Bundles useful information for debugging issues raised in support tickets.") + @GetMapping(value = "agent/supportArchive", produces = "application/json") + public DeferredResult> fetchSupportArchive(@ApiParam("The agent attributes used to retrieve the correct data") @RequestParam Map attributes) throws ExecutionException { + return agentService.buildSupportArchive(attributes, configManager); + } } diff --git a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/agent/AgentService.java b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/agent/AgentService.java new file mode 100644 index 0000000000..25fe6ec544 --- /dev/null +++ b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/agent/AgentService.java @@ -0,0 +1,144 @@ +package rocks.inspectit.ocelot.rest.agent; + +import com.google.common.annotations.VisibleForTesting; +import inspectit.ocelot.configdocsgenerator.parsing.ConfigParser; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.context.request.async.DeferredResult; +import rocks.inspectit.ocelot.agentcommunication.AgentCommandDispatcher; +import rocks.inspectit.ocelot.agentconfiguration.AgentConfigurationManager; +import rocks.inspectit.ocelot.commons.models.command.impl.EnvironmentCommand; +import rocks.inspectit.ocelot.commons.models.command.impl.LogsCommand; +import rocks.inspectit.ocelot.config.model.InspectitConfig; +import rocks.inspectit.ocelot.config.model.InspectitServerSettings; + +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * Contains the logic for the retrieval of multiple command-responses and assembling them into one response-object. + * This class was created to keep the logic out of the controller layer and improve readability. + */ +@Service +@Slf4j +public class AgentService { + + @VisibleForTesting + final static String LOG_PRELOADING_DISABLED_MESSAGE = "Logs cannot be retrieved because log preloading (inspectit.log-preloading) is not enabled. To retrieve agent logs, please enable the log preloading."; + + private AgentCommandDispatcher commandDispatcher; + + private InspectitServerSettings configuration; + + private final ConfigParser configParser = new ConfigParser(); + + private final Logger logger = LoggerFactory.getLogger(AgentService.class); + + public AgentService(AgentCommandDispatcher commandDispatcher, InspectitServerSettings configuration) { + this.commandDispatcher = commandDispatcher; + this.configuration = configuration; + } + + public DeferredResult> environment(String agentId) throws ExecutionException { + EnvironmentCommand environmentCommand = new EnvironmentCommand(); + return commandDispatcher.dispatchCommand(agentId, environmentCommand); + } + + public DeferredResult> logs(String agentId) throws ExecutionException { + LogsCommand logsCommand = new LogsCommand(); + return commandDispatcher.dispatchCommand(agentId, logsCommand); + } + + /** + * Method that combines the current configuration, recent logs and environment details of the given agent + * into one response for the purpose of downloading it as an archive. + * This archive is meant to be sent with support requests to help with debugging. + * + * @param attributes - the agent attributes used to select the correct data + * @param configManager - the configmanager for retrieving the current configuration + * + * @return the deferred result containing the different elements of the support archive + * + * @throws ExecutionException - if one of the command executions fails + */ + public DeferredResult> buildSupportArchive(Map attributes, AgentConfigurationManager configManager) throws ExecutionException { + Long responseTimeout = configuration.getAgentCommand().getResponseTimeout().toMillis(); + DeferredResult> composedResult = new DeferredResult>(responseTimeout) {{ + onTimeout(() -> setErrorResult(ResponseEntity.status(HttpStatus.REQUEST_TIMEOUT).build())); + }}; + + SupportArchiveData archiveData = new SupportArchiveData(); + archiveData.currentConfig = configManager.getConfiguration(attributes).getConfigYaml(); + + String agentId = attributes.get("agent-id"); + AtomicInteger commandsLeft = new AtomicInteger(0); + handleCommandResult(environment(agentId), composedResult, commandsLeft, ArchiveElement.ENV, archiveData); + InspectitConfig inspectitConfig = null; + + try { + inspectitConfig = configParser.parseConfig(archiveData.getCurrentConfig()); + } catch (Exception e) { + logger.error("Could not parse Config", e); + } + + if (inspectitConfig != null && inspectitConfig.getLogPreloading() != null && inspectitConfig.getLogPreloading() + .isEnabled()) { + handleCommandResult(logs(agentId), composedResult, commandsLeft, ArchiveElement.LOG, archiveData); + } else { + archiveData.logs = LOG_PRELOADING_DISABLED_MESSAGE; + } + + return composedResult; + } + + /** + * @param command - the command that was dispatched + * @param composedResult - the composed result that is being built + * @param commandsLeft - the number of commands dispatched and not yet resolved + * @param element - enum value that shows for which field the commandResponse is meant + * @param archiveData - the archiveData object that is being built + */ + private void handleCommandResult(DeferredResult> command, DeferredResult> composedResult, AtomicInteger commandsLeft, ArchiveElement element, SupportArchiveData archiveData) { + commandsLeft.incrementAndGet(); + command.setResultHandler(result -> { + if (result instanceof ResponseEntity) { + int open = commandsLeft.decrementAndGet(); + switch (element) { + case ENV: + ResponseEntity envResponse = (ResponseEntity) result; + archiveData.environmentDetails = envResponse.getBody(); + break; + case LOG: + ResponseEntity logResponse = (ResponseEntity) result; + archiveData.logs = logResponse.getBody(); + break; + } + if (open == 0) { + composedResult.setResult(ResponseEntity.ok().body(archiveData)); + } + } else { + composedResult.setResult(ResponseEntity.ok().body(result)); + } + }); + } + + @Data + static class SupportArchiveData { + + private String currentConfig; + + private EnvironmentCommand.EnvironmentDetail environmentDetails; + + private String logs; + } + + private enum ArchiveElement { + ENV, LOG + } +} diff --git a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/command/AgentCommandController.java b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/command/AgentCommandController.java index 8af60a7c2e..00808c72f1 100644 --- a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/command/AgentCommandController.java +++ b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/command/AgentCommandController.java @@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.context.request.async.DeferredResult; import rocks.inspectit.ocelot.agentcommunication.AgentCommandDispatcher; +import rocks.inspectit.ocelot.commons.models.command.impl.EnvironmentCommand; import rocks.inspectit.ocelot.commons.models.command.impl.ListClassesCommand; import rocks.inspectit.ocelot.commons.models.command.impl.LogsCommand; import rocks.inspectit.ocelot.commons.models.command.impl.PingCommand; @@ -49,4 +50,10 @@ public DeferredResult> listClasses(@RequestParam(value = "agen ListClassesCommand listClassesCommand = new ListClassesCommand(query); return commandDispatcher.dispatchCommand(agentId, listClassesCommand); } + + @GetMapping(value = "command/environment") + public DeferredResult> environment(@RequestParam(value = "agent-id") String agentId) throws ExecutionException { + EnvironmentCommand environmentCommand = new EnvironmentCommand(); + return commandDispatcher.dispatchCommand(agentId, environmentCommand); + } } diff --git a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/yamlhighlighter/HighlightRulesMapController.java b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/yamlhighlighter/HighlightRulesMapController.java index 84df40a51a..30a959272e 100644 --- a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/yamlhighlighter/HighlightRulesMapController.java +++ b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/rest/yamlhighlighter/HighlightRulesMapController.java @@ -3,24 +3,24 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.CaseFormat; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; import org.springframework.util.ReflectionUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import rocks.inspectit.ocelot.config.model.InspectitConfig; +import rocks.inspectit.ocelot.config.model.exporters.TransportProtocol; import rocks.inspectit.ocelot.config.model.instrumentation.actions.GenericActionSettings; import rocks.inspectit.ocelot.rest.AbstractBaseController; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @RestController +@Slf4j public class HighlightRulesMapController extends AbstractBaseController { @VisibleForTesting @@ -166,7 +166,7 @@ private void generateMapCollections(Map innerMap, Class conte * @return List of names of all possible values for the enum. */ private List extractEnumValues(Class currentEnum) { - return Arrays.stream(currentEnum.getFields()).map(Field::getName).collect(Collectors.toList()); + return Arrays.stream(currentEnum.getEnumConstants()).map(Object::toString).collect(Collectors.toList()); } @ApiOperation(value = "Get JSON for Highlight Rules Generation", notes = "") diff --git a/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/agentcommunication/AgentCommandManagerTest.java b/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/agentcommunication/AgentCommandManagerTest.java index f043847345..3f4362d287 100644 --- a/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/agentcommunication/AgentCommandManagerTest.java +++ b/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/agentcommunication/AgentCommandManagerTest.java @@ -12,15 +12,14 @@ import rocks.inspectit.ocelot.config.model.InspectitServerSettings; import java.time.Duration; -import java.util.List; -import java.util.LinkedList; import java.util.Map; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutionException; import java.util.concurrent.LinkedBlockingQueue; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) public class AgentCommandManagerTest { @@ -99,6 +98,8 @@ public void commandPresent() { agentCommandManager.agentCommandCache.put(agentId, list); Command result = agentCommandManager.getCommand(agentId, false); + // simulate periodic command fetch that invalidates the command-cache + agentCommandManager.getCommand(agentId, false); assertThat(result).isEqualTo(mockAgentCommand); assertThat(agentCommandManager.agentCommandCache.asMap()).isEmpty(); diff --git a/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/agentcommunication/handlers/impl/EnvironmentCommandHandlerTest.java b/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/agentcommunication/handlers/impl/EnvironmentCommandHandlerTest.java new file mode 100644 index 0000000000..30467c2d24 --- /dev/null +++ b/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/agentcommunication/handlers/impl/EnvironmentCommandHandlerTest.java @@ -0,0 +1,75 @@ +package rocks.inspectit.ocelot.agentcommunication.handlers.impl; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.ResponseEntity; +import org.springframework.web.context.request.async.DeferredResult; +import rocks.inspectit.ocelot.commons.models.command.Command; +import rocks.inspectit.ocelot.commons.models.command.impl.EnvironmentCommand; +import rocks.inspectit.ocelot.config.model.InspectitServerSettings; + +import java.time.Duration; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class EnvironmentCommandHandlerTest { + + @InjectMocks + EnvironmentCommandHandler environmentCommandHandler; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private InspectitServerSettings configuration; + + @Nested + class PrepareResponse { + + @Test + public void cantHandleCommand() { + Command command = null; + String agentId = "test-id"; + + try { + environmentCommandHandler.prepareResponse(agentId, command); + } catch (IllegalArgumentException e) { + assertThat(e.getMessage()).isEqualTo("EnvironmentCommandHandler can only handle commands of type EnvironmentCommand."); + } + + } + + @Test + public void preparesResponse() { + when(configuration.getAgentCommand().getResponseTimeout()).thenReturn(Duration.ofMinutes(1)); + EnvironmentCommand command = new EnvironmentCommand(); + String agentId = "test-id"; + + DeferredResult> result = environmentCommandHandler.prepareResponse(agentId, command); + + assertThat(result).isNotNull(); + + } + + } + + @Nested + class HandleResponse { + + @Test + public void handlesResponse() { + EnvironmentCommand.Response mockResponse = mock(EnvironmentCommand.Response.class); + DeferredResult> result = new DeferredResult<>(); + + environmentCommandHandler.handleResponse(mockResponse, result); + + assertThat(result.getResult()).isEqualTo(ResponseEntity.ok().build()); + } + } + +} diff --git a/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/agent/AgentControllerIntTest.java b/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/agent/AgentControllerIntTest.java index b8abb23c34..9abb5193ec 100644 --- a/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/agent/AgentControllerIntTest.java +++ b/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/agent/AgentControllerIntTest.java @@ -1,15 +1,23 @@ package rocks.inspectit.ocelot.rest.agent; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import rocks.inspectit.ocelot.IntegrationTestBase; import rocks.inspectit.ocelot.commons.models.command.Command; -import rocks.inspectit.ocelot.commons.models.command.impl.PingCommand; import rocks.inspectit.ocelot.commons.models.command.CommandResponse; +import rocks.inspectit.ocelot.commons.models.command.impl.EnvironmentCommand; +import rocks.inspectit.ocelot.commons.models.command.impl.LogsCommand; +import rocks.inspectit.ocelot.commons.models.command.impl.PingCommand; +import rocks.inspectit.ocelot.config.model.AgentCommandSettings; +import rocks.inspectit.ocelot.config.model.InspectitServerSettings; +import java.time.Duration; +import java.util.Collections; import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -19,6 +27,14 @@ public class AgentControllerIntTest extends IntegrationTestBase { + @Autowired + InspectitServerSettings serverSettings; + + @BeforeEach + private void resetServerSettings() { + serverSettings.setAgentCommand(AgentCommandSettings.builder().build()); + } + private ResponseEntity fetchCommand(String agentId, CommandResponse response, boolean wait) { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("x-ocelot-agent-id", agentId); @@ -32,13 +48,71 @@ private ResponseEntity fetchCommand(String agentId, CommandResponse res return rest.postForEntity(url, request, Command.class); } + @Test + public void shouldFetchSupportArchive() throws InterruptedException { + + String agentId = "testAgent"; + String testLog = "Logs cannot be retrieved because log preloading (inspectit.log-preloading) is not enabled. To retrieve agent logs, please enable the log preloading."; + EnvironmentCommand.EnvironmentDetail envDetail = new EnvironmentCommand.EnvironmentDetail() {{ + setEnvironmentVariables(Collections.emptyMap()); + setSystemProperties(System.getProperties()); + setJvmArguments(Collections.emptyList()); + }}; + AgentService.SupportArchiveData expectedResult = new AgentService.SupportArchiveData() {{ + setCurrentConfig(""); + setEnvironmentDetails(envDetail); + setLogs(testLog); + }}; + + new Thread(() -> { + ResponseEntity resultFirstCommand = fetchCommand(agentId, null, true); + + EnvironmentCommand envCommand = (EnvironmentCommand) resultFirstCommand.getBody(); + assertThat(envCommand).isNotNull(); + + EnvironmentCommand.Response envResponse = new EnvironmentCommand.Response(envDetail); + envResponse.setCommandId(envCommand.getCommandId()); + + ResponseEntity resultSecondCommand = fetchCommand(agentId, envResponse, true); + + LogsCommand logsCommand = (LogsCommand) resultSecondCommand.getBody(); + assertThat(logsCommand).isNotNull(); + + LogsCommand.Response logsResponse = new LogsCommand.Response(testLog); + logsResponse.setCommandId(logsCommand.getCommandId()); + fetchCommand(agentId, logsResponse, false); + }).start(); + + AtomicReference> archiveResult = new AtomicReference<>(); + new Thread(() -> archiveResult.set(authRest.getForEntity("/api/v1/agent/supportArchive?agent-id=" + agentId, AgentService.SupportArchiveData.class))).start(); + + await().atMost(3, TimeUnit.SECONDS).until(archiveResult::get, Objects::nonNull); + assertThat(archiveResult.get().getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(archiveResult.get().getBody()).isEqualTo(expectedResult); + } + + @Test + public void shouldTimeoutWhileFetchingSupportArchive() { + serverSettings.getAgentCommand().setResponseTimeout(Duration.ofSeconds(1)); + serverSettings.getAgentCommand().setCommandTimeout(Duration.ofSeconds(1)); + + String agentId = "timeoutTestAgent"; + + AtomicReference> archiveResult = new AtomicReference<>(); + new Thread(() -> archiveResult.set(authRest.getForEntity("/api/v1/agent/supportArchive?agent-id=" + agentId, AgentService.SupportArchiveData.class))).start(); + + await().atMost(5, TimeUnit.SECONDS).until(archiveResult::get, Objects::nonNull); + assertThat(archiveResult.get().getStatusCode()).isEqualTo(HttpStatus.REQUEST_TIMEOUT); + assertThat(archiveResult.get().getBody()).isNull(); + } + @Test public void fetchCommand() throws InterruptedException { ResponseEntity result = fetchCommand("drogon ", null, false); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT); new Thread(() -> { - authRest.getForEntity("/api/v1/command/ping?agent-id=drogon", Void.class); + authRest.getForEntity("/api/v1/command/ping?agent-id=drogon", Void.class); }).start(); Thread.sleep(1000); diff --git a/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/agent/AgentServiceTest.java b/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/agent/AgentServiceTest.java new file mode 100644 index 0000000000..45e0580a79 --- /dev/null +++ b/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/agent/AgentServiceTest.java @@ -0,0 +1,134 @@ +package rocks.inspectit.ocelot.rest.agent; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.context.request.async.DeferredResult; +import rocks.inspectit.ocelot.agentconfiguration.AgentConfiguration; +import rocks.inspectit.ocelot.agentconfiguration.AgentConfigurationManager; +import rocks.inspectit.ocelot.commons.models.command.impl.EnvironmentCommand; +import rocks.inspectit.ocelot.config.model.AgentCommandSettings; +import rocks.inspectit.ocelot.config.model.InspectitServerSettings; + +import java.lang.management.ManagementFactory; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +/** + * Unit Test for the building process of the {@link rocks.inspectit.ocelot.rest.agent.AgentService.SupportArchiveData support archive} in the {@link AgentService} + */ +@ExtendWith(MockitoExtension.class) +public class AgentServiceTest { + + @InjectMocks + AgentService cut; + + @Mock + AgentConfigurationManager configManager; + + @Mock + InspectitServerSettings configuration; + + @Nested + public class BuildSupportArchive { + + AgentService serviceSpy; + + AgentConfiguration config; + + Map attributes; + + String logs; + + EnvironmentCommand.EnvironmentDetail environmentDetail; + + AgentService.SupportArchiveData expectedResult; + + public void setupTestData(boolean logPreloadingEnabled) { + serviceSpy = Mockito.spy(cut); + + //set config + config = AgentConfiguration.builder() + .configYaml(String.format("inspectit.log-preloading: {enabled: %b}", logPreloadingEnabled)) + .build(); + + //set attributes + attributes = new HashMap() {{ + put("agent-id", "test"); + }}; + + //set logs expected result + logs = logPreloadingEnabled ? "logs: thisisalog" : AgentService.LOG_PRELOADING_DISABLED_MESSAGE; + + //set environment expected result + environmentDetail = new EnvironmentCommand.EnvironmentDetail() {{ + setEnvironmentVariables(System.getenv()); + setSystemProperties(System.getProperties()); + setJvmArguments(ManagementFactory.getRuntimeMXBean().getInputArguments()); + }}; + + //create expected result object + expectedResult = new AgentService.SupportArchiveData() {{ + setEnvironmentDetails(environmentDetail); + setLogs(logs); + setCurrentConfig(config.getConfigYaml()); + }}; + } + + public void setupTestObject(boolean logPreloadingEnabled) throws ExecutionException { + DeferredResult> envResult = new DeferredResult>() {{ + setResult(ResponseEntity.ok().body(environmentDetail)); + }}; + + when(configuration.getAgentCommand()).thenReturn(new AgentCommandSettings()); + when(configManager.getConfiguration(anyMap())).thenReturn(config); + doReturn(envResult).when(serviceSpy).environment(anyString()); + + if (logPreloadingEnabled) { + DeferredResult> logsResult = new DeferredResult>() {{ + setResult(ResponseEntity.ok().body(logs)); + }}; + + doReturn(logsResult).when(serviceSpy).logs(anyString()); + } + } + + @Test + public void shouldBuildSupportArchive() throws ExecutionException { + setupTestData(true); + setupTestObject(true); + + DeferredResult> actualResult = serviceSpy.buildSupportArchive(attributes, configManager); + ResponseEntity unwrappedResult = (ResponseEntity) actualResult.getResult(); + + assertThat(unwrappedResult.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(unwrappedResult.getBody()).isEqualTo(expectedResult); + } + + @Test + public void logPreloadingDisabled() throws ExecutionException { + setupTestData(false); + setupTestObject(false); + + DeferredResult> actualResult = serviceSpy.buildSupportArchive(attributes, configManager); // Result of calling the method + ResponseEntity unwrappedResult = (ResponseEntity) actualResult.getResult(); + AgentService.SupportArchiveData supportArchiveData = (AgentService.SupportArchiveData) unwrappedResult.getBody(); + + assertThat(unwrappedResult.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(supportArchiveData).isEqualTo(expectedResult); + assertThat(supportArchiveData.getLogs()).isEqualTo(AgentService.LOG_PRELOADING_DISABLED_MESSAGE); + verify(serviceSpy, never()).logs(anyString()); + } + } +} diff --git a/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/yamlhighlighter/HighlightRulesMapControllerIntTest.java b/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/yamlhighlighter/HighlightRulesMapControllerIntTest.java index 982e2244ca..6021b5c9b1 100644 --- a/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/yamlhighlighter/HighlightRulesMapControllerIntTest.java +++ b/components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/rest/yamlhighlighter/HighlightRulesMapControllerIntTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.junit.jupiter.api.Nested; @@ -10,9 +11,11 @@ import org.springframework.http.ResponseEntity; import rocks.inspectit.ocelot.IntegrationTestBase; import rocks.inspectit.ocelot.config.model.InspectitConfig; +import rocks.inspectit.ocelot.config.model.exporters.TransportProtocol; import rocks.inspectit.ocelot.config.model.instrumentation.actions.GenericActionSettings; import rocks.inspectit.ocelot.config.model.instrumentation.data.PropagationMode; import rocks.inspectit.ocelot.config.model.instrumentation.scope.AdvancedScopeSettings; +import springfox.documentation.spring.web.json.Json; import java.util.List; import java.util.Map; @@ -27,14 +30,15 @@ public class HighlightRulesMapControllerIntTest extends IntegrationTestBase { @Autowired HighlightRulesMapController controller; - static JsonParser jsonParser = new JsonParser(); - @Nested public class GetHighlightingRulesMapTest { @Test void testGetHighlightingRulesMap() { - final String JSON = controller.generateMap(InspectitConfig.class).toString(); + JsonParser jsonParser = new JsonParser(); + Gson gson = new Gson(); + + final String JSON = gson.toJson(controller.generateMap(InspectitConfig.class)); // get expected JSON JsonObject expected = jsonParser.parse(JSON).getAsJsonObject(); @@ -43,7 +47,8 @@ void testGetHighlightingRulesMap() { ResponseEntity result = authRest.getForEntity("/api/v1/highlight-rules", Object.class); // parse to JSON - JsonObject obj = jsonParser.parse(result.getBody().toString()).getAsJsonObject(); + final String RESPONSE_JSON = gson.toJson(result.getBody()); + JsonObject obj = jsonParser.parse(RESPONSE_JSON).getAsJsonObject(); // assert that the returned body is a JsonObject and that it equals the expected JSON assertThat(obj.isJsonObject()).isTrue(); @@ -93,8 +98,11 @@ void withTestClass() throws JsonProcessingException { String.format("\"advanced-scope-settings\":{\"%s\":\"%s\", \"%s\":%s},", HighlightRulesMapController.KEY_TYPE, HighlightRulesMapController.VALUE_TYPE_OBJECT, HighlightRulesMapController.KEY_OBJECT_ATTRIBUTES, advancedScopeSettingsExpected) + - String.format("\"a-boolean\":{\"%s\":\"%s\"}}", - HighlightRulesMapController.KEY_TYPE, HighlightRulesMapController.VALUE_TYPE_TEXT); + String.format("\"a-boolean\":{\"%s\":\"%s\"},", + HighlightRulesMapController.KEY_TYPE, HighlightRulesMapController.VALUE_TYPE_TEXT)+ + String.format("\"protocol\":{\"%s\":\"%s\", \"%s\": [\"\", \"grpc\", \"http/thrift\", \"http/protobuf\"]}}", + HighlightRulesMapController.KEY_TYPE, HighlightRulesMapController.VALUE_TYPE_ENUM, + HighlightRulesMapController.KEY_ENUM_VALUES); Map expected = new ObjectMapper().readValue(expectedJson, Map.class); @@ -142,5 +150,7 @@ private static class TestClass{ Boolean aBoolean; + TransportProtocol protocol; + } } diff --git a/inspectit-ocelot-agent/build.gradle b/inspectit-ocelot-agent/build.gradle index 90f83bf47e..0e5acaf220 100644 --- a/inspectit-ocelot-agent/build.gradle +++ b/inspectit-ocelot-agent/build.gradle @@ -16,7 +16,10 @@ test { } group = 'rocks.inspectit.ocelot' -sourceCompatibility = 1.8 + +sourceCompatibility = 1.8 // Java version compatibility to use when compiling Java source. +targetCompatibility = 1.8 // Java version to generate classes for. + configurations { opentelemetry diff --git a/inspectit-ocelot-agent/src/main/java/rocks/inspectit/ocelot/agent/AgentMain.java b/inspectit-ocelot-agent/src/main/java/rocks/inspectit/ocelot/agent/AgentMain.java index 267e11e213..ec2428ba89 100644 --- a/inspectit-ocelot-agent/src/main/java/rocks/inspectit/ocelot/agent/AgentMain.java +++ b/inspectit-ocelot-agent/src/main/java/rocks/inspectit/ocelot/agent/AgentMain.java @@ -44,6 +44,10 @@ public class AgentMain { private static final String PUBLISH_OPEN_TELEMETRY_TO_BOOTSTRAP_PROPERTY = "inspectit.publishOpenTelemetryToBootstrap"; + private static final String ASYNC_INSTRUMENTATION_PROPERTY = "inspectit.instrumentation.internal.async"; + + private static final String ASYNC_INSTRUMENTATION_ENV_PROPERTY = "INSPECTIT_INSTRUMENTATION_INTERNAL_ASYNC"; + /** * Main method for attaching the agent itself to a running JVM. * @@ -61,11 +65,16 @@ public static void main(String[] args) { AgentAttacher.attach(Integer.parseInt(args[0]), agentProperties); } + // invoked if agent is started after the instrumented application public static void agentmain(String agentArgs, Instrumentation inst) { //TODO: currently replacing the agent does not really work as all Agent versions share the same namespace in the same classpath + if (!isAsyncInstrumentationEnabled()) { + System.out.println(ASYNC_INSTRUMENTATION_PROPERTY + " and " + ASYNC_INSTRUMENTATION_ENV_PROPERTY + " are ignored when when attaching agent to a running application!"); + } startAgent(agentArgs, inst, true); } + // invoked if agent is started before the instrumented application public static void premain(String agentArgs, Instrumentation inst) { boolean loadOpenTelemetryJarToBootstrap = null != System.getProperty(PUBLISH_OPEN_CENSUS_TO_BOOTSTRAP_PROPERTY) ? "true".equalsIgnoreCase(System.getProperty(PUBLISH_OPEN_CENSUS_TO_BOOTSTRAP_PROPERTY)) : "true".equalsIgnoreCase(System.getProperty(PUBLISH_OPEN_TELEMETRY_TO_BOOTSTRAP_PROPERTY)); // check for deprecated JVM property @@ -79,8 +88,16 @@ public static void premain(String agentArgs, Instrumentation inst) { inst.appendToBootstrapClassLoaderSearch(new JarFile(otelJarFile.toFile())); } - // we make sure that the startup of inspectIT is asynchronous - new Thread(() -> startAgent(agentArgs, inst, !loadOpenTelemetryJarToBootstrap)).start(); + if (isAsyncInstrumentationEnabled()) { + // we make sure that the startup of inspectIT is asynchronous + new Thread(() -> startAgent(agentArgs, inst, !loadOpenTelemetryJarToBootstrap)).start(); + } else { + String javaVersion = System.getProperty("java.version"); + if (javaVersion.startsWith("1.8")) { + System.err.println("Asynchronous instrumentation is disabled in a pre Java 9 environment! This results in a significant boot time performance degradation! See: https://bugs.openjdk.java.net/browse/JDK-7018422"); + } + startAgent(agentArgs, inst, !loadOpenTelemetryJarToBootstrap); + } } catch (Exception e) { System.err.println("Error starting inspectIT Agent!"); e.printStackTrace(); @@ -97,6 +114,11 @@ private static void startAgent(String agentArgs, Instrumentation inst, boolean i } } + private static boolean isAsyncInstrumentationEnabled() { + String isAsyncInstrumentationPropertyValue = null != System.getProperty(ASYNC_INSTRUMENTATION_PROPERTY) ? System.getProperty(ASYNC_INSTRUMENTATION_PROPERTY) : System.getenv(ASYNC_INSTRUMENTATION_ENV_PROPERTY); + return null == isAsyncInstrumentationPropertyValue || "true".equalsIgnoreCase(isAsyncInstrumentationPropertyValue); + } + /** * Loads {@link #INSPECTIT_BOOTSTRAP_JAR_PATH} with the bootstrap classloader and @link {@link #INSPECTIT_CORE_JAR_PATH} with a new inspectIT loader. * @@ -147,6 +169,10 @@ private static Path copyResourceToTempJarFile(String resourcePath, String prefix */ public static class InspectITClassLoader extends URLClassLoader { + static { + ClassLoader.registerAsParallelCapable(); + } + InspectITClassLoader(URL[] urls) { super(urls, findParentClassLoader()); } diff --git a/inspectit-ocelot-bootstrap/build.gradle b/inspectit-ocelot-bootstrap/build.gradle index 117a5aa110..a42e6a00d6 100644 --- a/inspectit-ocelot-bootstrap/build.gradle +++ b/inspectit-ocelot-bootstrap/build.gradle @@ -16,8 +16,8 @@ test { } } -sourceCompatibility = 1.8 - +sourceCompatibility = 1.8 // Java version compatibility to use when compiling Java source. +targetCompatibility = 1.8 // Java version to generate classes for. jar { archiveName = "${project.name}.jar" diff --git a/inspectit-ocelot-bootstrap/src/main/java/rocks/inspectit/ocelot/bootstrap/IAgent.java b/inspectit-ocelot-bootstrap/src/main/java/rocks/inspectit/ocelot/bootstrap/IAgent.java index 56f1cefce7..b7621ed729 100644 --- a/inspectit-ocelot-bootstrap/src/main/java/rocks/inspectit/ocelot/bootstrap/IAgent.java +++ b/inspectit-ocelot-bootstrap/src/main/java/rocks/inspectit/ocelot/bootstrap/IAgent.java @@ -42,4 +42,5 @@ public interface IAgent { * @return string representing when the date the agent has been built */ String getBuildDate(); + } diff --git a/inspectit-ocelot-config/build.gradle b/inspectit-ocelot-config/build.gradle index 6c5a6e1d7a..d72d745304 100644 --- a/inspectit-ocelot-config/build.gradle +++ b/inspectit-ocelot-config/build.gradle @@ -15,8 +15,8 @@ repositories { } group = 'rocks.inspectit.ocelot' -sourceCompatibility = 1.8 - +sourceCompatibility = 1.8 // Java version compatibility to use when compiling Java source. +targetCompatibility = 1.8 // Java version to generate classes for. dependencies { compileOnly "org.projectlombok:lombok:${lombokVersion}" annotationProcessor "org.projectlombok:lombok:${lombokVersion}" @@ -32,7 +32,7 @@ dependencies { 'org.apache.commons:commons-lang3:3.9', 'commons-io:commons-io:2.5', 'com.fasterxml.jackson.core:jackson-databind:2.8.9', - + 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.0', // logging "ch.qos.logback:logback-classic:${logbackVersion}", ) @@ -44,6 +44,9 @@ dependencies { // the api is included as compile only because the open census api has to be decoupled // from the inspectIT core to allow it to be pushed to the bootstrap compileOnly ( - "io.opencensus:opencensus-api:${openCensusVersion}" + "io.opencensus:opencensus-api:${openCensusVersion}", + // OpenTelemetry + platform("io.opentelemetry:opentelemetry-bom-alpha:${openTelemetryAlphaVersion}"), + "io.opentelemetry:opentelemetry-sdk-metrics", ) } \ No newline at end of file diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/Command.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/Command.java index 51f92dd076..f81cef7f3e 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/Command.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/Command.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import lombok.AllArgsConstructor; import lombok.Data; +import rocks.inspectit.ocelot.commons.models.command.impl.EnvironmentCommand; import rocks.inspectit.ocelot.commons.models.command.impl.ListClassesCommand; import rocks.inspectit.ocelot.commons.models.command.impl.PingCommand; import rocks.inspectit.ocelot.commons.models.command.impl.LogsCommand; @@ -20,7 +21,8 @@ @JsonSubTypes(value = { @JsonSubTypes.Type(name = PingCommand.TYPE_IDENTIFIER, value = PingCommand.class), @JsonSubTypes.Type(name = ListClassesCommand.TYPE_IDENTIFIER, value = ListClassesCommand.class), - @JsonSubTypes.Type(name = LogsCommand.TYPE_IDENTIFIER, value = LogsCommand.class) + @JsonSubTypes.Type(name = LogsCommand.TYPE_IDENTIFIER, value = LogsCommand.class), + @JsonSubTypes.Type(name = EnvironmentCommand.TYPE_IDENTIFIER, value = EnvironmentCommand.class) }) public abstract class Command { diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/CommandResponse.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/CommandResponse.java index 5e70dd954d..393726bc34 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/CommandResponse.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/CommandResponse.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import rocks.inspectit.ocelot.commons.models.command.impl.EnvironmentCommand; import rocks.inspectit.ocelot.commons.models.command.impl.ListClassesCommand; import rocks.inspectit.ocelot.commons.models.command.impl.LogsCommand; import rocks.inspectit.ocelot.commons.models.command.impl.PingCommand; @@ -22,6 +23,7 @@ @JsonSubTypes.Type(name = PingCommand.TYPE_IDENTIFIER, value = PingCommand.Response.class), @JsonSubTypes.Type(name = ListClassesCommand.TYPE_IDENTIFIER, value = ListClassesCommand.Response.class), @JsonSubTypes.Type(name = LogsCommand.TYPE_IDENTIFIER, value = LogsCommand.Response.class), + @JsonSubTypes.Type(name = EnvironmentCommand.TYPE_IDENTIFIER, value = EnvironmentCommand.Response.class), }) public abstract class CommandResponse { diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/impl/EnvironmentCommand.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/impl/EnvironmentCommand.java new file mode 100644 index 0000000000..c9c5009f0b --- /dev/null +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/command/impl/EnvironmentCommand.java @@ -0,0 +1,50 @@ +package rocks.inspectit.ocelot.commons.models.command.impl; + +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import rocks.inspectit.ocelot.commons.models.command.Command; +import rocks.inspectit.ocelot.commons.models.command.CommandResponse; + +import java.util.List; +import java.util.Map; +import java.util.Properties; + +/** + * Represents an Environment-Command. Environment commands are used to receive the details of a certain agent. + */ +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class EnvironmentCommand extends Command { + + /** + * Type identifier for JSON serialization. + */ + public static final String TYPE_IDENTIFIER = "environment"; + + /** + * Represents a response to the {@link EnvironmentCommand}. + */ + @Data + @NoArgsConstructor + @AllArgsConstructor + @EqualsAndHashCode(callSuper = true) + public static class Response extends CommandResponse { + private EnvironmentDetail environment; + } + + /** + * Represents the structure of the returned environment details + */ + @Data + public static class EnvironmentDetail { + @JsonPropertyOrder(alphabetic=true) + private Map environmentVariables; + @JsonPropertyOrder(alphabetic=true) + private Properties systemProperties; + private List jvmArguments; + } +} diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthIncident.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthIncident.java new file mode 100644 index 0000000000..610476f4ad --- /dev/null +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthIncident.java @@ -0,0 +1,32 @@ +package rocks.inspectit.ocelot.commons.models.health; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AgentHealthIncident implements Comparable{ + + private String time; + private AgentHealth health; + private String source; + private String message; + private boolean changedHealth; + + public static AgentHealthIncident getNoneIncident() { + return new AgentHealthIncident(LocalDateTime.now().toString(), AgentHealth.OK, "", "", false); + } + + @Override + public int compareTo(Object o) { + if(!(o instanceof AgentHealthIncident)) { + return 1; + } + AgentHealthIncident healthIncident = (AgentHealthIncident) o; + return this.getHealth().compareTo(healthIncident.getHealth()); + } +} diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthState.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthState.java new file mode 100644 index 0000000000..6a190be850 --- /dev/null +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthState.java @@ -0,0 +1,23 @@ +package rocks.inspectit.ocelot.commons.models.health; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collections; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AgentHealthState { + + private AgentHealth health; + private String source; + private String message; + private List history; + + public static AgentHealthState defaultState() { + return new AgentHealthState(AgentHealth.OK, "", "", Collections.emptyList()); + } +} diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/InspectitConfig.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/InspectitConfig.java index 4a28f6ff9d..6e1b090b1f 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/InspectitConfig.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/InspectitConfig.java @@ -93,7 +93,7 @@ public class InspectitConfig { * Settings for the self monitoring. */ @Valid - private SelfMonitoringSettings selfMonitoring; + private SelfMonitoringSettings selfMonitoring = new SelfMonitoringSettings(); /** * Settings for the log preloading. diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/CompressionMethod.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/CompressionMethod.java new file mode 100644 index 0000000000..d28436e237 --- /dev/null +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/CompressionMethod.java @@ -0,0 +1,13 @@ +package rocks.inspectit.ocelot.config.model.exporters; + +/** + * The compression method used in OTLP exporters. + */ +public enum CompressionMethod { + GZIP, NONE; + + @Override + public String toString() { + return this.name().toLowerCase(); + } +} diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/metrics/OtlpMetricsExporterSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/metrics/OtlpMetricsExporterSettings.java index 5c2e98592f..2bdcdcfc67 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/metrics/OtlpMetricsExporterSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/metrics/OtlpMetricsExporterSettings.java @@ -1,12 +1,15 @@ package rocks.inspectit.ocelot.config.model.exporters.metrics; +import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.validator.constraints.time.DurationMin; +import rocks.inspectit.ocelot.config.model.exporters.CompressionMethod; import rocks.inspectit.ocelot.config.model.exporters.ExporterEnabledState; import rocks.inspectit.ocelot.config.model.exporters.TransportProtocol; import java.time.Duration; +import java.util.Map; /** * Settings for {@link rocks.inspectit.ocelot.core.exporter.OtlpMetricsExporterService} @@ -34,4 +37,26 @@ public class OtlpMetricsExporterSettings { @DurationMin(millis = 1) private Duration exportInterval; + /** + * The time period over which metrics should be aggregated. + * Valid values are CUMULATIVE and DELTA + */ + private AggregationTemporality preferredTemporality; + + /** + * Key-value pairs to be used as headers associated with gRPC or HTTP requests. + */ + private Map headers; + + + /** + * The compression method. + */ + private CompressionMethod compression; + + /** + * Maximum time the OTLP exporter will wait for each batch export. + */ + @DurationMin(millis = 1) + private Duration timeout; } diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/trace/OtlpTraceExporterSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/trace/OtlpTraceExporterSettings.java index 6f745744df..07202e780c 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/trace/OtlpTraceExporterSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/exporters/trace/OtlpTraceExporterSettings.java @@ -2,9 +2,14 @@ import lombok.Data; import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.time.DurationMin; +import rocks.inspectit.ocelot.config.model.exporters.CompressionMethod; import rocks.inspectit.ocelot.config.model.exporters.ExporterEnabledState; import rocks.inspectit.ocelot.config.model.exporters.TransportProtocol; +import java.time.Duration; +import java.util.Map; + /** * Settings for {@link rocks.inspectit.ocelot.core.exporter.OtlpTraceExporterService} */ @@ -25,4 +30,19 @@ public class OtlpTraceExporterSettings { */ private TransportProtocol protocol; + /** + * Key-value pairs to be used as headers associated with gRPC or HTTP requests. + */ + private Map headers; + + /** + * The compression method. + */ + private CompressionMethod compression; + + /** + * Maximum time the OTLP exporter will wait for each batch export. + */ + @DurationMin(millis = 1) + private Duration timeout; } diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/instrumentation/InternalSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/instrumentation/InternalSettings.java index aa389e12e9..fd02d4eeab 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/instrumentation/InternalSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/instrumentation/InternalSettings.java @@ -36,7 +36,7 @@ public class InternalSettings { /** * Defines how often the Agent should check if new classes have been defined. - * This check is only performed if Classloader.defineClass was called less than {@link #maxClassDefinitionDelay} ago. + * This check is only performed if Classloader.defineClass was called less than {@link #numClassDiscoveryTrials} ago. */ private Duration newClassDiscoveryInterval; @@ -57,4 +57,11 @@ public class InternalSettings { */ private boolean recyclingOldActionClasses = true; + /** + * Flag enables asynchronous instrumentation. + *

+ * Important: If disabled in java version lower than 9, this results in a significant boot time performance degradation! See: JDK-7018422" + */ + private boolean async = true; + } diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/instrumentation/rules/InstrumentationRuleSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/instrumentation/rules/InstrumentationRuleSettings.java index c51c97d138..172e346a83 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/instrumentation/rules/InstrumentationRuleSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/instrumentation/rules/InstrumentationRuleSettings.java @@ -36,6 +36,16 @@ public class InstrumentationRuleSettings { */ private boolean enabled = true; + /** + * Defines whether this is a default rule. All configuration rules shipped with the agent are marked as default rules. + */ + private boolean defaultRule = false; + + /** + * Defines whether the actions executed in the rules scope should be traced for debug purposes. + */ + private boolean enableActionTracing = false; + /** * Defines which scope is used by this rule and whether it is enabled or not. The map's key represents the id of a scope. * The value specifies whether it is enabled or not. diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java index 79cf0ae182..7f740bbf85 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java @@ -36,6 +36,7 @@ public enum MeasureType { @NotBlank private String unit; + //TODO Make this defaultvalue higher @Min(1) @Builder.Default private int tagValueLimit = 1; diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/ActionTracingMode.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/ActionTracingMode.java new file mode 100644 index 0000000000..2e4864049a --- /dev/null +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/ActionTracingMode.java @@ -0,0 +1,27 @@ +package rocks.inspectit.ocelot.config.model.selfmonitoring; + +/** + * Available action tracing modes. + */ +public enum ActionTracingMode { + + /** + * The action tracing is turned off. + */ + OFF, + + /** + * Only actions of rules are traced where the action tracing has been explicitly enabled. + */ + ONLY_ENABLED, + + /** + * All actions of rules which are not marked as default rules will be traced. + */ + ALL_WITHOUT_DEFAULT, + + /** + * All actions are traced. + */ + ALL_WITH_DEFAULT; +} diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/AgentHealthSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/AgentHealthSettings.java index 783c461d36..3751782af1 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/AgentHealthSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/AgentHealthSettings.java @@ -5,6 +5,7 @@ import lombok.NonNull; import javax.validation.constraints.AssertFalse; +import javax.validation.constraints.AssertTrue; import java.time.Duration; /** @@ -21,6 +22,17 @@ public class AgentHealthSettings { @NonNull private Duration validityPeriod; + /** + * The minimum delay how often the AgentHealthManager checks for invalid agent health events to clear health status. + */ + @NonNull + private Duration minHealthCheckDelay; + + @AssertTrue(message = "minHealthCheckDelay must be at least 60 seconds") + public boolean isMin60SecondsDelay() { + return minHealthCheckDelay.toMinutes() >= 1; + } + @AssertFalse(message = "The specified period should not be negative!") public boolean isNegativeDuration() { return validityPeriod != null && validityPeriod.isNegative(); diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/SelfMonitoringSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/SelfMonitoringSettings.java index 9a30f5f8fa..71af53c5ad 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/SelfMonitoringSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/SelfMonitoringSettings.java @@ -26,4 +26,8 @@ public class SelfMonitoringSettings { @Valid private AgentHealthSettings agentHealth; + /** + * Whether action tracing is enabled and if so, which mode should be used. + */ + private ActionTracingMode actionTracing = ActionTracingMode.ONLY_ENABLED; } diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/exporters.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/exporters.yml index 8a64e0160e..214d4689ec 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/exporters.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/exporters.yml @@ -40,9 +40,9 @@ inspectit: # settings used in LoggingMetricsExporterService for the LoggingMetricExporter (https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/logging) logging: - enabled: DISABLED - # the export interval of the metrics - export-interval: ${inspectit.metrics.frequency} + enabled: DISABLED + # the export interval of the metrics + export-interval: ${inspectit.metrics.frequency} # settings for the OtlpGrpcMetricExporter used in OtlpGrpcMetricExporterService otlp: @@ -52,7 +52,15 @@ inspectit: # the URL endpoint, e.g., http://127.0.0.1:4317 endpoint: null # the transport protocol, e.g., 'grpc' or 'http/protobuf' - protocol: null + protocol: + # headers + headers: {} + # the aggregation temporality, e.g., CUMULATIVE or DELTA + preferredTemporality: CUMULATIVE + # compression method + compression: NONE + # timeout, i.e., maximum time the OTLP exporter will wait for each batch export + timeout: 10s # settings for trace exporters tracing: @@ -72,16 +80,22 @@ inspectit: # the URL under which the jaeger thrift server can be accessed, e.g. http://127.0.0.1:14268/api/traces for http/thrift or http://127.0.0.1:14250/v1/traces for grpc endpoint: null # the transport protocol, e.g., 'http/thrift' or 'grpc' - protocol: null + protocol: # settings used in LoggingTraceExporterService for the LoggingSpanExporter (https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/logging) logging: - enabled: DISABLED + enabled: DISABLED # settings for the OtlpGrpcSpanExporter/OtlpHttpSpanExporter used in OtlpTraceExporterService otlp: - enabled: IF_CONFIGURED - # the URL endpoint, e.g., http://127.0.0.1:4318 - endpoint: null - # the transport protocol, e.g., 'http/thrift' or 'grpc' - protocol: null + enabled: IF_CONFIGURED + # the URL endpoint, e.g., http://127.0.0.1:4318 + endpoint: null + # the transport protocol, e.g., 'http/thrift' or 'grpc' + protocol: + # headers + headers: {} + # compression method + compression: NONE + # timeout, i.e., maximum time the OTLP exporter will wait for each batch export + timeout: 10s \ No newline at end of file diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/ignores.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/ignores.yml index a4a10cfeaa..663c898fa0 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/ignores.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/ignores.yml @@ -14,9 +14,13 @@ inspectit: '[com.lmax.disruptor.]': true '[com.google.]': true '[java.lang.invoke.]': true + '[io.opentelemetry.]': true # defines all packages packages whose classes and subpackages should be ignored # the given strings are matches as prefixes for classes, therefore packages have to end with a dot # however, for the trailing dots to be interpreted correctly you need to enclose the package in '[]' ignored-packages: '[com.intellij.]': true + '[org.gradle.]': true + '[net.bytebuddy.]': true + diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/capture-timings.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/capture-timings.yml index e1a27d4514..1b8d2405b7 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/capture-timings.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/capture-timings.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'When applied to a method, this rule will populate method_duration with the duration the method execution took.' + default-rule: true include: 'r_capture_method_duration_conditional': true entry: @@ -20,6 +21,7 @@ inspectit: The capturing will only happen if capture_time_condition is defined as true. For example, http instrumentation define capture_time_condition based on http_is_entry. The condition is there to prevent unnecessary invocations of System.nanoTime(), which can be expensive. + default-rule: true include: 'r_capture_method_entry_timestamp_conditional': true exit: @@ -37,6 +39,7 @@ inspectit: The capturing will only happen if capture_time_condition is defined as true. For example, http instrumentation define capture_time_condition based on http_is_entry. The condition is there to prevent unnecessary invocations of System.nanoTime(), which can be expensive. + default-rule: true entry: 'method_entry_time': only-if-true: 'capture_time_condition' diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/service-graph.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/service-graph.yml index 12e3781806..2e9519a954 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/service-graph.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/service-graph.yml @@ -84,6 +84,7 @@ inspectit: This rule prepares up-propagation to include service-graph related information. Namely this ensures that the current service name is included as target service. Because depending on the used communication up-propagation can happen on both exit or entry, this rule configures servicegraph_target_service in both entry and exit of the method. + default-rule: true entry: 'servicegraph_target_service': action: 'a_assign_value' @@ -101,6 +102,7 @@ inspectit: description: |- This rule prepares down-propagation to include service-graph related information. Namely this ensures that the current service name is included as origin service. + default-rule: true entry: 'servicegraph_origin_service': action: 'a_assign_value' @@ -114,7 +116,7 @@ inspectit: Can be included to record the current method invocation as an inbound service graph call. The includer should populate servicegraph_is_entry if this method is the correct entry point. In addition, servicegraph_origin_external can be populated if an external origin is present. - + default-rule: true include: 'r_servicegraph_capture_method_duration': true 'r_servicegraph_inbound_record_metric': true @@ -126,7 +128,7 @@ inspectit: Can be included to record the current method invocation as an outbound service graph call. The includer should populate servicegraph_is_entry if this method is the correct entry point. In addition, servicegraph_target_external can be populated if an external target is present. - + default-rule: true include: 'r_servicegraph_capture_method_duration': true 'r_servicegraph_outbound_record_metric': true @@ -139,7 +141,7 @@ inspectit: When this rule is included, it is expected that servicegraph_duration, servicegraph_protocol and servicegraph_is_error are populated. If there was an external origin, servicegraph_origin_external should contain its name. In addition this rule prevent invalid further down-propagation of servicegraph_origin_service by moving it into the JVM_LOCAL variable servicegraph_origin_service_local. - + default-rule: true entry: 'servicegraph_origin_service_local': only-if-null: 'servicegraph_origin_service_local' @@ -169,6 +171,7 @@ inspectit: When this rule is included, it is expected that servicegraph_duration, servicegraph_protocol and servicegraph_is_error are populated. If there was an external target, servicegraph_target_external should contain its name. In addition further invalid up-propagation of the target service is prevented. + default-rule: true post-exit: # clear the target service AFTER the metric has been recorded but before propagation 'servicegraph_target_service': only-if-not-null: 'servicegraph_duration' @@ -189,6 +192,7 @@ inspectit: Utility rule used for both inbound & outbout service graph traffic. Captures the duration of the current method as servicegraph_duration. This capturing takes only place if servicegraph_is_entry is populated with "true". + default-rule: true include: 'r_capture_method_duration_conditional': true entry: diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/tracing.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/tracing.yml index d42879f196..edfe034595 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/tracing.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/_shared/tracing.yml @@ -8,7 +8,7 @@ inspectit: description: |- This rule should be included by all other tracing rules. It allows to specify data which is added to all spans as attributes, e.g. a business transaction. - + default-rule: true include: 'r_tracing_exception_attributes': true 'r_tracing_fqn_attribute': true @@ -19,6 +19,7 @@ inspectit: description: |- This rule by default only tags the exception name and message (using the toString() method). If required, it can be enhanced to include the stack trace. + default-rule: true tracing: attributes: 'java.exception': _thrown @@ -28,6 +29,7 @@ inspectit: since: '1.3.1' description: |- This rule adds the fully qualified name of the method as span attribute. + default-rule: true tracing: attributes: 'java.fqn': 'method_fqn' diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/_shared.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/_shared.yml index a9745a4a9c..43a38e5385 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/_shared.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/_shared.yml @@ -22,6 +22,7 @@ inspectit: docs: since: '1.2.1' description: 'Can be included to detect the entry into the first JDBC layer.' + default-rule: true entry: 'jdbc_is_entry': action: 'a_entrypoint_check' @@ -34,6 +35,7 @@ inspectit: description: |- Can be included to extract the url of the JDBC connection. Extraction only happens for the first JDBC layer, which might be a JDBC proxy. + default-rule: true include: 'r_jdbc_detect_entry': true entry: @@ -50,6 +52,7 @@ inspectit: This rule does not provide any functionality but a performance benefit. Driver-specific instrumentations can write 'prepared_sql' which gets up-propagated. This rule limits the up-propagation to the JDBC scope, because propagating it up further is not necessary. + default-rule: true include: 'r_jdbc_detect_entry': true scopes: diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/metrics.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/metrics.yml index 37f6bd85b2..ba6707fa50 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/metrics.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/metrics.yml @@ -25,6 +25,7 @@ inspectit: 'r_jdbc_query_metric_statement_execute': docs: description: 'Collects metrics for execute/executeUpdate calls with non-prepared SQL (the SQL is given as method argument).' + default-rule: true include: 'r_jdbc_query_metric_defaults': true scopes: @@ -38,6 +39,7 @@ inspectit: 'r_jdbc_query_metric_statement_executeBatch': docs: description: 'Collects metrics for executeBatch calls with non-prepared SQL.' + default-rule: true include: 'r_jdbc_query_metric_defaults': true scopes: @@ -46,6 +48,7 @@ inspectit: 'r_jdbc_query_metric_preparedstatement': docs: description: 'Collects metrics for execute/executeUpdate/executeBatch calls with prepared SQL.' + default-rule: true include: 'r_jdbc_query_metric_defaults': true scopes: @@ -66,6 +69,7 @@ inspectit: description: |- Collects the metric [jdbc/query/duration]. To be included in JDBC query metric collection rules. Rules that include it should provide the context variable 'c_db_sql_query'. + default-rule: true include: 'r_capture_method_duration_conditional': true 'r_jdbc_detect_entry': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/service-graph.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/service-graph.yml index 0ece786c7a..ee56a6ae43 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/service-graph.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/service-graph.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Records JDBC statement executions as [service/out/responsetime] metric for the service graph.' + default-rule: true include: 'r_servicegraph_outbound_record_method': true 'r_jdbc_detect_entry': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/tracing.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/tracing.yml index 97c68cae2a..f0e1f7d0c2 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/tracing.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/db/jdbc/tracing.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Traces execute/executeUpdate calls with non-prepared SQL (the SQL is given as method argument).' + default-rule: true include: 'r_jdbc_tracing_defaults': true scopes: @@ -18,6 +19,7 @@ inspectit: docs: since: '1.2.1' description: 'Traces executeBatch calls with non-prepared SQL.' + default-rule: true include: 'r_jdbc_tracing_defaults': true scopes: @@ -27,6 +29,7 @@ inspectit: docs: since: '1.2.1' description: 'Traces execute/executeUpdate/executeBatch calls with prepared SQL.' + default-rule: true include: 'r_jdbc_tracing_defaults': true scopes: @@ -46,6 +49,7 @@ inspectit: description: |- To be included in JDBC tracing rules. Activates span collection and adds default attributes. + default-rule: true include: 'r_jdbc_detect_entry': true 'r_jdbc_extract_url': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-metrics.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-metrics.yml index e0cb74e80a..6e0a6f2cc4 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-metrics.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-metrics.yml @@ -60,6 +60,7 @@ inspectit: Records the duration of the method on which this rule is applied as http/out metric value. Recording only takes place if http_is_entry is true. It is expected that the http data (http_path, http_status, etc) has been populated in this case. + default-rule: true include: 'r_http_capture_method_duration': true 'r_http_client_record_metric': true @@ -71,6 +72,7 @@ inspectit: Records the duration of the method on which this rule is applied as http/in metric value. Recording only takes place if http_is_entry is true. It is expected that the http data (http_path, http_status, etc) has been populated in this case. + default-rule: true include: 'r_http_capture_method_duration': true 'r_http_server_record_metric': true @@ -81,6 +83,7 @@ inspectit: description: |- Records the value provided via http_duration as http/out metric value. It is expected that the http data (http_path, http_status, etc) has been populated. + default-rule: true metrics: '[http/out/responsetime]': value: 'http_duration' @@ -97,6 +100,7 @@ inspectit: description: |- Records the value provided via http_duration as http/in metric value. It is expected that the http data (http_path, http_status, etc) has been populated. + default-rule: true metrics: '[http/in/responsetime]': value: 'http_duration' @@ -112,6 +116,7 @@ inspectit: description: |- Captures the duration of the method as http_duration. Capturing only takes palce if http_is_entry is true for the method! + default-rule: true include: 'r_capture_method_duration_conditional': true entry: diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-path-parametrization.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-path-parametrization.yml index faad092799..9b7d5065d8 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-path-parametrization.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-path-parametrization.yml @@ -8,6 +8,7 @@ inspectit: description: |- This rule is included by all HTTP instrumentation to derive the parametrized http_path from http_raw_path. It should therefore be extended via custom includes in order to perform application specific parametrizations. + default-rule: true include: 'r_http_parametrize_path_remove_ids': true # By default, only IDs are removed entry: @@ -21,6 +22,7 @@ inspectit: docs: since: '1.2.1' description: 'The default parametrization inspectIT provides, which removes numeric ID path segments and UUIDs.' + default-rule: true entry: 'http_path': only-if-not-null: 'http_path' diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-tracing.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-tracing.yml index 5831965e9f..8d6d711376 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-tracing.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/_shared/http-tracing.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'This rule is included by all HTTP tracing rules in order to define the span name.' + default-rule: true tracing: name: 'http_span_name' entry: @@ -22,6 +23,7 @@ inspectit: docs: since: '1.2.1' description: 'This rule is included by all HTTP Client tracing rules to define which attributes should be added to the span.' + default-rule: true include: 'r_http_tracing_default_attributes': true tracing: @@ -32,6 +34,7 @@ inspectit: docs: since: '1.2.1' description: 'This rule is included by all HTTP Server tracing rules to define which attributes should be added to the span.' + default-rule: true include: 'r_http_tracing_default_attributes': true @@ -39,6 +42,7 @@ inspectit: docs: since: '1.2.1' description: 'This rule is included by all HTTP Client AND Server tracing rules to define which attributes should be added to the span.' + default-rule: true include: 'r_tracing_global_attributes': true tracing: diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/_shared.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/_shared.yml index 2c7fd1efd9..336b21a169 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/_shared.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/_shared.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Can be included to detect and exclude nested Apache Client HTTP calls.' + default-rule: true pre-entry: 'http_is_entry': action: 'a_entrypoint_check' @@ -18,6 +19,7 @@ inspectit: description: |- Reads all HTTP related data from Apache Client calls, e.g. http_raw_path, http_path, http_method, etc. Designed to be applied on the scope s_apacheclient_doExecute. + default-rule: true include: 'r_apacheclient_detect_entry': true 'r_http_parametrize_path': true # derives http_path form http_raw_path diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/http-metric.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/http-metric.yml index 6062f8757b..89bbe84ebc 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/http-metric.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/http-metric.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Records the http/out metrics for calls done via the Apache HTTP Client.' + default-rule: true include: 'r_apacheclient_extract_details': true 'r_http_client_record_metric_on_method': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/propagation.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/propagation.yml index eee09cd486..a569419909 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/propagation.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/propagation.yml @@ -9,6 +9,7 @@ inspectit: docs: since: '1.2.1' description: 'Performs up- and down-propagation via the HTTP headers for Apache Client calls.' + default-rule: true include: 'r_apacheclient_detect_entry': true # to make sure propagation happens only once scopes: diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/service-graph.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/service-graph.yml index 4d2cd4dd86..23255424d8 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/service-graph.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/service-graph.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Prepares the context to contain the service graph correlation information (e.g. origin_service and target_service).' + default-rule: true include: 'r_servicegraph_prepare_down_propagation': true scopes: @@ -15,6 +16,7 @@ inspectit: docs: since: '1.2.1' description: 'Records HTTP calls done via the Apache HTTP Client in the [service/out/responsetime] metric for the service graph.' + default-rule: true include: 'r_servicegraph_outbound_record_method': true 'r_apacheclient_detect_entry': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/tracing.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/tracing.yml index e9edfa68e4..d1d2c168ae 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/tracing.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/apache-client/tracing.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Enables tracing of Apache HTTP Client calls.' + default-rule: true include: 'r_apacheclient_extract_details': true 'r_http_tracing_span_name_default': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/_shared.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/_shared.yml index 41b1a67f67..06a0abe697 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/_shared.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/_shared.yml @@ -8,6 +8,7 @@ inspectit: description: |- Can be included to detect and exclude nested HTTP URL Connection calls. Works for both HTTP and HTTPS connections. + default-rule: true pre-entry: 'http_is_entry': action: 'a_entrypoint_check' @@ -20,6 +21,7 @@ inspectit: description: |- Tests and sets a "start" marker on this HTTP Url Connection object. The start marker will only be set exactly once. + default-rule: true include: 'r_httpurlconnection_detect_entry': true entry: @@ -44,6 +46,7 @@ inspectit: Tests and sets an "end" marker on this HTTP Url Connection object. The end marker will only be set exactly once. This functionality is usually used to distingiush between the first and all other getInputStream() calls. + default-rule: true include: 'r_httpurlconnection_detect_entry': true entry: @@ -65,6 +68,7 @@ inspectit: docs: since: '1.2.1' description: 'Extracts all http information such as http_status, http_path, etc. from an HTTP URL Connection.' + default-rule: true include: 'r_httpurlconnection_extract_request_details': true 'r_httpurlconnection_extract_response_details': true @@ -73,6 +77,7 @@ inspectit: docs: since: '1.2.1' description: 'Extracts all http request information such as http_path, http_raw_path, http_method etc. from an HTTP URL Connection.' + default-rule: true include: 'r_httpurlconnection_detect_entry': true 'r_http_parametrize_path': true # derives http_path from http_raw_path @@ -91,6 +96,7 @@ inspectit: docs: since: '1.2.1' description: 'Extracts all http response information such as http_status, http_is_error etc. from an HTTP URL Connection.' + default-rule: true include: 'r_httpurlconnection_detect_entry': true exit: diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/http-metric.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/http-metric.yml index 7895f7758a..232ae7466c 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/http-metric.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/http-metric.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Records HTTP calls done via HTTPUrlConnection via the http/out metric.' + default-rule: true include: 'r_httpurlconnection_extract_details': true 'r_httpurlconnection_detect_end': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/propagation.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/propagation.yml index 643d470601..0d9d60c8e9 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/propagation.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/propagation.yml @@ -9,6 +9,7 @@ inspectit: docs: since: '1.2.1' description: 'Writes down-propagated data to the request HTTP Headers of HTTP URL Connections.' + default-rule: true include: 'r_httpurlconnection_detect_entry': true scopes: @@ -23,6 +24,7 @@ inspectit: docs: since: '1.2.1' description: 'Reads up-propagated data from the response HTTP Headers of HTTP URL Connections.' + default-rule: true include: 'r_httpurlconnection_detect_entry': true scopes: diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/service-graph.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/service-graph.yml index acb936b531..6f02b791cf 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/service-graph.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/service-graph.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Prepares the context to contain the service graph correlation information (e.g. origin_service and target_service).' + default-rule: true include: 'r_servicegraph_prepare_down_propagation': true scopes: @@ -17,6 +18,7 @@ inspectit: docs: since: '1.2.1' description: 'Records HTTP calls done via HTTPUrlConnection in the [service/out/responsetime] metric for the service graph.' + default-rule: true include: 'r_servicegraph_outbound_record_method': true 'r_httpurlconnection_detect_end': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/tracing.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/tracing.yml index 1404b0ca77..21cb167dbc 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/tracing.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/httpurlconnection/tracing.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Starts a span for an HTTPUrlConnection before down propagation happens.' + default-rule: true include: 'r_httpurlconnection_detect_start': true 'r_httpurlconnection_extract_request_details': true @@ -37,6 +38,7 @@ inspectit: description: |- Continues an already started span for this HTTPUrlConnection via r_httpurlconnection_tracing_start. If no span was started yet, a fresh one is started. + default-rule: true include: 'r_http_tracing_span_name_default': true 'r_http_client_tracing_default_attributes': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/_shared.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/_shared.yml index ee3e2dd05d..2864c150b0 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/_shared.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/_shared.yml @@ -9,6 +9,7 @@ inspectit: docs: since: '1.2.1' description: 'Marks the first service() or doFilter() call as entry in case the ServletRequest is an HTTPServletRequest.' + default-rule: true pre-entry: 'is_http_servlet': action: 'a_servletrequest_isHttp' @@ -24,6 +25,7 @@ inspectit: docs: since: '1.2.1' description: 'Extracts all http details, such as http_path, http_method, http_status, etc. from HTTPServletRequests.' + default-rule: true include: 'r_servletapi_detect_entry': true 'r_http_parametrize_path': true # Used to derive http_path from http_raw_path diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/http-metric.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/http-metric.yml index bb952803c1..a15a1a3bfb 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/http-metric.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/http-metric.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Records the http/in metrics for calls received via the Servlet API.' + default-rule: true include: 'r_servletapi_extract_details': true 'r_http_server_record_metric_on_method': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/propagation.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/propagation.yml index 55c9b141ea..3dbca262ee 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/propagation.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/propagation.yml @@ -9,6 +9,7 @@ inspectit: docs: since: '1.2.1' description: 'Reads down-propagated data from the HTTP headers of Servlet API requests.' + default-rule: true include: 'r_servletapi_detect_entry': true scopes: @@ -23,6 +24,7 @@ inspectit: docs: since: '1.2.1' description: 'Writes up-propagated data to the responses HTTP headers in Servlet API service() or doFilter() calls.' + default-rule: true scopes: 's_servletapi_servlet_service': true 's_servletapi_filter_doFilter': true @@ -36,6 +38,7 @@ inspectit: docs: since: '1.2.1' description: 'Writes up-propagated data to the responses HTTP headers Servlet Response methods.' + default-rule: true scopes: 's_servletapi_servletresponse_getWriter': true 's_servletapi_servletresponse_getOutputStream': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/service-graph.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/service-graph.yml index 75ef379b1b..f26ff98cc0 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/service-graph.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/service-graph.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Prepares the context to contain the service graph correlation information (i.e. origin_service).' + default-rule: true include: 'r_servicegraph_prepare_up_propagation': true scopes: @@ -18,6 +19,7 @@ inspectit: docs: since: '1.2.1' description: 'Records inbound HTTP calls via the Servlet API in the [service/in/responsetime] metric for the service graph.' + default-rule: true include: 'r_servicegraph_inbound_record_method': true 'r_servletapi_detect_entry': diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/tracing.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/tracing.yml index ac937d3d64..18c2808e53 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/tracing.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/http/servlet-api/tracing.yml @@ -6,6 +6,7 @@ inspectit: docs: since: '1.2.1' description: 'Enables tracing of HTTP calls received via the Servlet API.' + default-rule: true include: 'r_servletapi_extract_details': true 'r_http_tracing_span_name_default': true diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/method-metric.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/method-metric.yml index 42d77d63a9..9de9e6a4a1 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/method-metric.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/method-metric.yml @@ -36,6 +36,7 @@ inspectit: In addition an error tag is set depending on whether the method threw an exception or not. The rule can either be included or scopes can be added directly to it. + default-rule: true include: 'r_capture_method_duration': true exit: diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/method-tracing.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/method-tracing.yml index 6143564808..7330da5ed9 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/method-tracing.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/instrumentation/rules/method-tracing.yml @@ -10,6 +10,7 @@ inspectit: In addition, the FQN of the method is added as a tag and the error status is set based on if the method threw an exception. This rule can be either included or scopes can be directly added to it. + default-rule: true include: 'r_tracing_global_attributes': true tracing: diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/self-monitoring.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/self-monitoring.yml index 490bdde11f..05a914cfb9 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/self-monitoring.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/self-monitoring.yml @@ -15,6 +15,15 @@ inspectit: # health changes due to instrumentation errors are valid until the next re-instrumentation validity-period: 1h + # The minimum delay how often the AgentHealthManager checks for invalid agent health events to clear health status + # By default the delay is calculated based on the last agent health event + # Minimum value is 1m + min-health-check-delay: 1m + + # the action tracing mode to use + # options are: OFF, ONLY_ENABLED, ALL_WITHOUT_DEFAULT, ALL_WITH_DEFAULT + action-tracing: ONLY_ENABLED + # definitions of existing self-monitoring metrics metrics: definitions: diff --git a/inspectit-ocelot-core/${inspectit.env.agent-dir}/InspectIT Agent/tag-guard-database.json b/inspectit-ocelot-core/${inspectit.env.agent-dir}/InspectIT Agent/tag-guard-database.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/inspectit-ocelot-core/${inspectit.env.agent-dir}/InspectIT Agent/tag-guard-database.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/inspectit-ocelot-core/build.gradle b/inspectit-ocelot-core/build.gradle index ae88965da9..502cb874fc 100644 --- a/inspectit-ocelot-core/build.gradle +++ b/inspectit-ocelot-core/build.gradle @@ -21,7 +21,10 @@ test { } } -sourceCompatibility = 1.8 + +sourceCompatibility = 1.8 // Java version compatibility to use when compiling Java source. +targetCompatibility = 1.8 // Java version to generate classes for. + dependencies { compileOnly( @@ -39,9 +42,6 @@ dependencies { "io.opentelemetry:opentelemetry-opencensus-shim", - ) - buildTools( - 'jarcheck:jarcheck:1.5' ) annotationProcessor "org.projectlombok:lombok:${lombokVersion}" @@ -133,8 +133,8 @@ dependencies { 'io.apisense.embed.influx:embed-influxDB:1.2.1', // for docker test containers - 'org.testcontainers:testcontainers:1.15.2', - 'org.testcontainers:junit-jupiter:1.15.2', + 'org.testcontainers:testcontainers:1.16.3', + 'org.testcontainers:junit-jupiter:1.16.3', // ServerExtension 'com.linecorp.armeria:armeria-junit5:1.14.1', @@ -159,9 +159,17 @@ dependencies { } +apply plugin: 'java' +task compileJarCheck(type: JavaCompile){ + source = sourceSets.main.java.srcDirs + include 'com/mindprod/jarcheck/JarCheck.java' + classpath = sourceSets.main.compileClasspath + destinationDir = new File("${buildDir}/classes/java/main") +} // use jarCheck to make sure all classes in our dependencies are at maximum in version 1.8 task checkDependencyJavaVersions { + def excludes = ["byte-buddy", // exclude OpenTelemetry as they guarantee JDK 8 support "opentelemetry", @@ -183,8 +191,8 @@ task checkDependencyJavaVersions { }) if (!isExcluded && file.exists()) { javaexec { - classpath configurations.buildTools - main = 'com.mindprod.jarcheck.JarCheck' + mainClass = 'com.mindprod.jarcheck.JarCheck' + classpath = sourceSets.main.runtimeClasspath args = ["$file", "1.0", "1.8"] standardOutput = new File(jarCheckOutput, "$name-check.log").newOutputStream() } @@ -192,6 +200,7 @@ task checkDependencyJavaVersions { } } } +checkDependencyJavaVersions.dependsOn compileJarCheck task generateVersionFile { ext.versionFile = new File(buildDir, "ocelot-version.info") @@ -207,7 +216,7 @@ cyclonedxBom { includeConfigs += ["runtimeClasspath"] } -jar.dependsOn checkDependencyJavaVersions +// jar.dependsOn checkDependencyJavaVersions jar.dependsOn generateVersionFile jar { diff --git a/inspectit-ocelot-core/src/main/java/com/mindprod/jarcheck/JarCheck.java b/inspectit-ocelot-core/src/main/java/com/mindprod/jarcheck/JarCheck.java new file mode 100644 index 0000000000..1ce2b8fe18 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/com/mindprod/jarcheck/JarCheck.java @@ -0,0 +1,222 @@ +package com.mindprod.jarcheck; + +import java.io.EOFException; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import static java.lang.System.*; +/* +TODO: check class minor version as well. + */ + +/** + * Ensures javac -target versions of the class files in a jar are as expected. + * + * @author Roedy Green, Canadian Mind Products + * @version 1.5 2014-03-23 add support for Java 1.8 + * @since 2006-01-16 + */ +public final class JarCheck +{ + /** + * how many bytes at beginning of class file we read
4=ca-fe-ba-be + 2=minor + 2=major + */ + private static final int chunkLength = 8; + + private static final int FIRST_COPYRIGHT_YEAR = 2006; + + /** + * undisplayed copyright notice + */ + private static final String EMBEDDED_COPYRIGHT = + "Copyright: (c) 2006-2017 Roedy Green, Canadian Mind Products, http://mindprod.com"; + + private static final String RELEASE_DATE = "2014-03-23"; + + /** + * embedded version string. + */ + private static final String VERSION_STRING = "1.5"; + + /** + * translate class file major version number to human JVM version + */ + private static final HashMap convertMachineToHuman = + new HashMap<>( 23 ); + + /** + * translate from human JDK version to class file major version number + */ + private static final HashMap convertHumanToMachine = + new HashMap<>( 23 ); + + /** + * expected first 4 bytes of a class file + */ + private static final byte[] expectedMagicNumber = + { ( byte ) 0xca, ( byte ) 0xfe, ( byte ) 0xba, ( byte ) 0xbe }; + + static + { + convertHumanToMachine.put( "1.0", 44 ); + convertHumanToMachine.put( "1.1", 45 ); + convertHumanToMachine.put( "1.2", 46 ); + convertHumanToMachine.put( "1.3", 47 ); + convertHumanToMachine.put( "1.4", 48 ); + convertHumanToMachine.put( "1.5", 49 ); + convertHumanToMachine.put( "1.6", 50 ); + convertHumanToMachine.put( "1.7", 51 ); + convertHumanToMachine.put( "1.8", 52 ); + } + + static + { + convertMachineToHuman.put( 44, "1.0" ); + convertMachineToHuman.put( 45, "1.1" ); + convertMachineToHuman.put( 46, "1.2" ); + convertMachineToHuman.put( 47, "1.3" ); + convertMachineToHuman.put( 48, "1.4" ); + convertMachineToHuman.put( 49, "1.5" ); + convertMachineToHuman.put( 50, "1.6" ); + convertMachineToHuman.put( 51, "1.7" ); + convertMachineToHuman.put( 52, "1.8" ); + } + + /** + * check one jar to make sure all class files have compatible versions. + * + * @param jarFilename name of jar file whose classes are to be tested. + * @param low low bound for major version e.g. 44 + * @param high high bound for major version. e.g. 50 + * + * @return true if all is ok. False if not, with long on System.err of problems. + */ + private static boolean checkJar( String jarFilename, int low, int high ) + { + out.println( "\nChecking jar " + jarFilename ); + boolean success = true; + FileInputStream fis; + ZipInputStream zip = null; + try + { + try + { + fis = new FileInputStream( jarFilename ); + zip = new ZipInputStream( fis ); + // loop for each jar entry + entryLoop: + while ( true ) + { + ZipEntry entry = zip.getNextEntry(); + if ( entry == null ) + { + break; + } + // relative name with slashes to separate dirnames. + String elementName = entry.getName(); + if ( !elementName.endsWith( ".class" ) ) + { + // ignore anything but a .final class file + continue; + } + byte[] chunk = new byte[ chunkLength ]; + int bytesRead = zip.read( chunk, 0, chunkLength ); + zip.closeEntry(); + if ( bytesRead != chunkLength ) + { + err.println( ">> Corrupt class file: " + + elementName ); + success = false; + continue; + } + // make sure magic number signature is as expected. + for ( int i = 0; i < expectedMagicNumber.length; i++ ) + { + if ( chunk[ i ] != expectedMagicNumber[ i ] ) + { + err.println( ">> Bad magic number in " + + elementName ); + success = false; + continue entryLoop; + } + } + /* + * pick out big-endian ushort major version in last two + * bytes of chunk + */ + int major = + ( ( chunk[ chunkLength - 2 ] & 0xff ) << 8 ) + ( + chunk[ chunkLength - 1 ] + & 0xff ); + /* F I N A L L Y. All this has been leading up to this TEST */ + if ( low <= major && major <= high ) + { + out.print( " OK " ); + out.println( convertMachineToHuman.get( major ) + + " (" + + major + + ") " + + elementName ); + // leave success set as previously + } + else + { + err.println( ">> Wrong Version " ); + err.println( convertMachineToHuman.get( major ) + + " (" + + major + + ") " + + elementName ); + success = false; + } + } + // end while + } + catch ( EOFException e ) + { + // normal exit + } + zip.close(); + return success; + } + catch ( IOException e ) + { + err.println( ">> Problem reading jar file." ); + return false; + } + } + + /** + * Main command line jarfileName lowVersion highVersion e.g. myjar.jar 1.0 1.8 + * + * @param args rot used + */ + public static void main( String[] args ) + { + try + { + if ( args.length != 3 ) + { + err.println( "usage: java -ea -jar jarcheck.jar jarFileName.jar 1.1 1.7" ); + System.exit( 2 ); + } + String jarFilename = args[ 0 ]; + int low = convertHumanToMachine.get( args[ 1 ] ); + int high = convertHumanToMachine.get( args[ 2 ] ); + boolean success = checkJar( jarFilename, low, high ); + if ( !success ) + { + err.println("JarCheck failed for " + jarFilename+". See error messages above."); + System.exit( 1 ); + } + } + catch ( NullPointerException e ) + { + err.println( "usage: java -ea -jar jarcheck.jar jarFileName.jar 1.1 1.8" ); + System.exit( 2 ); + } + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/AgentImpl.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/AgentImpl.java index 8c7cb0f850..f0c54a3e04 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/AgentImpl.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/AgentImpl.java @@ -1,6 +1,7 @@ package rocks.inspectit.ocelot.core; import io.opencensus.tags.Tags; +import net.bytebuddy.pool.TypePool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationListener; @@ -32,6 +33,11 @@ public class AgentImpl implements IAgent { */ public static final ClassLoader AGENT_CLASS_LOADER = AgentImpl.class.getClassLoader(); + /** + * Default {@link net.bytebuddy.pool.TypePool} to avoid recreating the pool on every request. + */ + public static final TypePool AGENT_CLASS_LOADER_TYPE_POOL = TypePool.Default.of(AGENT_CLASS_LOADER); + /** * Logger that is initialized in the static init block */ @@ -73,8 +79,8 @@ public void start(String cmdArgs, Instrumentation instrumentation) { LOGGER.info("Starting inspectIT Ocelot Agent..."); LOGGER.info("\tVersion: {}", getVersion()); LOGGER.info("\tBuild Date: {}", getBuildDate()); - logOpenTelemetryClassLoader(); + logOpenTelemetryClassLoader(); ctx = new AnnotationConfigApplicationContext(); ctx.setClassLoader(AGENT_CLASS_LOADER); InspectitEnvironment environment = new InspectitEnvironment(ctx, Optional.ofNullable(cmdArgs)); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/Test.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/Test.java deleted file mode 100644 index c8ef2f72ed..0000000000 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/Test.java +++ /dev/null @@ -1,2 +0,0 @@ -package rocks.inspectit.ocelot.core;public class Test { -} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/HttpCommandFetcher.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/HttpCommandFetcher.java index 490acc7d44..d0872dabfa 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/HttpCommandFetcher.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/HttpCommandFetcher.java @@ -34,7 +34,7 @@ public class HttpCommandFetcher { /** * Object mapper for serializing command responses. */ - private final ObjectMapper objectMapper = new ObjectMapper().enableDefaultTyping(); + private final ObjectMapper objectMapper = new ObjectMapper(); /** * The prefix which is used for the meta information HTTP headers. diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/handler/impl/EnvironmentCommandExecutor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/handler/impl/EnvironmentCommandExecutor.java new file mode 100644 index 0000000000..64f5ebb953 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/command/handler/impl/EnvironmentCommandExecutor.java @@ -0,0 +1,55 @@ +package rocks.inspectit.ocelot.core.command.handler.impl; + +import org.springframework.stereotype.Component; +import rocks.inspectit.ocelot.commons.models.command.Command; +import rocks.inspectit.ocelot.commons.models.command.CommandResponse; +import rocks.inspectit.ocelot.commons.models.command.impl.EnvironmentCommand; +import rocks.inspectit.ocelot.core.command.handler.CommandExecutor; + +import java.lang.management.ManagementFactory; + +/** + * Executor for executing {@link EnvironmentCommand}s. + */ +@Component +public class EnvironmentCommandExecutor implements CommandExecutor { + + /** + * Checks if the given {@link Command} is an instance of {@link EnvironmentCommand}. + * + * @param command The {@link Command} to be checked. + * @return True if the given {@link Command} is an instance of {@link EnvironmentCommand}. + */ + @Override + public boolean canExecute(Command command) { + return command instanceof EnvironmentCommand; + } + + /** + * Executes the given {@link Command}. Throws an {@link IllegalArgumentException} if the given command is either null + * or not handled by this implementation. + * Populates an instance of {@link EnvironmentCommand.EnvironmentDetail} with the respective values from the agent. + * + * @param command The command to be executed. + * @return An instance of {@link EnvironmentCommand} with alive set to true and the id of the given command. + */ + @Override + public CommandResponse execute(Command command) { + if (!canExecute(command)) { + String exceptionMessage = "Invalid command type. Executor does not support commands of type " + command.getClass(); + throw new IllegalArgumentException(exceptionMessage); + } + + EnvironmentCommand.Response response = new EnvironmentCommand.Response(); + response.setCommandId(command.getCommandId()); + + EnvironmentCommand.EnvironmentDetail body = new EnvironmentCommand.EnvironmentDetail(); + body.setEnvironmentVariables(System.getenv()); + body.setSystemProperties(System.getProperties()); + body.setJvmArguments(ManagementFactory.getRuntimeMXBean().getInputArguments()); + + response.setEnvironment(body); + + return response; + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java index 25bb82c452..079b7b214c 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java @@ -5,6 +5,7 @@ import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthState; import rocks.inspectit.ocelot.config.model.InspectitConfig; import rocks.inspectit.ocelot.config.model.config.HttpConfigSettings; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; @@ -84,9 +85,9 @@ public void run() { } } - public void updateAgentHealth(AgentHealth agentHealth) { + public void updateAgentHealthState(AgentHealthState agentHealth) { if (currentState != null) { - currentState.updateAgentHealth(agentHealth); + currentState.updateAgentHealthState(agentHealth); } } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceState.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceState.java index ae83e05cbc..d2666f7373 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceState.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceState.java @@ -1,5 +1,8 @@ package rocks.inspectit.ocelot.core.config.propertysources.http; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; import lombok.Getter; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; @@ -17,10 +20,11 @@ import org.springframework.core.env.PropertiesPropertySource; import org.springframework.core.env.PropertySource; import rocks.inspectit.ocelot.bootstrap.AgentManager; -import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthState; import rocks.inspectit.ocelot.config.model.config.HttpConfigSettings; import rocks.inspectit.ocelot.core.config.util.InvalidPropertiesException; import rocks.inspectit.ocelot.core.config.util.PropertyUtils; +import rocks.inspectit.ocelot.core.selfmonitoring.service.DynamicallyActivatableServiceObserver; import java.io.IOException; import java.lang.management.ManagementFactory; @@ -97,7 +101,7 @@ public class HttpPropertySourceState { @Getter private boolean firstFileWriteAttemptSuccessful = true; - private AgentHealth agentHealth = AgentHealth.OK; + private AgentHealthState agentHealth = AgentHealthState.defaultState(); /** * Constructor. @@ -141,7 +145,7 @@ public boolean update(boolean fallBackToFile) { * * @param newHealth The new agent health */ - public void updateAgentHealth(@NonNull AgentHealth newHealth) { + public void updateAgentHealthState(@NonNull AgentHealthState newHealth) { agentHealth = newHealth; } @@ -249,13 +253,22 @@ private String fetchConfiguration(boolean fallBackToFile) { private void setAgentMetaHeaders(HttpGet httpGet) { RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); + ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); + String agentHealthJson; + try { + agentHealthJson = ow.writeValueAsString(agentHealth); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + httpGet.setHeader(META_HEADER_PREFIX + "AGENT-ID", runtime.getName()); httpGet.setHeader(META_HEADER_PREFIX + "AGENT-VERSION", AgentManager.getAgentVersion()); httpGet.setHeader(META_HEADER_PREFIX + "JAVA-VERSION", System.getProperty("java.version")); httpGet.setHeader(META_HEADER_PREFIX + "VM-NAME", runtime.getVmName()); httpGet.setHeader(META_HEADER_PREFIX + "VM-VENDOR", runtime.getVmVendor()); httpGet.setHeader(META_HEADER_PREFIX + "START-TIME", String.valueOf(runtime.getStartTime())); - httpGet.setHeader(META_HEADER_PREFIX + "HEALTH", agentHealth.name()); + httpGet.setHeader(META_HEADER_PREFIX + "HEALTH", agentHealthJson); + httpGet.setHeader(META_HEADER_PREFIX + "SERVICE-STATES-MAP", DynamicallyActivatableServiceObserver.asJson()); } /** diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/InfluxExporterService.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/InfluxExporterService.java index e1a9ccde49..e35adb4a46 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/InfluxExporterService.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/InfluxExporterService.java @@ -108,6 +108,8 @@ protected boolean doDisable() { exporterTask.cancel(false); } if (activeExporter != null) { + // perform a final export before closing to ensure all metrics are written + activeExporter.export(); activeExporter.close(); activeExporter = null; } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterService.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterService.java index b2fce008c3..a31af46249 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterService.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterService.java @@ -1,7 +1,11 @@ package rocks.inspectit.ocelot.core.exporter; +import com.google.common.annotations.VisibleForTesting; import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter; +import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder; import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter; +import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; +import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.export.MetricExporter; import io.opentelemetry.sdk.metrics.export.MetricReaderFactory; import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader; @@ -17,6 +21,7 @@ import javax.validation.Valid; import java.util.Arrays; import java.util.List; +import java.util.Map; /** * Service for {@link io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter}/{@link io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter}. @@ -28,10 +33,11 @@ public class OtlpMetricsExporterService extends DynamicallyActivatableMetricsExp private final List SUPPORTED_PROTOCOLS = Arrays.asList(TransportProtocol.GRPC, TransportProtocol.HTTP_PROTOBUF); + @VisibleForTesting /** * The {@link MetricExporter} for exporting metrics via OTLP */ - private MetricExporter metricExporter; + MetricExporter metricExporter; /** * The {@link PeriodicMetricReaderBuilder} for reading metrics to the log @@ -75,13 +81,33 @@ protected boolean doEnable(InspectitConfig configuration) { try { OtlpMetricsExporterSettings otlp = configuration.getExporters().getMetrics().getOtlp(); + AggregationTemporality preferredTemporality = otlp.getPreferredTemporality(); + switch (otlp.getProtocol()) { case GRPC: { - metricExporter = OtlpGrpcMetricExporter.builder().setEndpoint(otlp.getEndpoint()).build(); + OtlpGrpcMetricExporterBuilder metricExporterBuilder = OtlpGrpcMetricExporter.builder() + .setPreferredTemporality(preferredTemporality) + .setEndpoint(otlp.getEndpoint()).setCompression(otlp.getCompression().toString()) + .setTimeout(otlp.getTimeout()); + if (otlp.getHeaders() != null) { + for (Map.Entry headerEntry : otlp.getHeaders().entrySet()) { + metricExporterBuilder.addHeader(headerEntry.getKey(), headerEntry.getValue()); + } + } + metricExporter = metricExporterBuilder.build(); break; } case HTTP_PROTOBUF: { - metricExporter = OtlpHttpMetricExporter.builder().setEndpoint(otlp.getEndpoint()).build(); + OtlpHttpMetricExporterBuilder metricExporterBuilder = OtlpHttpMetricExporter.builder() + .setPreferredTemporality(preferredTemporality) + .setEndpoint(otlp.getEndpoint()).setCompression(otlp.getCompression().toString()) + .setTimeout(otlp.getTimeout()); + if (otlp.getHeaders() != null) { + for (Map.Entry headerEntry : otlp.getHeaders().entrySet()) { + metricExporterBuilder.addHeader(headerEntry.getKey(), headerEntry.getValue()); + } + } + metricExporter = metricExporterBuilder.build(); break; } } @@ -95,7 +121,7 @@ protected boolean doEnable(InspectitConfig configuration) { } return success; } catch (Exception e) { - log.error("Error creatig OTLP metrics exporter service", e); + log.error("Error creating OTLP metrics exporter service", e); return false; } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpTraceExporterService.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpTraceExporterService.java index afce1a03d6..3b5a851375 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpTraceExporterService.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpTraceExporterService.java @@ -1,7 +1,9 @@ package rocks.inspectit.ocelot.core.exporter; import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter; +import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder; import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter; +import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder; import io.opentelemetry.sdk.trace.export.SpanExporter; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -16,6 +18,7 @@ import javax.validation.Valid; import java.util.Arrays; import java.util.List; +import java.util.Map; /** * Service for {@link io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter}/{@link io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter}. @@ -62,11 +65,26 @@ protected boolean doEnable(InspectitConfig configuration) { switch (otlp.getProtocol()) { case GRPC: { - spanExporter = OtlpGrpcSpanExporter.builder().setEndpoint(otlp.getEndpoint()).build(); + OtlpGrpcSpanExporterBuilder otlpGrpcSpanExporterBuilder =OtlpGrpcSpanExporter.builder().setEndpoint(otlp.getEndpoint()) + .setCompression(otlp.getCompression().toString()) + .setTimeout(otlp.getTimeout()); + if(otlp.getHeaders() != null){ + for (Map.Entry headerEntry : otlp.getHeaders().entrySet()) { + otlpGrpcSpanExporterBuilder.addHeader(headerEntry.getKey(), headerEntry.getValue()); + } + } + spanExporter = otlpGrpcSpanExporterBuilder.build(); break; } case HTTP_PROTOBUF: { - spanExporter = OtlpHttpSpanExporter.builder().setEndpoint(otlp.getEndpoint()).build(); + OtlpHttpSpanExporterBuilder otlpHttpSpanExporterBuilder =OtlpHttpSpanExporter.builder().setEndpoint(otlp.getEndpoint()).setCompression(otlp.getCompression().toString()) + .setTimeout(otlp.getTimeout()); + if(otlp.getHeaders() != null){ + for (Map.Entry headerEntry : otlp.getHeaders().entrySet()) { + otlpHttpSpanExporterBuilder.addHeader(headerEntry.getKey(), headerEntry.getValue()); + } + } + spanExporter = otlpHttpSpanExporterBuilder.build(); break; } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationManager.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationManager.java index 7413322842..b0562166a2 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationManager.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationManager.java @@ -13,7 +13,7 @@ import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; /** - * This class is responsible for (a) storing the active isntrumentatiuon configurations for each class + * This class is responsible for (a) storing the active instrumentation configurations for each class * and (b) determining if a class requires an instrumentation change. */ @Service @@ -30,8 +30,9 @@ public class InstrumentationManager { * For each class we remember the applied instrumentation. * This allows us to check if a retransformation is required. */ - private Cache, ClassInstrumentationConfiguration> activeInstrumentations = - CacheBuilder.newBuilder().weakKeys().build(); + private final Cache, ClassInstrumentationConfiguration> activeInstrumentations = CacheBuilder.newBuilder() + .weakKeys() + .build(); @EventListener private void classInstrumented(ClassInstrumentedEvent event) { diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationTriggerer.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationTriggerer.java index c1bf3148f1..212f005f70 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationTriggerer.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationTriggerer.java @@ -80,12 +80,10 @@ public class InstrumentationTriggerer implements IClassDiscoveryListener { * This service works through this set in batches. * Package-private for testing. */ - Cache, Boolean> pendingClasses = - CacheBuilder.newBuilder().weakKeys().build(); + Cache, Boolean> pendingClasses = CacheBuilder.newBuilder().weakKeys().build(); private BatchJobExecutorService.BatchJob classInstrumentationJob; - @PostConstruct private void init() { InternalSettings conf = env.getCurrentConfig().getInstrumentation().getInternal(); @@ -200,6 +198,7 @@ void checkClassesForConfigurationUpdates(BatchSize batchSize) { * Package private for testing. * * @param batchSize the configured batch sizes + * * @return the classes which need retransformation */ @VisibleForTesting @@ -220,14 +219,12 @@ Set> getBatchOfClassesToRetransform(BatchSize batchSize) { updateClass(clazz, classesToRetransform); - if (checkedClassesCount >= batchSize.maxClassesToCheck - || classesToRetransform.size() >= batchSize.maxClassesToRetransform) { + if (checkedClassesCount >= batchSize.maxClassesToCheck || classesToRetransform.size() >= batchSize.maxClassesToRetransform) { break; } } if (checkedClassesCount > 0) { - log.debug("Checked configuration of {} classes in {} ms, {} classes left to check", - checkedClassesCount, watch.elapsed(TimeUnit.MILLISECONDS), pendingClasses.size()); + log.debug("Checked configuration of {} classes in {} ms, {} classes left to check", checkedClassesCount, watch.elapsed(TimeUnit.MILLISECONDS), pendingClasses.size()); } if (pendingClasses.size() == 0 && currentHookUpdate != null) { currentHookUpdate.commitUpdate(); @@ -285,8 +282,7 @@ private void applyClassLoaderDelegation(Class clazz, Set> classesToR } } - @EventListener(classes = {InspectitConfigChangedEvent.class}, - condition = "!#root.event.oldConfig.selfMonitoring.enabled") + @EventListener(classes = {InspectitConfigChangedEvent.class}, condition = "!#root.event.oldConfig.selfMonitoring.enabled") private void recordPendingClassesQueueSize() { selfMonitoring.recordMeasurement("instrumentation-queue-size", pendingClasses.size()); } @@ -296,7 +292,9 @@ private void recordPendingClassesQueueSize() { */ @Value static class BatchSize { + private int maxClassesToCheck; + private int maxClassesToRetransform; } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/TypeDescriptionWithClassLoader.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/TypeDescriptionWithClassLoader.java new file mode 100644 index 0000000000..c085137a10 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/TypeDescriptionWithClassLoader.java @@ -0,0 +1,69 @@ +package rocks.inspectit.ocelot.core.instrumentation; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.pool.TypePool; +import rocks.inspectit.ocelot.core.AgentImpl; + +/** + * Represents a combination of {@link TypeDescription}, {@link ClassLoader} and a {@link Class} represented by the {@link TypeDescription}. + * The purpose if this triumvirate is to have a one type object which works for async as well as sync instrumentation. + * In sync instrumentation scenarios we can only rely on {@link TypeDescription} and {@link ClassLoader} since no class object is available yet. + */ +@EqualsAndHashCode +public class TypeDescriptionWithClassLoader { + + @Getter + private final TypeDescription type; + + @Getter + private final ClassLoader loader; + + /** + * The class represented by the {@link TypeDescriptionWithClassLoader#type}. + * Can be null if async instrumentation mode is disabled! + */ + @Getter + private final Class relatedClass; + + private TypeDescriptionWithClassLoader(TypeDescription type, ClassLoader loader, Class relatedClass) { + this.type = type; + this.loader = loader; + this.relatedClass = relatedClass; + } + + public String getName() { + return type.getName(); + } + + /** + * Creates a new {@link TypeDescriptionWithClassLoader} from a loaded class. + * + * @param clazz The class object + * + * @return new {@link TypeDescriptionWithClassLoader} + */ + public static TypeDescriptionWithClassLoader of(Class clazz) { + return new TypeDescriptionWithClassLoader(TypeDescription.ForLoadedType.of(clazz), clazz.getClassLoader(), clazz); + } + + /** + * Creates a new {@link TypeDescriptionWithClassLoader} for a not yet loaded class by its class name and the corresponding ClassLoader. + * + * @param className Full qualified name of the class + * @param loader The corresponding {@link ClassLoader} + * + * @return new {@link TypeDescriptionWithClassLoader} + */ + public static TypeDescriptionWithClassLoader of(String className, ClassLoader loader) { + if (loader == AgentImpl.AGENT_CLASS_LOADER) { + // use the already loaded TypePool if loader is our InspectitClassLoader + return new TypeDescriptionWithClassLoader(AgentImpl.AGENT_CLASS_LOADER_TYPE_POOL.describe(className) + .resolve(), loader, null); + } + return new TypeDescriptionWithClassLoader(TypePool.Default.of(loader) + .describe(className) + .resolve(), loader, null); + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/BoundGenericAction.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/BoundGenericAction.java index 4c767f8b6f..7518d4e1de 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/BoundGenericAction.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/BoundGenericAction.java @@ -86,6 +86,10 @@ public String getName() { return name; } + public String getDataKey() { + return dataKey; + } + @Override public String toString() { return "Action '" + getName() + "' for data key '" + dataKey + "'"; @@ -93,6 +97,16 @@ public String toString() { @Override public void execute(ExecutionContext context) { + executeImpl(context); + } + + /** + * Implementation of the action's execution function. This method is also returning the action's result value compared + * to the one of the super class which can be useful in case the result is required (e.g. see {@link rocks.inspectit.ocelot.core.instrumentation.hook.actions.TracingHookAction}). + * + * @return the actions result object or `null` in case of void actions + */ + public Object executeImpl(ExecutionContext context) { Object[] actionArguments = getActionArguments(context); Object result = action.get() @@ -100,6 +114,9 @@ public void execute(ExecutionContext context) { if (!voidAction) { context.getInspectitContext().setData(dataKey, result); + return result; + } else { + return null; } } @@ -110,7 +127,7 @@ public void execute(ExecutionContext context) { * * @return the sorted array of action arguments */ - protected abstract Object[] getActionArguments(ExecutionContext context); + public abstract Object[] getActionArguments(ExecutionContext context); } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/ConstantOnlyBoundGenericAction.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/ConstantOnlyBoundGenericAction.java index 5d607682c5..8646245727 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/ConstantOnlyBoundGenericAction.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/ConstantOnlyBoundGenericAction.java @@ -23,7 +23,7 @@ public ConstantOnlyBoundGenericAction(String dataKey, GenericActionConfig action } @Override - protected Object[] getActionArguments(ExecutionContext context) { + public Object[] getActionArguments(ExecutionContext context) { return arguments; } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/DynamicBoundGenericAction.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/DynamicBoundGenericAction.java index 4d59e7b7a3..8691607bb0 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/DynamicBoundGenericAction.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/bound/DynamicBoundGenericAction.java @@ -69,7 +69,7 @@ public class DynamicBoundGenericAction extends BoundGenericAction { this.dynamicAssignments = dynamicAssignmentsWithIndices.toArray(new Pair[0]); } - protected Object[] getActionArguments(ExecutionContext context) { + public Object[] getActionArguments(ExecutionContext context) { Object[] args = Arrays.copyOf(argumentsTemplate, argumentsTemplate.length); for (val assignment : dynamicAssignments) { diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/template/VoidGenericActionTemplate.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/template/VoidGenericActionTemplate.java index f1e3ee3c78..4628034377 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/template/VoidGenericActionTemplate.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/actions/template/VoidGenericActionTemplate.java @@ -15,7 +15,7 @@ public class VoidGenericActionTemplate implements IGenericAction, DoNotInstrumen /** * This methods body will be replaced via javassist to the actual generic action code. */ - public static void executeImpl(Object[] instrumentedMethodArgs, Object thiz, Object returnValue, Throwable thrown, Object[] additionalArgs) { + public static void executeImpl(Object[] instrumentedMethodArgs, Object thiz, Object returnValue, Throwable thrown, Object[] actionArguments) { } @Override diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationConfigurationResolver.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationConfigurationResolver.java index 1032f1bc2e..69937b290b 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationConfigurationResolver.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationConfigurationResolver.java @@ -16,14 +16,14 @@ import rocks.inspectit.ocelot.config.model.instrumentation.InstrumentationSettings; import rocks.inspectit.ocelot.core.config.InspectitConfigChangedEvent; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; -import rocks.inspectit.ocelot.core.instrumentation.AsyncClassTransformer; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.event.InstrumentationConfigurationChangedEvent; import rocks.inspectit.ocelot.core.instrumentation.config.model.*; import rocks.inspectit.ocelot.core.instrumentation.special.SpecialSensor; +import rocks.inspectit.ocelot.core.instrumentation.transformer.AsyncClassTransformer; import rocks.inspectit.ocelot.core.utils.CoreUtils; import javax.annotation.PostConstruct; -import java.lang.instrument.Instrumentation; import java.util.*; import java.util.stream.Collectors; @@ -43,9 +43,6 @@ public class InstrumentationConfigurationResolver { @Autowired private ApplicationContext ctx; - @Autowired - private Instrumentation instrumentation; - @Autowired private List specialSensors; @@ -75,50 +72,62 @@ private void init() { /** * Builds the {@link ClassInstrumentationConfiguration} based on the currently active global instrumentation configuration - * for the given class. + * for the {@link TypeDescription} of the given {@link TypeDescriptionWithClassLoader}. * - * @param clazz the class for which the configuration shal lbe queried + * @param typeWithLoader the {@link TypeDescriptionWithClassLoader} for which the configuration shall lbe queried * * @return the configuration or {@link ClassInstrumentationConfiguration#NO_INSTRUMENTATION} if this class should not be instrumented */ - public ClassInstrumentationConfiguration getClassInstrumentationConfiguration(Class clazz) { + public ClassInstrumentationConfiguration getClassInstrumentationConfiguration(TypeDescriptionWithClassLoader typeWithLoader) { InstrumentationConfiguration config = currentConfig; try { - if (!config.getSource().isEnabled() || isIgnoredClass(clazz, config)) { + if (!config.getSource().isEnabled() || isIgnoredClass(typeWithLoader, config)) { return ClassInstrumentationConfiguration.NO_INSTRUMENTATION; } else { - TypeDescription description = TypeDescription.ForLoadedType.of(clazz); Set activeSensors = specialSensors.stream() - .filter(s -> s.shouldInstrument(clazz, config)) + .filter(s -> s.shouldInstrument(typeWithLoader, config)) .collect(Collectors.toSet()); - Set narrowedRules = getNarrowedRulesFor(description, config); + Set narrowedRules = getNarrowedRulesFor(typeWithLoader.getType(), config); return new ClassInstrumentationConfiguration(activeSensors, narrowedRules, config); } } catch (NoClassDefFoundError e) { - //the class contains a reference to an not loadable class + //the class contains a reference to a not loadable class //this the case for example for very many spring boot classes - log.trace("Ignoring class {} for instrumentation as it is not initializable ", clazz.getName(), e); + log.trace("Ignoring class {} for instrumentation as it is not initializable ", typeWithLoader.getName(), e); return ClassInstrumentationConfiguration.NO_INSTRUMENTATION; } } /** - * Finds out for each method of the given class which rules apply and builds a {@link MethodHookConfiguration} for each instrumented method. + * Builds the {@link ClassInstrumentationConfiguration} based on the currently active global instrumentation configuration + * for the given class. * - * @param clazz the class to check + * @param clazz the {@link Class} for which the configuration shall lbe queried + * + * @return the configuration or {@link ClassInstrumentationConfiguration#NO_INSTRUMENTATION} if this class should not be instrumented + */ + public ClassInstrumentationConfiguration getClassInstrumentationConfiguration(Class clazz) { + return getClassInstrumentationConfiguration(TypeDescriptionWithClassLoader.of(clazz)); + } + + /** + * Finds out for each method of the given {@link TypeDescription} of the given {@link TypeDescriptionWithClassLoader} + * which rules apply and builds a {@link MethodHookConfiguration} for each instrumented method. + * + * @param typeWithLoader the {@link TypeDescriptionWithClassLoader} to check * * @return a map mapping hook configurations to the methods which they should be applied on. */ - public Map getHookConfigurations(Class clazz) { + public Map getHookConfigurations(TypeDescriptionWithClassLoader typeWithLoader) { val config = currentConfig; - if (isIgnoredClass(clazz, config)) { + if (isIgnoredClass(typeWithLoader, config)) { return Collections.emptyMap(); } try { - TypeDescription type = TypeDescription.ForLoadedType.of(clazz); + TypeDescription type = typeWithLoader.getType(); Set narrowedRules = getNarrowedRulesFor(type, config); if (!narrowedRules.isEmpty()) { @@ -134,7 +143,7 @@ public Map getHookConfigurations(Cla Set matchedAndIncludedRules = resolveIncludes(config, rulesMatchingOnMethod); result.put(method, hookResolver.buildHookConfiguration(config, matchedAndIncludedRules)); } catch (Exception e) { - log.error("Could not build hook for {} of class {}", CoreUtils.getSignature(method), clazz.getName(), e); + log.error("Could not build hook for {} of class {}", CoreUtils.getSignature(method), typeWithLoader.getName(), e); } } } @@ -143,9 +152,20 @@ public Map getHookConfigurations(Cla } catch (NoClassDefFoundError e) { //the class contains a reference to an not loadable class //this the case for example for very many spring boot classes - log.trace("Ignoring class {} for hooking as it is not initializable ", clazz.getName(), e); + log.trace("Ignoring class {} for hooking as it is not initializable ", typeWithLoader.getName(), e); } return Collections.emptyMap(); + } + + /** + * Finds out for each method of the given class which rules apply and builds a {@link MethodHookConfiguration} for each instrumented method. + * + * @param clazz the class to check + * + * @return a map mapping hook configurations to the methods which they should be applied on. + */ + public Map getHookConfigurations(Class clazz) { + return getHookConfigurations(TypeDescriptionWithClassLoader.of(clazz)); } @@ -230,21 +250,22 @@ private InstrumentationConfiguration resolveConfiguration(InspectitConfig config /** * Checks if the given class should not be instrumented based on the given configuration. * - * @param clazz the class to check - * @param config configuration to check for + * @param typeWithLoader the {@link java.lang.reflect.Type} to check + * @param config configuration to check for * * @return true, if the class is ignored (=it should not be instrumented) */ @VisibleForTesting - boolean isIgnoredClass(Class clazz, InstrumentationConfiguration config) { + boolean isIgnoredClass(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration config) { - ClassLoader loader = clazz.getClassLoader(); + ClassLoader loader = typeWithLoader.getLoader(); + TypeDescription type = typeWithLoader.getType(); - if (!instrumentation.isModifiableClass(clazz)) { + if (type.isPrimitive() || type.isArray()) { return true; } - if (DoNotInstrumentMarker.class.isAssignableFrom(clazz)) { + if (type.isAssignableTo(DoNotInstrumentMarker.class)) { return true; } @@ -256,32 +277,28 @@ boolean isIgnoredClass(Class clazz, InstrumentationConfiguration config) { return true; } - if (config.getSource().isExcludeLambdas() && clazz.getName().contains("$$Lambda$")) { + if (config.getSource().isExcludeLambdas() && type.getName().contains("$$Lambda$")) { return true; } + return isClassFromIgnoredPackage(config.getSource(), type.getName(), loader); + } - String name = clazz.getName(); - - boolean isIgnored = config.getSource() - .getIgnoredPackages() + public static boolean isClassFromIgnoredPackage(InstrumentationSettings settings, String className, ClassLoader loader) { + boolean isIgnored = settings.getIgnoredPackages() .entrySet() .stream() .filter(Map.Entry::getValue) - .anyMatch(e -> name.startsWith(e.getKey())); + .anyMatch(e -> className.startsWith(e.getKey())); if (isIgnored) { return true; } - if (clazz.getClassLoader() == null) { - boolean isIgnoredOnBootstrap = config.getSource() - .getIgnoredBootstrapPackages() + if (loader == null) { + return settings.getIgnoredBootstrapPackages() .entrySet() .stream() .filter(Map.Entry::getValue) - .anyMatch(e -> name.startsWith(e.getKey())); - if (isIgnoredOnBootstrap) { - return true; - } + .anyMatch(e -> className.startsWith(e.getKey())); } return false; } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationRuleResolver.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationRuleResolver.java index 9bb0b58d4f..0dfe93b806 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationRuleResolver.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationRuleResolver.java @@ -13,6 +13,8 @@ import rocks.inspectit.ocelot.config.model.instrumentation.actions.ActionCallSettings; import rocks.inspectit.ocelot.config.model.instrumentation.rules.InstrumentationRuleSettings; import rocks.inspectit.ocelot.config.model.instrumentation.rules.MetricRecordingSettings; +import rocks.inspectit.ocelot.config.model.selfmonitoring.ActionTracingMode; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.instrumentation.config.model.ActionCallConfig; import rocks.inspectit.ocelot.core.instrumentation.config.model.GenericActionConfig; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationRule; @@ -32,6 +34,9 @@ @Slf4j public class InstrumentationRuleResolver { + @Autowired + private InspectitEnvironment environment; + @Autowired private InstrumentationScopeResolver scopeResolver; @@ -40,6 +45,7 @@ public class InstrumentationRuleResolver { * contained in the given {@link InstrumentationSettings}. * * @param source the configuration which is used as basis for the rules + * * @return A set containing the resolved rules. */ public Set resolve(InstrumentationSettings source, Map actions) { @@ -64,8 +70,13 @@ public Set resolve(InstrumentationSettings source, Map scopeMap, Map actions) { val result = InstrumentationRule.builder(); - result.name(name); - settings.getScopes().entrySet() + result.name(name).defaultRule(settings.isDefaultRule()); + + boolean hasActionTracing = hasActionTracing(settings); + result.actionTracing(hasActionTracing); + + settings.getScopes() + .entrySet() .stream() .filter(Map.Entry::getValue) .map(Map.Entry::getKey) @@ -73,34 +84,30 @@ private InstrumentationRule resolveRule(String name, InstrumentationRuleSettings .filter(Objects::nonNull) .forEach(result::scope); - result.includedRuleNames(settings.getInclude().entrySet().stream() + result.includedRuleNames(settings.getInclude() + .entrySet() + .stream() .filter(e -> Boolean.TRUE.equals(e.getValue())) .map(Map.Entry::getKey) .collect(Collectors.toSet())); - settings.getPreEntry().forEach((data, call) -> - result.preEntryAction(resolveCall(data, call, actions)) - ); + settings.getPreEntry() + .forEach((data, call) -> result.preEntryAction(resolveCall(data, name, call, actions, hasActionTracing))); - settings.getEntry().forEach((data, call) -> - result.entryAction(resolveCall(data, call, actions)) - ); + settings.getEntry() + .forEach((data, call) -> result.entryAction(resolveCall(data, name, call, actions, hasActionTracing))); - settings.getPostEntry().forEach((data, call) -> - result.postEntryAction(resolveCall(data, call, actions)) - ); + settings.getPostEntry() + .forEach((data, call) -> result.postEntryAction(resolveCall(data, name, call, actions, hasActionTracing))); - settings.getPreExit().forEach((data, call) -> - result.preExitAction(resolveCall(data, call, actions)) - ); + settings.getPreExit() + .forEach((data, call) -> result.preExitAction(resolveCall(data, name, call, actions, hasActionTracing))); - settings.getExit().forEach((data, call) -> - result.exitAction(resolveCall(data, call, actions)) - ); + settings.getExit() + .forEach((data, call) -> result.exitAction(resolveCall(data, name, call, actions, hasActionTracing))); - settings.getPostExit().forEach((data, call) -> - result.postExitAction(resolveCall(data, call, actions)) - ); + settings.getPostExit() + .forEach((data, call) -> result.postExitAction(resolveCall(data, name, call, actions, hasActionTracing))); result.metrics(resolveMetricRecordings(settings)); @@ -109,11 +116,37 @@ private InstrumentationRule resolveRule(String name, InstrumentationRuleSettings return result.build(); } + /** + * Returns whether a rule contains any action that should be traced. This can be the case if a global action tracing + * has been enabled or a rule has been explicitly marked as action tracing should be used. + * + * @param settings the rule to check + * + * @return `true` in case any action exists which should be traced. + */ + private boolean hasActionTracing(InstrumentationRuleSettings settings) { + ActionTracingMode actionTracingMode = environment.getCurrentConfig().getSelfMonitoring().getActionTracing(); + switch (actionTracingMode) { + case ONLY_ENABLED: + return settings.isEnableActionTracing(); + case ALL_WITHOUT_DEFAULT: + return !settings.isDefaultRule(); + case ALL_WITH_DEFAULT: + return true; + case OFF: + default: + return false; + } + } + @VisibleForTesting Multiset resolveMetricRecordings(InstrumentationRuleSettings settings) { - return settings.getMetrics().entrySet().stream() + return settings.getMetrics() + .entrySet() + .stream() .filter(e -> !StringUtils.isEmpty(e.getValue().getValue())) - .map(entry -> entry.getValue().copyWithDefaultMetricName(entry.getKey())) //use map key as default metric name + .map(entry -> entry.getValue() + .copyWithDefaultMetricName(entry.getKey())) //use map key as default metric name .collect(Collectors.toCollection(HashMultiset::create)); } @@ -122,14 +155,19 @@ Multiset resolveMetricRecordings(InstrumentationRuleSet * As this involves linking the {@link GenericActionConfig} of the action which is used, * the map of known generic actions is required as input. * - * @param name the name used for the call, corresponds to the written data key for action calls - * @param actions a map mapping the names of data actions to their resolved configuration. - * @param call - * @return + * @param dataKey the key used for storing the action's result in the current context + * @param ruleName the name of the rule defining the action call + * @param call settings for the action call + * @param actions a map mapping the names of data actions to their resolved configuration. + * @param actionTracing whether action tracing is enabled + * + * @return a configuration object describing the action execution */ - private ActionCallConfig resolveCall(String name, ActionCallSettings call, Map actions) { + private ActionCallConfig resolveCall(String dataKey, String ruleName, ActionCallSettings call, Map actions, boolean actionTracing) { return ActionCallConfig.builder() - .name(name) + .dataKey(dataKey) + .actionTracing(actionTracing) + .sourceRuleName(ruleName) .action(actions.get(call.getAction())) .callSettings(call) .build(); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/MethodHookConfigurationResolver.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/MethodHookConfigurationResolver.java index e7fd123c0a..729d32b732 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/MethodHookConfigurationResolver.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/MethodHookConfigurationResolver.java @@ -20,6 +20,7 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; +import java.util.stream.Stream; @Component public class MethodHookConfigurationResolver { @@ -37,8 +38,7 @@ public class MethodHookConfigurationResolver { * * @return */ - public MethodHookConfiguration buildHookConfiguration(InstrumentationConfiguration allSettings, Set matchedRules) - throws Exception { + public MethodHookConfiguration buildHookConfiguration(InstrumentationConfiguration allSettings, Set matchedRules) throws Exception { val result = MethodHookConfiguration.builder(); @@ -49,6 +49,25 @@ public MethodHookConfiguration buildHookConfiguration(InstrumentationConfigurati result.exitActions(combineAndOrderActionCalls(matchedRules, InstrumentationRule::getExitActions)); result.postExitActions(combineAndOrderActionCalls(matchedRules, InstrumentationRule::getPostExitActions)); + // @formatter:off + boolean traceEntryHook = Stream.of( + matchedRules.stream().map(InstrumentationRule::getPreEntryActions).flatMap(Collection::stream), + matchedRules.stream().map(InstrumentationRule::getEntryActions).flatMap(Collection::stream), + matchedRules.stream().map(InstrumentationRule::getPostEntryActions).flatMap(Collection::stream)) + .flatMap(s -> s) + .anyMatch(ActionCallConfig::isActionTracing); + + boolean traceExitHook = Stream.of( + matchedRules.stream().map(InstrumentationRule::getPreExitActions).flatMap(Collection::stream), + matchedRules.stream().map(InstrumentationRule::getExitActions).flatMap(Collection::stream), + matchedRules.stream().map(InstrumentationRule::getPostExitActions).flatMap(Collection::stream)) + .flatMap(s -> s) + .anyMatch(ActionCallConfig::isActionTracing); + // @formatter:on + + result.traceEntryHook(traceEntryHook); + result.traceExitHook(traceExitHook); + if (allSettings.isMetricsEnabled()) { resolveMetrics(result, matchedRules); } @@ -101,9 +120,8 @@ private void resolveSpanAttributeWriting(Set matchedRules, Map resultAttributes = new HashMap<>(); for (String attributeKey : writtenAttributes) { String dataKey = getAndDetectConflicts(attributeWritingRules, r -> r.getTracing() - .getAttributes() - .get(attributeKey), - x -> !StringUtils.isEmpty(x), "the span attribute'" + attributeKey + "'"); + .getAttributes() + .get(attributeKey), x -> !StringUtils.isEmpty(x), "the span attribute'" + attributeKey + "'"); resultAttributes.put(attributeKey, dataKey); } builder.attributes(resultAttributes); @@ -134,11 +152,9 @@ private void resolveEndSpan(Set matchedRules, RuleTracingSe boolean endSpan = Optional.ofNullable(endSpanSetting).orElse(true); builder.endSpan(endSpan); if (endSpan) { - builder.endSpanConditions( - Optional.ofNullable( - getAndDetectConflicts(rulesDefiningEndSpan, r -> r.getTracing() - .getEndSpanConditions(), ALWAYS_TRUE, "end span conditions") - ).orElse(new ConditionalActionSettings())); + builder.endSpanConditions(Optional.ofNullable(getAndDetectConflicts(rulesDefiningEndSpan, r -> r.getTracing() + .getEndSpanConditions(), ALWAYS_TRUE, "end span conditions")) + .orElse(new ConditionalActionSettings())); } } @@ -179,8 +195,7 @@ private void resolveStartSpan(Set matchedRules, RuleTracing * * @throws ConflictingDefinitionsException thrown if a conflicting setting is detected */ - private T getAndDetectConflicts(Collection rules, Function getter, Predicate filter, String exceptionMessage) - throws ConflictingDefinitionsException { + private T getAndDetectConflicts(Collection rules, Function getter, Predicate filter, String exceptionMessage) throws ConflictingDefinitionsException { Optional firstMatch = rules.stream().filter(r -> filter.test(getter.apply(r))).findFirst(); if (firstMatch.isPresent()) { @@ -222,8 +237,7 @@ private void resolveMetrics(MethodHookConfiguration.MethodHookConfigurationBuild * * @throws CyclicDataDependencyException if the action calls have cyclic dependencies preventing a scheduling */ - private List combineAndOrderActionCalls(Set rules, Function> actionsGetter) - throws CyclicDataDependencyException { + private List combineAndOrderActionCalls(Set rules, Function> actionsGetter) throws CyclicDataDependencyException { List allCalls = rules.stream() .map(actionsGetter) diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/RuleDependencyTreePrinter.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/RuleDependencyTreePrinter.java index d102d516f7..a35c2022f9 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/RuleDependencyTreePrinter.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/RuleDependencyTreePrinter.java @@ -24,6 +24,7 @@ public class RuleDependencyTreePrinter { /** * Constructor generating the dependency tree. + * * @param rules the rules to consider in the tree */ public RuleDependencyTreePrinter(Collection rules) { @@ -64,7 +65,11 @@ RuleEntry toRuleEntry(InstrumentationRule rule, boolean markAsUsed) { if (markAsUsed) { usedRules.add(rule.getName()); } - RuleEntry.RuleEntryBuilder builder = RuleEntry.builder().name(rule.getName()).used(markAsUsed); + RuleEntry.RuleEntryBuilder builder = RuleEntry.builder() + .name(rule.getName()) + .used(markAsUsed) + .defaultRule(rule.isDefaultRule()) + .actionTracing(rule.isActionTracing()); rule.getIncludedRuleNames() .stream() @@ -86,7 +91,13 @@ private void printRuleEntry(RuleEntry entry, StringBuilder builder, String prefi if (!entry.isUsed()) { builder.append(" "); } + if (entry.isDefaultRule()) { + builder.append("*"); + } builder.append(entry.getName()); + if (entry.isActionTracing()) { + builder.append(" (ACTIONTRACING)"); + } builder.append("\n"); String newPrefix = prefix + (isLast ? " " : "|") + " "; @@ -120,6 +131,10 @@ static class RuleEntry { private boolean used; + private boolean defaultRule; + + private boolean actionTracing; + @Singular private List children; } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/CallDependencies.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/CallDependencies.java index e9c4812982..906bc2e521 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/CallDependencies.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/CallDependencies.java @@ -63,7 +63,7 @@ private CallDependencies(ActionCallConfig call) { * Implicit dependencies are for example data-inputs used by the action. */ private void collectImplicitDependencies() { - writes.add(source.getName()); + writes.add(source.getDataKey()); ActionCallSettings settings = source.getCallSettings(); addIfNotBlank(settings.getOnlyIfFalse(), reads); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/GenericActionCallSorter.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/GenericActionCallSorter.java index cfe78fa7c6..bf2131bb78 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/GenericActionCallSorter.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/GenericActionCallSorter.java @@ -130,10 +130,10 @@ private List>> sortDependencyGraph List>> sorted = new ArrayList<>(); dependencyGraph.forEach((call, deps) -> { ArrayList sortedDeps = new ArrayList<>(deps); - sortedDeps.sort(Comparator.comparing(ActionCallConfig::getName)); + sortedDeps.sort(Comparator.comparing(ActionCallConfig::getDataKey)); sorted.add(Pair.of(call, sortedDeps)); }); - sorted.sort(Comparator.comparing(p -> p.getLeft().getName())); + sorted.sort(Comparator.comparing(p -> p.getLeft().getDataKey())); return sorted; } @@ -178,7 +178,7 @@ private CyclicDataDependencyException buildCyclicDataDependencyException(LinkedH List dependencyCycle = stackTraceList.subList(idx, stackTraceList.size()) .stream() .map(Equivalence.Wrapper::get) - .map(ActionCallConfig::getName) + .map(ActionCallConfig::getDataKey) .collect(Collectors.toList()); return new CyclicDataDependencyException(dependencyCycle); } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/ActionCallConfig.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/ActionCallConfig.java index bf70f1a3b7..838a357a9e 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/ActionCallConfig.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/ActionCallConfig.java @@ -19,7 +19,17 @@ public class ActionCallConfig { * The name used for this action call. * This corresponds to the data key written by the action. */ - private String name; + private String dataKey; + + /** + * The name of the rule defining this action. + */ + private String sourceRuleName; + + /** + * Whether the action should be traced. + */ + private boolean actionTracing; /** * The input assignments to use for calling the action. diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/ClassInstrumentationConfiguration.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/ClassInstrumentationConfiguration.java index fbafd26180..7f33577de7 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/ClassInstrumentationConfiguration.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/ClassInstrumentationConfiguration.java @@ -3,6 +3,7 @@ import lombok.Getter; import org.springframework.util.CollectionUtils; import rocks.inspectit.ocelot.config.utils.ConfigUtils; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.special.SpecialSensor; import java.util.Collections; @@ -40,17 +41,7 @@ public ClassInstrumentationConfiguration(Set activeSpecialSensors this.activeConfiguration = activeConfiguration; } - /** - * Compares this instrumentation configuration against another. - * Two instrumentations are considered to be the "same" if they result in the same bytecode changes. - * To check if a given configuration represents "no instrumentation" you should rather use {@link #isNoInstrumentation()} - * isntead of comparing against {@link #NO_INSTRUMENTATION}. - * - * @param clazz the type for which this configuration is meant. - * @param other the other configuration to compare against - * @return true if both are the same, false otherwise - */ - public boolean isSameAs(Class clazz, ClassInstrumentationConfiguration other) { + public boolean isSameAs(TypeDescriptionWithClassLoader typeWithLoader, ClassInstrumentationConfiguration other) { if (!ConfigUtils.contentsEqual(activeSpecialSensors, other.activeSpecialSensors)) { return false; } @@ -58,13 +49,28 @@ public boolean isSameAs(Class clazz, ClassInstrumentationConfiguration other) return false; } for (SpecialSensor sensor : activeSpecialSensors) { - if (sensor.requiresInstrumentationChange(clazz, activeConfiguration, other.activeConfiguration)) { + if (sensor.requiresInstrumentationChange(typeWithLoader, activeConfiguration, other.activeConfiguration)) { return false; } } return true; } + /** + * Compares this instrumentation configuration against another. + * Two instrumentations are considered to be the "same" if they result in the same bytecode changes. + * To check if a given configuration represents "no instrumentation" you should rather use {@link #isNoInstrumentation()} + * isntead of comparing against {@link #NO_INSTRUMENTATION}. + * + * @param clazz the type for which this configuration is meant. + * @param other the other configuration to compare against + * + * @return true if both are the same, false otherwise + */ + public boolean isSameAs(Class clazz, ClassInstrumentationConfiguration other) { + return isSameAs(TypeDescriptionWithClassLoader.of(clazz), other); + } + /** * Checks if this configuration induces no bytecode changes to the target class. * This is the same as invoking {@link #isSameAs(Class, ClassInstrumentationConfiguration)} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/InstrumentationRule.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/InstrumentationRule.java index e8fe779734..83a4e1d7a9 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/InstrumentationRule.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/InstrumentationRule.java @@ -24,6 +24,16 @@ public class InstrumentationRule { */ private String name; + /** + * Defines whether this is a default rule. All configuration rules shipped with the agent are marked as default rules. + */ + private boolean defaultRule; + + /** + * Defines whether the actions executed in the rules scope should be traced for debug purposes. + */ + private boolean actionTracing; + /** * The scope of this rule. This represents a matcher of types and methods that should be instrumented. */ diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/MethodHookConfiguration.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/MethodHookConfiguration.java index 5069a0e093..07e9d2c1ef 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/MethodHookConfiguration.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/config/model/MethodHookConfiguration.java @@ -71,4 +71,18 @@ public class MethodHookConfiguration { */ @Builder.Default private Multiset metrics = HashMultiset.create(); + + /** + * Whether a span should be created representing the entry section of the method hook. + * This span will be used as parent for the action tracing spans recorded during the entry phase of the method hook. + */ + @Builder.Default + private boolean traceEntryHook = false; + + /** + * Whether a span should be created representing the exit section of the method hook. + * This span will be used as parent for the action tracing spans recorded during the exit phase of the method hook. + */ + @Builder.Default + private boolean traceExitHook = false; } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/event/ClassInstrumentedEvent.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/event/ClassInstrumentedEvent.java index c655187b16..69d7ad2c4e 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/event/ClassInstrumentedEvent.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/event/ClassInstrumentedEvent.java @@ -1,14 +1,12 @@ package rocks.inspectit.ocelot.core.instrumentation.event; - import lombok.Getter; import net.bytebuddy.description.type.TypeDescription; import org.springframework.context.ApplicationEvent; -import rocks.inspectit.ocelot.core.instrumentation.AsyncClassTransformer; import rocks.inspectit.ocelot.core.instrumentation.config.model.ClassInstrumentationConfiguration; /** - * Fired by the {@link AsyncClassTransformer} whenever a class has been instrumented or deinstrumented. + * Fired by a {@link rocks.inspectit.ocelot.core.instrumentation.transformer.ClassTransformer} whenever a class has been instrumented or deinstrumented. * Note that this event is executed at the end of the {@link java.lang.instrument.ClassFileTransformer}. * This means that performed instrumentation is not active at the time this event is fired. */ diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/event/TransformerShutdownEvent.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/event/TransformerShutdownEvent.java index 3f47077ad6..c4876669cc 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/event/TransformerShutdownEvent.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/event/TransformerShutdownEvent.java @@ -1,18 +1,19 @@ package rocks.inspectit.ocelot.core.instrumentation.event; import org.springframework.context.ApplicationEvent; -import rocks.inspectit.ocelot.core.instrumentation.AsyncClassTransformer; +import rocks.inspectit.ocelot.core.instrumentation.transformer.ClassTransformer; /** - * An event sent to notify listeners that the {@link AsyncClassTransformer} is shutting down + * An event sent to notify listeners that a {@link ClassTransformer} is shutting down */ public class TransformerShutdownEvent extends ApplicationEvent { + /** * Create a new TransformerShutdownEvent. * * @param source the transformer which is shutting down */ - public TransformerShutdownEvent(AsyncClassTransformer source) { + public TransformerShutdownEvent(ClassTransformer source) { super(source); } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/ActionCallGenerator.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/ActionCallGenerator.java index fc195326a5..dae10827e9 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/ActionCallGenerator.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/ActionCallGenerator.java @@ -11,6 +11,7 @@ import rocks.inspectit.ocelot.core.instrumentation.config.model.GenericActionConfig; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.ConditionalHookAction; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction; +import rocks.inspectit.ocelot.core.instrumentation.hook.actions.TracingHookAction; import java.util.HashMap; import java.util.Map; @@ -31,6 +32,7 @@ public class ActionCallGenerator { * * @param methodInfo the method in which this action will be used. * @param actionCallConfig the specification of the call to the data action + * * @return the executable generic action */ public IHookAction generateAndBindGenericAction(MethodReflectionInformation methodInfo, ActionCallConfig actionCallConfig) { @@ -41,7 +43,11 @@ public IHookAction generateAndBindGenericAction(MethodReflectionInformation meth val dynamicAssignments = getDynamicInputAssignments(methodInfo, actionCallConfig); val constantAssignments = getConstantInputAssignments(methodInfo, actionCallConfig); - IHookAction actionCall = BoundGenericAction.bind(actionCallConfig.getName(), actionConfig, injectedActionClass, constantAssignments, dynamicAssignments); + IHookAction actionCall = BoundGenericAction.bind(actionCallConfig.getDataKey(), actionConfig, injectedActionClass, constantAssignments, dynamicAssignments); + + if (actionCallConfig.isActionTracing()) { + actionCall = TracingHookAction.wrap(actionCall, actionConfig, actionCallConfig.getSourceRuleName()); + } return ConditionalHookAction.wrapWithConditionChecks(callSettings, actionCall, variableAccessorFactory); } @@ -52,6 +58,7 @@ public IHookAction generateAndBindGenericAction(MethodReflectionInformation meth * * @param methodInfo the method within which the action is executed, used to find the correct types * @param actionCallConfig the call whose constant assignments should be queried + * * @return a map mapping the name of the parameters to the constant value they are assigned */ private Map getConstantInputAssignments(MethodReflectionInformation methodInfo, ActionCallConfig actionCallConfig) { @@ -60,14 +67,14 @@ private Map getConstantInputAssignments(MethodReflectionInformat ActionCallSettings callSettings = actionCallConfig.getCallSettings(); SortedMap actionArgumentTypes = actionConfig.getActionArgumentTypes(); - actionCallConfig.getCallSettings().getConstantInput() - .forEach((argName, value) -> { - String expectedTypeName = actionArgumentTypes.get(argName); - ClassLoader contextClassloader = methodInfo.getDeclaringClass().getClassLoader(); - Class expectedValueType = ConfigUtils.locateTypeWithinImports(expectedTypeName, contextClassloader, actionConfig.getImportedPackages()); - Object convertedValue = callSettings.getConstantInputAsType(argName, expectedValueType); - constantAssignments.put(argName, convertedValue); - }); + actionCallConfig.getCallSettings().getConstantInput().forEach((argName, value) -> { + String expectedTypeName = actionArgumentTypes.get(argName); + ClassLoader contextClassloader = methodInfo.getDeclaringClass().getClassLoader(); + Class expectedValueType = ConfigUtils.locateTypeWithinImports(expectedTypeName, contextClassloader, actionConfig + .getImportedPackages()); + Object convertedValue = callSettings.getConstantInputAsType(argName, expectedValueType); + constantAssignments.put(argName, convertedValue); + }); for (String variable : actionArgumentTypes.keySet()) { Object constantSpecialValue = variableAccessorFactory.getConstantSpecialVariable(variable, methodInfo); @@ -84,15 +91,15 @@ private Map getConstantInputAssignments(MethodReflectionInformat * * @param methodInfo the method within which the action is executed, used to assign special variables * @param actionCallConfig the call whose dynamic assignments should be queried + * * @return a map mapping the parameter names to functions which are evaluated during * {@link IHookAction#execute(IHookAction.ExecutionContext)} to find the concrete value for the parameter. */ private Map getDynamicInputAssignments(MethodReflectionInformation methodInfo, ActionCallConfig actionCallConfig) { Map dynamicAssignments = new HashMap<>(); - actionCallConfig.getCallSettings().getDataInput() - .forEach((argName, dataName) -> - dynamicAssignments.put(argName, variableAccessorFactory.getVariableAccessor(dataName)) - ); + actionCallConfig.getCallSettings() + .getDataInput() + .forEach((argName, dataName) -> dynamicAssignments.put(argName, variableAccessorFactory.getVariableAccessor(dataName))); Set additionalInputVars = actionCallConfig.getAction().getActionArgumentTypes().keySet(); for (String variable : additionalInputVars) { Object constantSpecialValue = variableAccessorFactory.getConstantSpecialVariable(variable, methodInfo); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/HookManager.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/HookManager.java index f7ffe67572..f8b0fb6065 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/HookManager.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/HookManager.java @@ -1,8 +1,9 @@ package rocks.inspectit.ocelot.core.instrumentation.hook; import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Maps; +import io.opencensus.common.Scope; import lombok.extern.slf4j.Slf4j; -import lombok.val; import net.bytebuddy.description.method.MethodDescription; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -11,6 +12,7 @@ import rocks.inspectit.ocelot.bootstrap.instrumentation.IMethodHook; import rocks.inspectit.ocelot.bootstrap.instrumentation.noop.NoopHookManager; import rocks.inspectit.ocelot.bootstrap.instrumentation.noop.NoopMethodHook; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.instrumentation.config.InstrumentationConfigurationResolver; import rocks.inspectit.ocelot.core.instrumentation.config.model.MethodHookConfiguration; import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; @@ -19,7 +21,9 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Implementation for {@link IHookManager}. @@ -30,6 +34,11 @@ @Service public class HookManager { + /** + * Component named used for self monitoring metrics + */ + private static final String LAZY_LOADING_HOOK_COMPONENT_NAME = "hookmanager-lazy-hooking"; + /** * Thread local flag for marking the current thread that it is currently in the execution/scope of agent actions. * This is used to prevent an endless action recursion in case an instrumented action is invoked within another @@ -46,6 +55,9 @@ public class HookManager { @Autowired private MethodHookGenerator hookGenerator; + @Autowired + private InspectitEnvironment env; + /** * Holds the currently active hooks. * The keys of the map are Classes for which hooks are present. @@ -57,8 +69,31 @@ public class HookManager { */ private volatile Map, Map> hooks = Collections.emptyMap(); + /** + * Flag indicates that lazy loading of hooks is enabled. This is only possible if the configuration value + * {@code inspectit.instrumentation.internal.async} is {@code false}. + * If lazy hook loading is enabled, hooks will be generated on the fly while an instrumentation method asks for hooks. + * Only one attempt for lazy loading hooks will be performed! If no hooks are generated, e.g. due to a missing or invalid + * configuration, no further attempts will be performed. Assumption is that updated hook configurations will be + * considered during regular asynchronous updates. + */ + private boolean isLazyHookingEnabled; + + /** + * Holds the latest lazy loaded hooks. + * All lazy loaded hooks will be merged to regular {@link HookManager#hooks} map during next {@link HookUpdate}. + */ + private final Map, Map> lazyLoadedHooks = new ConcurrentHashMap<>(); + + /** + * Saves for which classes the hooks were lazy loaded and acts as a lock for all further attempts. + * Lazy loading hooks will only be done once per class! + */ + private final Set> lazyHookingPerformed = ConcurrentHashMap.newKeySet(); + @PostConstruct void init() { + isLazyHookingEnabled = !env.getCurrentConfig().getInstrumentation().getInternal().isAsync(); Instances.hookManager = this::getHook; } @@ -79,6 +114,9 @@ void destroy() { IMethodHook getHook(Class clazz, String methodSignature) { if (!RECURSION_GATE.get()) { Map methodHooks = hooks.get(clazz); + if (isLazyHookingEnabled && methodHooks == null) { + methodHooks = lazyHookGeneration(clazz); + } if (methodHooks != null) { MethodHook hook = methodHooks.get(methodSignature); if (hook != null) { @@ -90,6 +128,56 @@ IMethodHook getHook(Class clazz, String methodSignature) { return NoopMethodHook.INSTANCE; } + /** + * Creates {@link MethodHook}s lazy if hooks are not yet created for an instrumented class. + * Lazy loaded hooks are merged to {@link HookManager#hooks} map during next regular {@link HookUpdate}. + * This method will only be called during JVM ramp up phase as long as not all classes are loaded. + * + * @param clazz the name of the class to which the method to query the hook for belongs + * + * @return the method hooks for the specified class if a valid hook configurations is available, null otherwise + */ + private Map lazyHookGeneration(Class clazz) { + if (lazyHookingPerformed.contains(clazz)) { + return lazyLoadedHooks.get(clazz); + } + synchronized (clazz) { + try (Scope sm = selfMonitoring.withDurationSelfMonitoring(LAZY_LOADING_HOOK_COMPONENT_NAME)) { + Map hookConfigs = configResolver.getHookConfigurations(clazz); + + HashMap lazyHooks = Maps.newHashMap(); + hookConfigs.forEach((method, config) -> { + String signature = CoreUtils.getSignature(method); + try { + MethodHook methodHook = hookGenerator.buildHook(clazz, method, config); + lazyHooks.put(signature, methodHook); + if (log.isDebugEnabled()) { + log.debug("Lazy loading hooks for {} of {}.", signature, clazz.getName()); + } + } catch (Throwable throwable) { + log.error("Error generating hook for {} of {}. Method will not be hooked.", signature, clazz.getName(), throwable); + } + }); + + if (!lazyHooks.isEmpty()) { + Map methodHooks = hooks.get(clazz); + if (methodHooks != null) { + // It seems async hooking triggered from InstrumentationTrigger kicked in between + // Drop lazy hooks and go on + return methodHooks; + } else { + lazyLoadedHooks.put(clazz, lazyHooks); + // Lock lazy loading hooks for this class. We only try to lazy hooking once + lazyHookingPerformed.add(clazz); + return lazyHooks; + } + } + return null; + + } + } + } + /** * Starts an update of the hook configurations. * The returned HookUpdate copies all currently active hooks and resets them. @@ -119,21 +207,27 @@ public class HookUpdate { *

* The structure of the map is the same as for {@link #hooks}. */ - private WeakHashMap, Map> newHooks; + private final WeakHashMap, Map> newHooks; private boolean committed = false; /** * Copies the currently active hooks into a mutable, local state. - * The hooks are reset when copied to reenable actions which have been deactivated due to runtime errors. + * The hooks are reset when copied to re-enable actions which have been deactivated due to runtime errors. */ private HookUpdate() { - try (val sm = selfMonitoring.withDurationSelfMonitoring("hookmanager-copy-existing-hooks")) { + try (Scope sm = selfMonitoring.withDurationSelfMonitoring("hookmanager-copy-existing-hooks")) { + + // Merge regular and lazy loaded hooks. Regular hooks take precedence + WeakHashMap, Map> mergedHooks = Stream.of(hooks, lazyLoadedHooks) + .flatMap(map -> map.entrySet().stream()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v1, WeakHashMap::new)); + newHooks = new WeakHashMap<>(); - for (Map.Entry, Map> existingMethodHooks : hooks.entrySet()) { + for (Map.Entry, Map> existingMethodHooks : mergedHooks.entrySet()) { HashMap newMethodHooks = new HashMap<>(); existingMethodHooks.getValue() - .forEach((signature, hook) -> newMethodHooks.put(signature, hook.getResettedCopy())); + .forEach((signature, hook) -> newMethodHooks.put(signature, hook.getResetCopy())); newHooks.put(existingMethodHooks.getKey(), newMethodHooks); } } @@ -146,7 +240,7 @@ private HookUpdate() { */ public void updateHooksForClass(Class clazz) { ensureNotCommitted(); - try (val sm = selfMonitoring.withDurationSelfMonitoring("hookmanager-update-class")) { + try (Scope sm = selfMonitoring.withDurationSelfMonitoring("hookmanager-update-class")) { Map hookConfigs = configResolver.getHookConfigurations(clazz); removeObsoleteHooks(clazz, hookConfigs.keySet()); addOrReplaceHooks(clazz, hookConfigs); @@ -161,6 +255,14 @@ public void updateHooksForClass(Class clazz) { public void commitUpdate() { ensureNotCommitted(); hooks = newHooks; + // Remove all updated hooks from lazy loaded map + if (lazyLoadedHooks.size() > 0) { + lazyLoadedHooks.forEach((k, v) -> { + if (hooks.containsKey(k)) { + lazyLoadedHooks.remove(k); + } + }); + } committed = true; } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHook.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHook.java index bdd2c45bd5..75ac73911f 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHook.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHook.java @@ -1,5 +1,8 @@ package rocks.inspectit.ocelot.core.instrumentation.hook; +import io.opencensus.trace.AttributeValue; +import io.opencensus.trace.Span; +import io.opencensus.trace.Tracing; import lombok.Builder; import lombok.Singular; import lombok.Value; @@ -10,11 +13,13 @@ import rocks.inspectit.ocelot.core.instrumentation.context.ContextManager; import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction; +import rocks.inspectit.ocelot.core.instrumentation.hook.actions.TracingHookAction; import rocks.inspectit.ocelot.core.selfmonitoring.ActionScopeFactory; import rocks.inspectit.ocelot.core.selfmonitoring.IActionScope; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; /** @@ -26,6 +31,16 @@ @Value public class MethodHook implements IMethodHook { + /** + * Prefix used for span attributes in method hook spans. + */ + private static final String SPAN_ATTRIBUTE_PREFIX = "inspectit.debug.method-hook."; + + /** + * Attribute value for `null` values in span attributes. + */ + private static final AttributeValue NULL_STRING_ATTRIBUTE = AttributeValue.stringAttributeValue(""); + /** * The configuration on which this hook is based. * This object can be compared against newly derived configurations to see if the hook requires an update. @@ -86,46 +101,71 @@ public MethodHook(MethodHookConfiguration sourceConfiguration, ContextManager in @Override public InternalInspectitContext onEnter(Object[] args, Object thiz) { + Span hookSpan = null; try { // flags the thread that it is now in action execution HookManager.RECURSION_GATE.set(true); InspectitContextImpl inspectitContext = inspectitContextManager.enterNewContext(); - IHookAction.ExecutionContext executionContext = new IHookAction.ExecutionContext(args, thiz, null, null, this, inspectitContext); + + hookSpan = getEntryHookTracingSpan(); + recordContextDataInSpan(hookSpan, inspectitContext, "before."); + + IHookAction.ExecutionContext executionContext = new IHookAction.ExecutionContext(args, thiz, null, null, this, inspectitContext, hookSpan); for (IHookAction action : activeEntryActions) { try (IActionScope scope = actionScopeFactory.createScope(action)) { action.execute(executionContext); } catch (Throwable t) { - log.error("Entry action {} executed for method {} threw an exception and from now on is disabled!", action, methodInformation.getMethodFQN(), t); + log.error("Entry action {} executed for method {} threw an exception and from now on is disabled!", action, methodInformation + .getMethodFQN(), t); activeEntryActions.remove(action); } } + recordContextDataInSpan(hookSpan, inspectitContext, "after."); + inspectitContext.makeActive(); return inspectitContext; } finally { + if (hookSpan != null) { + hookSpan.end(); + } + HookManager.RECURSION_GATE.set(false); } } @Override public void onExit(Object[] args, Object thiz, Object returnValue, Throwable thrown, InternalInspectitContext context) { + Span hookSpan = null; try { // flags the thread that it is now in action execution HookManager.RECURSION_GATE.set(true); - IHookAction.ExecutionContext executionContext = new IHookAction.ExecutionContext(args, thiz, returnValue, thrown, this, (InspectitContextImpl) context); + hookSpan = getExitHookTracingSpan(); + recordContextDataInSpan(hookSpan, context, "before."); + + IHookAction.ExecutionContext executionContext = new IHookAction.ExecutionContext(args, thiz, returnValue, thrown, this, (InspectitContextImpl) context, hookSpan); + for (IHookAction action : activeExitActions) { try (IActionScope scope = actionScopeFactory.createScope(action)) { action.execute(executionContext); } catch (Throwable t) { - log.error("Exit action {} executed for method {} threw an exception and from now on is disabled!", action, methodInformation.getMethodFQN(), t); + log.error("Exit action {} executed for method {} threw an exception and from now on is disabled!", action, methodInformation + .getMethodFQN(), t); activeExitActions.remove(action); } } + + recordContextDataInSpan(hookSpan, context, "after."); + context.close(); } finally { + if (hookSpan != null) { + hookSpan.end(); + } + HookManager.RECURSION_GATE.set(false); } } @@ -133,8 +173,55 @@ public void onExit(Object[] args, Object thiz, Object returnValue, Throwable thr /** * @return An exact copy of this method hook but with all deactivated actions reactivated. */ - public MethodHook getResettedCopy() { + public MethodHook getResetCopy() { return new MethodHook(sourceConfiguration, inspectitContextManager, entryActions, exitActions, methodInformation, actionScopeFactory); } + /** + * @return Returns a span representing the entry hook of this method hook. It will be used as parent for action tracing spans. + */ + private Span getEntryHookTracingSpan() { + if (sourceConfiguration.isTraceEntryHook()) { + return getHookTracingSpan("entryHook"); + } else { + return null; + } + } + + /** + * @return Returns a span representing the exit hook of this method hook. It will be used as parent for action tracing spans. + */ + private Span getExitHookTracingSpan() { + if (sourceConfiguration.isTraceExitHook()) { + return getHookTracingSpan("exitHook"); + } else { + return null; + } + } + + private Span getHookTracingSpan(String hookName) { + return Tracing.getTracer() + .spanBuilder(TracingHookAction.DEBUG_SPAN_NAME_PREFIX + hookName + "<" + methodInformation.getMethodFQN() + ">") + .startSpan(); + } + + /** + * Utility method for adding a the existing context as span attributes to the given span. + * + * @param span the span to add the attributes + * @param context the context containing the data + * @param prefix the prefix used in the attribute keys + */ + private void recordContextDataInSpan(Span span, InternalInspectitContext context, String prefix) { + if (span != null) { + Iterable> contextData = context.getData(); + for (Map.Entry entry : contextData) { + recordAttribute(span, "context." + prefix + entry.getKey(), entry.getValue()); + } + } + } + + private void recordAttribute(Span span, String name, Object value) { + span.putAttribute(SPAN_ATTRIBUTE_PREFIX + name, value != null ? AttributeValue.stringAttributeValue(value.toString()) : NULL_STRING_ATTRIBUTE); + } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java index c02ac84ca1..37949b0289 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java @@ -11,6 +11,8 @@ import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.config.model.instrumentation.rules.MetricRecordingSettings; import rocks.inspectit.ocelot.config.model.instrumentation.rules.RuleTracingSettings; +import rocks.inspectit.ocelot.config.model.selfmonitoring.ActionTracingMode; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.instrumentation.autotracing.StackTraceSampler; import rocks.inspectit.ocelot.core.instrumentation.config.model.ActionCallConfig; import rocks.inspectit.ocelot.core.instrumentation.config.model.MethodHookConfiguration; @@ -18,6 +20,7 @@ import rocks.inspectit.ocelot.core.instrumentation.hook.actions.ConditionalHookAction; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.MetricsRecorder; +import rocks.inspectit.ocelot.core.instrumentation.hook.actions.TracingHookAction; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.model.MetricAccessor; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.span.*; import rocks.inspectit.ocelot.core.instrumentation.hook.tags.CommonTagsToAttributesManager; @@ -40,6 +43,9 @@ @Slf4j public class MethodHookGenerator { + @Autowired + private InspectitEnvironment environment; + @Autowired private ContextManager contextManager; @@ -92,14 +98,22 @@ public MethodHook buildHook(Class declaringClass, MethodDescription method, M builder.entryActions(buildActionCalls(config.getPreEntryActions(), methodInfo)); builder.entryActions(buildActionCalls(config.getEntryActions(), methodInfo)); if (tracingSettings != null) { - builder.entryActions(buildTracingEntryActions(tracingSettings)); + List actions = buildTracingEntryActions(tracingSettings); + if (isTracingInternalActions() && config.isTraceEntryHook()) { + actions = wrapActionsWithTracing(actions); + } + builder.entryActions(actions); } builder.entryActions(buildActionCalls(config.getPostEntryActions(), methodInfo)); builder.exitActions(buildActionCalls(config.getPreExitActions(), methodInfo)); builder.exitActions(buildActionCalls(config.getExitActions(), methodInfo)); if (tracingSettings != null) { - builder.exitActions(buildTracingExitActions(tracingSettings)); + List actions = buildTracingExitActions(tracingSettings); + if (isTracingInternalActions() && config.isTraceExitHook()) { + actions = wrapActionsWithTracing(actions); + } + builder.exitActions(actions); } buildMetricsRecorder(config).ifPresent(builder::exitAction); builder.exitActions(buildActionCalls(config.getPostExitActions(), methodInfo)); @@ -210,14 +224,40 @@ private Optional buildMetricsRecorder(MethodHookConfiguration confi List metricAccessors = metricRecordingSettings.stream() .map(this::buildMetricAccessor) .collect(Collectors.toList()); + IHookAction recorder = new MetricsRecorder(metricAccessors, commonTagsManager, metricsManager, tagValueGuard); + + if (isTracingInternalActions() && config.isTraceExitHook()) { + recorder = TracingHookAction.wrap(recorder, null, "INTERNAL"); + } - MetricsRecorder recorder = new MetricsRecorder(metricAccessors, commonTagsManager, metricsManager, tagValueGuard); return Optional.of(recorder); } else { return Optional.empty(); } } + /** + * @return Returns whether action tracing should be enabled for internal actions (e.g. {@link MetricsRecorder}). + */ + private boolean isTracingInternalActions() { + return environment.getCurrentConfig() + .getSelfMonitoring() + .getActionTracing() == ActionTracingMode.ALL_WITH_DEFAULT; + } + + /** + * Decorates each action of the given list which a {@link TracingHookAction}. + * + * @param actions the actions to wrap + * + * @return A list where all the actions are wrapped withing a {@link TracingHookAction}. + */ + private List wrapActionsWithTracing(List actions) { + return actions.stream() + .map(action -> TracingHookAction.wrap(action, null, "INTERNAL")) + .collect(Collectors.toList()); + } + @VisibleForTesting MetricAccessor buildMetricAccessor(MetricRecordingSettings metricSettings) { String value = metricSettings.getValue(); @@ -244,7 +284,7 @@ private List buildActionCalls(List calls, MethodR result.add(actionCallGenerator.generateAndBindGenericAction(methodInfo, call)); } catch (Exception e) { log.error("Failed to build action {} for data {} on method {}, no value will be assigned", call.getAction() - .getName(), call.getName(), methodInfo.getMethodFQN(), e); + .getName(), call.getDataKey(), methodInfo.getMethodFQN(), e); } } return result; diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/IHookAction.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/IHookAction.java index b9c9fc465c..7311d0b780 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/IHookAction.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/IHookAction.java @@ -1,5 +1,6 @@ package rocks.inspectit.ocelot.core.instrumentation.hook.actions; +import io.opencensus.trace.Span; import lombok.Value; import lombok.experimental.NonFinal; import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; @@ -66,5 +67,9 @@ class ExecutionContext { */ private InspectitContextImpl inspectitContext; + /** + * The span representing the current method hook. In case the method hook in not traced, this reference is null. + */ + private Span methodHookSpan; } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/TracingHookAction.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/TracingHookAction.java new file mode 100644 index 0000000000..cf9f80a596 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/TracingHookAction.java @@ -0,0 +1,129 @@ +package rocks.inspectit.ocelot.core.instrumentation.hook.actions; + +import io.opencensus.trace.AttributeValue; +import io.opencensus.trace.Span; +import io.opencensus.trace.SpanBuilder; +import io.opencensus.trace.Tracing; +import lombok.NonNull; +import lombok.Value; +import rocks.inspectit.ocelot.core.instrumentation.actions.bound.BoundGenericAction; +import rocks.inspectit.ocelot.core.instrumentation.config.model.GenericActionConfig; + +import java.util.Iterator; +import java.util.Map; + +/** + * Action that can be used to wrap another action for which a span should be generated containing various information + * about the current execution context and the action itself. + */ +@Value(staticConstructor = "wrap") +public class TracingHookAction implements IHookAction { + + /** + * Prefix used for the span operation name. + */ + public static final String DEBUG_SPAN_NAME_PREFIX = "*agent* "; + + /** + * Attribute value for `null` values in span attributes. + */ + private static final AttributeValue NULL_STRING_ATTRIBUTE = AttributeValue.stringAttributeValue(""); + + /** + * Prefix used for span attributes in method hook spans. + */ + private static final String SPAN_ATTRIBUTE_PREFIX = "inspectit.debug.action."; + + /** + * The action to decorate/warp. + */ + @NonNull + private final IHookAction action; + + /** + * The configuration of the decorated action. + */ + private final GenericActionConfig actionConfig; + + /** + * The name of the rule which defines the decorated action call. + */ + private final String sourceRuleName; + + @Override + public void execute(ExecutionContext context) { + if (!Tracing.getTracer().getCurrentSpan().getContext().isValid()) { + action.execute(context); + return; + } + + String spanName = DEBUG_SPAN_NAME_PREFIX + "action<" + action.getName() + ">"; + SpanBuilder spanBuilder; + if (context.getMethodHookSpan() == null) { + spanBuilder = Tracing.getTracer().spanBuilder(spanName); + } else { + spanBuilder = Tracing.getTracer().spanBuilderWithExplicitParent(spanName, context.getMethodHookSpan()); + } + + Span span = spanBuilder.startSpan(); + try { + recordAttribute(span, "bound-method", context.getHook().getMethodInformation().getMethodFQN()); + recordAttribute(span, "name", action.getName()); + recordAttribute(span, "enclosing-rule", sourceRuleName); + if (actionConfig != null) { + recordAttribute(span, "is-void", actionConfig.isVoid()); + } + + // method arguments + Object[] methodArguments = context.getMethodArguments(); + for (int i = 0; i < methodArguments.length; i++) { + recordAttribute(span, "method-argument." + i, methodArguments[i]); + } + + // context data + Iterable> contextData = context.getInspectitContext().getData(); + for (Map.Entry entry : contextData) { + recordAttribute(span, "context." + entry.getKey(), entry.getValue()); + } + + if (action instanceof BoundGenericAction) { + BoundGenericAction boundAction = (BoundGenericAction) this.action; + + recordAttribute(span, "data-key", boundAction.getDataKey()); + + // action arguments + if (actionConfig != null) { + Object[] argumentValues = boundAction.getActionArguments(context); + Iterator argumentNamesIterator = actionConfig.getActionArgumentTypes().keySet().iterator(); + for (int i = 0; argumentNamesIterator.hasNext(); i++) { + recordAttribute(span, "action-argument." + argumentNamesIterator.next(), argumentValues[i]); + } + } + + // actual call of the wrapped action + Object actionReturnValue = boundAction.executeImpl(context); + + // action result + if (actionConfig != null && !actionConfig.isVoid()) { + recordAttribute(span, "return-value", actionReturnValue); + } + } else { + action.execute(context); + } + } catch (Throwable throwable) { + recordAttribute(span, "error", throwable.getMessage()); + throw throwable; + } finally { + span.end(); + } + } + + @Override + public String getName() { + return action.getName(); + } + + private void recordAttribute(Span span, String name, Object value) { + span.putAttribute(SPAN_ATTRIBUTE_PREFIX + name, value != null ? AttributeValue.stringAttributeValue(value.toString()) : NULL_STRING_ATTRIBUTE); + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/injection/JigsawModuleInstrumenter.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/injection/JigsawModuleInstrumenter.java index 21c8ecd5e2..3a3b6d4876 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/injection/JigsawModuleInstrumenter.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/injection/JigsawModuleInstrumenter.java @@ -1,6 +1,9 @@ package rocks.inspectit.ocelot.core.instrumentation.injection; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.bootstrap.instrumentation.DoNotInstrumentMarker; @@ -8,11 +11,14 @@ import javax.annotation.PostConstruct; import java.lang.instrument.Instrumentation; import java.lang.reflect.Method; -import java.util.*; +import java.util.Collections; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** - * When using Java9+ classes are bundeld in modules with access restrictions. - * This class can be used to redefine the modules in order to make them accessible to inspectIT without illegal-access warnings. + * When using Java9+, classes are bundled in modules with access restrictions. + * This class can be used to redefine the modules in order to make them accessible to inspectIT without {@code illegal access} warnings. */ @Component @Slf4j @@ -23,6 +29,10 @@ public class JigsawModuleInstrumenter { */ private Method classGetModule; + private Method moduleGetPackages; + + private Method moduleIsNamed; + /** * Reference to Instrumentation.redefineModule (introduced in Java 9) */ @@ -39,10 +49,9 @@ public class JigsawModuleInstrumenter { private Object coreModule; /** - * Maps modules to the set of packages which have already been opened to the {@link #coreModule}. - * Prevents unnecessary duplicate invocations of {@link #instrumentationRedefineModule} + * Caches which modules have already been opened. */ - private WeakHashMap> enhancedModules = new WeakHashMap<>(); + private final Cache enhancedModules = CacheBuilder.newBuilder().weakKeys().build(); @Autowired private Instrumentation instrumentation; @@ -64,6 +73,8 @@ void init() throws NoSuchMethodException { try { classGetModule = Class.class.getMethod("getModule"); + moduleGetPackages = moduleClass.getMethod("getPackages"); + moduleIsNamed = moduleClass.getMethod("isNamed"); instrumentationRedefineModule = Instrumentation.class.getMethod("redefineModule", moduleClass, Set.class, Map.class, Map.class, Set.class, Map.class); } catch (NoSuchMethodException e) { log.error("Your JRE contains java.lang.Module but not the required methods!", e); @@ -74,6 +85,31 @@ void init() throws NoSuchMethodException { coreModule = getModuleOfClass(JigsawModuleInstrumenter.class); } + /** + * Redefines all modules to ensure modules can access bootstrap and core inspectIT modules. + * Extra reads and writes are added to modules by utilizing {@link #redefineModule(Object, Set, Map)}, which uses {@link Instrumentation#redefineModule(Module, Set, Map, Map, Set, Map)} under the hood. + * + * @param module The module to be redefined + */ + public synchronized void openModule(Object module) { + if (isModuleSystemAvailable()) { + if (enhancedModules.getIfPresent(module) == null) { + Set packages = getPackagesOfModule(module); + if (isNamed(module)) { + if (log.isDebugEnabled()) { + log.debug("Gaining access to package '{}' of module '{}'", StringUtils.join(packages, ", "), module); + } + Set extraReads = Collections.singleton(bootstrapModule); + Map> extraOpens = packages.stream() + .collect(Collectors.toMap(Object::toString, x -> Collections.singleton(coreModule))); + redefineModule(module, extraReads, extraOpens); + } + enhancedModules.put(module, true); + } + + } + } + /** * Instruments the module containing the given class in order to gain the required access rights. * Is a NOOP if the Java Version is 8. @@ -82,16 +118,8 @@ void init() throws NoSuchMethodException { */ public synchronized void openModule(Class containedClass) { if (isModuleSystemAvailable()) { - String packageName = containedClass.getPackage().getName(); Object module = getModuleOfClass(containedClass); - Set openedPackages = enhancedModules.computeIfAbsent(module, (m) -> new HashSet<>()); - if (!openedPackages.contains(packageName)) { - log.debug("Gaining access to package '{}' of module '{}'", packageName, module); - Set extraReads = Collections.singleton(bootstrapModule); - Map> extraOpens = Collections.singletonMap(packageName, Collections.singleton(coreModule)); - redefineModule(module, extraReads, extraOpens); - openedPackages.add(packageName); - } + openModule(module); } } @@ -104,18 +132,9 @@ public synchronized void openModule(Class containedClass) { * @param extraReads The set of Module to add as readable * @param extraOpens Maps packages to modules to which these packages shall be run-time visible (E.g. via deep reflection) */ - private void redefineModule(Object module, - Set extraReads, - Map> extraOpens) { + private void redefineModule(Object module, Set extraReads, Map> extraOpens) { try { - instrumentationRedefineModule.invoke(instrumentation, - module, - extraReads, - Collections.emptyMap(), - extraOpens, - Collections.emptySet(), - Collections.emptyMap() - ); + instrumentationRedefineModule.invoke(instrumentation, module, extraReads, Collections.emptyMap(), extraOpens, Collections.emptySet(), Collections.emptyMap()); } catch (Exception e) { log.error("Error redefining module {}", module, e); } @@ -125,6 +144,7 @@ private void redefineModule(Object module, * Invokes the java 9 Class.getModule() function (never returns null) * * @param clazz the class to query the module of + * * @return the module of the given class, never null */ private Object getModuleOfClass(Class clazz) { @@ -135,6 +155,37 @@ private Object getModuleOfClass(Class clazz) { } } + /** + * Invokes the Java 9 {@link Module#isNamed()} function + * + * @param module The Module instance + * + * @return true if it is a named module, false otherwise + */ + private boolean isNamed(Object module) { + try { + return (boolean) moduleIsNamed.invoke(module); + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + + /** + * Invokes the Java 9 {@link Module#getPackages()} function + * + * @param module The Module instance + * + * @return Returns the set of package names for the packages in this module. + */ + private Set getPackagesOfModule(Object module) { + try { + Set packages = (Set) moduleGetPackages.invoke(module); + return packages; + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + private boolean isModuleSystemAvailable() { return classGetModule != null; } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/CallableContextAttachSensor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/CallableContextAttachSensor.java index 8690a0c6c3..cec50dc93d 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/CallableContextAttachSensor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/CallableContextAttachSensor.java @@ -9,6 +9,7 @@ import rocks.inspectit.ocelot.bootstrap.Instances; import rocks.inspectit.ocelot.bootstrap.context.ContextTuple; import rocks.inspectit.ocelot.config.model.instrumentation.SpecialSensorSettings; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationConfiguration; import java.util.concurrent.Callable; @@ -25,8 +26,8 @@ public class CallableContextAttachSensor implements SpecialSensor { private static final ElementMatcher CLASSES_MATCHER = isSubTypeOf(Callable.class); @Override - public boolean shouldInstrument(Class clazz, InstrumentationConfiguration settings) { - TypeDescription type = TypeDescription.ForLoadedType.of(clazz); + public boolean shouldInstrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings) { + TypeDescription type = typeWithLoader.getType(); SpecialSensorSettings sensorSettings = settings.getSource().getSpecial(); boolean enabled = sensorSettings.isScheduledExecutorContextPropagation() || @@ -37,12 +38,12 @@ public boolean shouldInstrument(Class clazz, InstrumentationConfiguration set } @Override - public boolean requiresInstrumentationChange(Class clazz, InstrumentationConfiguration first, InstrumentationConfiguration second) { + public boolean requiresInstrumentationChange(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration first, InstrumentationConfiguration second) { return false; //if the sensor stays active it never requires changes } @Override - public DynamicType.Builder instrument(Class clazz, InstrumentationConfiguration settings, DynamicType.Builder builder) { + public DynamicType.Builder instrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings, DynamicType.Builder builder) { return builder.visit(CallableCallAdvice.TARGET); } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ClassLoaderDelegation.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ClassLoaderDelegation.java index 4f0ff0833f..36bbec7dc4 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ClassLoaderDelegation.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ClassLoaderDelegation.java @@ -7,20 +7,25 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.matcher.ElementMatcher; +import org.apache.commons.lang3.tuple.Pair; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.bootstrap.instrumentation.ClassLoaderDelegationMarker; import rocks.inspectit.ocelot.config.model.instrumentation.SpecialSensorSettings; import rocks.inspectit.ocelot.core.instrumentation.InstrumentationTriggerer; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationConfiguration; +import rocks.inspectit.ocelot.core.instrumentation.event.IClassDiscoveryListener; import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; import static net.bytebuddy.matcher.ElementMatchers.*; /** - * This component performs an instrumentation of {@link ClassLoader}s if. + * This component performs an instrumentation of {@link ClassLoader}s. * This is required to make our bootstrap classes accessible in custom module systems, such as OSGi. *

* The instrumentation is triggered through the {@link InstrumentationTriggerer}, @@ -29,7 +34,7 @@ */ @Component @Slf4j -public class ClassLoaderDelegation implements SpecialSensor { +public class ClassLoaderDelegation implements SpecialSensor, IClassDiscoveryListener { static { //ensure that this bootstrap class is loaded BEFORE any classloader is instrumented @@ -41,36 +46,36 @@ public class ClassLoaderDelegation implements SpecialSensor { * We never deinstrument a classloader after we instrument it, even if {@link SpecialSensorSettings#isClassLoaderDelegation()} * is changed to false. */ - private final Set> instrumentedClassloaderClasses = Collections.newSetFromMap( - CacheBuilder.newBuilder().weakKeys()., Boolean>build().asMap()); + private final InstrumentedClassLoaderCache instrumentedClassLoaderCache = new InstrumentedClassLoaderCache(); - private final ElementMatcher LOAD_CLASS_MATCHER = - named("loadClass").and( - takesArguments(String.class, boolean.class) - .or(takesArguments(String.class))); + private final ElementMatcher LOAD_CLASS_MATCHER = named("loadClass").and(takesArguments(String.class, boolean.class).or(takesArguments(String.class))); - private final ElementMatcher CLASS_LOADER_MATCHER = - isSubTypeOf(ClassLoader.class) - .and(not(nameStartsWith("java."))) - .and(declaresMethod(LOAD_CLASS_MATCHER)); + private final ElementMatcher CLASS_LOADER_MATCHER = isSubTypeOf(ClassLoader.class).and(not(nameStartsWith("java."))) + .and(declaresMethod(LOAD_CLASS_MATCHER)); @Override - public boolean shouldInstrument(Class clazz, InstrumentationConfiguration settings) { - boolean isClassLoader = CLASS_LOADER_MATCHER.matches(TypeDescription.ForLoadedType.of(clazz)); + public void onNewClassesDiscovered(Set> newClasses) { + instrumentedClassLoaderCache.onNewClassesDiscovered(newClasses); + } + + @Override + public boolean shouldInstrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings) { + + boolean isClassLoader = CLASS_LOADER_MATCHER.matches(typeWithLoader.getType()); boolean cldEnabled = settings.getSource().getSpecial().isClassLoaderDelegation(); //we never de instrument a classloader we previously instrumented - return instrumentedClassloaderClasses.contains(clazz) || (isClassLoader && cldEnabled); + return instrumentedClassLoaderCache.contains(typeWithLoader) || (isClassLoader && cldEnabled); } @Override - public boolean requiresInstrumentationChange(Class clazz, InstrumentationConfiguration first, InstrumentationConfiguration second) { + public boolean requiresInstrumentationChange(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration first, InstrumentationConfiguration second) { return false; } @Override - public DynamicType.Builder instrument(Class clazz, InstrumentationConfiguration settings, DynamicType.Builder builder) { + public DynamicType.Builder instrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings, DynamicType.Builder builder) { //remember that this classloader was instrumented - instrumentedClassloaderClasses.add(clazz); + instrumentedClassLoaderCache.add(typeWithLoader); return builder.visit(Advice.to(ClassloaderDelegationAdvice.class).on(LOAD_CLASS_MATCHER)); } @@ -97,8 +102,8 @@ private void getClassLoaderClassesRequiringRetransformation(Class classLoader getClassLoaderClassesRequiringRetransformation(superClass, result); } - TypeDescription desc = TypeDescription.ForLoadedType.of(classLoaderClass); - if (!instrumentedClassloaderClasses.contains(classLoaderClass) && CLASS_LOADER_MATCHER.matches(desc)) { + TypeDescriptionWithClassLoader typeWithLoader = TypeDescriptionWithClassLoader.of(classLoaderClass); + if (!instrumentedClassLoaderCache.contains(typeWithLoader) && CLASS_LOADER_MATCHER.matches(typeWithLoader.getType())) { ClassLoader loadingClassLoader = classLoaderClass.getClassLoader(); if (loadingClassLoader != null) { getClassLoaderClassesRequiringRetransformation(loadingClassLoader.getClass(), result); @@ -141,4 +146,70 @@ public static void exit(@Advice.Enter Class resultClass, @Advice.Return(readO } } } + + /** + * Utility class to keep track of implemented ClassLoaders. + * We need a two-step caching here to support instrumenting ClassLoaders on first load, hence we have no class to cache with weak keys. + * This will only happen if async instrumentation is disabled! + * If the instrumented ClassLoader is finally loaded, it is moved to a final cache to ensure unloaded ClassLoaders will be removed from cache + * and on reload the same ClassLoader will be instrumented again. + */ + @Slf4j + private static class InstrumentedClassLoaderCache implements IClassDiscoveryListener { + + /** + * Temporary cache to store instrumented ClassLoader class names with the related ClassLoader. + * We opted for {@link Set} instead of {@link java.util.Map}, as it is possibly to have different class loaders with the same name, see also https://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html. + */ + private final Set> instrumentedClassLoadersByName = Collections.newSetFromMap(new ConcurrentHashMap<>()); + + /** + * Final cache to store weak references of the instrumented ClassLoaders + */ + private final Set> instrumentedClassLoaderClasses = Collections.newSetFromMap(CacheBuilder.newBuilder() + .weakKeys() + ., Boolean>build() + .asMap()); + + public boolean contains(TypeDescriptionWithClassLoader typeWithLoader) { + return instrumentedClassLoadersByName.contains(toPair(typeWithLoader)) || instrumentedClassLoaderClasses.contains(typeWithLoader.getRelatedClass()); + } + + public void add(TypeDescriptionWithClassLoader typeWithLoader) { + // only possible if async instrumentation is enabled + if (typeWithLoader.getRelatedClass() != null) { + instrumentedClassLoaderClasses.add(typeWithLoader.getRelatedClass()); + } else { + instrumentedClassLoadersByName.add(toPair(typeWithLoader)); + } + } + + /** + * Moves all instrumented ClassLoaders from {@link #instrumentedClassLoadersByName} to {@link #instrumentedClassLoaderClasses} + * + * @param newClasses the set of newly discovered classes + */ + @Override + public void onNewClassesDiscovered(Set> newClasses) { + newClasses.forEach(clazz -> { + Pair tmp = Pair.of(clazz.getName(), clazz.getClassLoader()); + if (instrumentedClassLoadersByName.contains(tmp)) { + instrumentedClassLoaderClasses.add(clazz); + instrumentedClassLoadersByName.remove(tmp); + } + }); + if (log.isDebugEnabled()) { + if (instrumentedClassLoadersByName.size() > 0) { + log.debug("Pending ClassLoaders to be transferred to final class cache:{}", instrumentedClassLoadersByName.stream() + .map(Pair::getLeft) + .collect(Collectors.joining(", "))); + } + } + } + + private Pair toPair(TypeDescriptionWithClassLoader typeWithLoader) { + return Pair.of(typeWithLoader.getName(), typeWithLoader.getLoader()); + } + } + } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ExecutorContextPropagationSensor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ExecutorContextPropagationSensor.java index 6013617aba..51eff6d39b 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ExecutorContextPropagationSensor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ExecutorContextPropagationSensor.java @@ -7,6 +7,7 @@ import net.bytebuddy.matcher.ElementMatcher; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.bootstrap.Instances; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationConfiguration; import java.util.concurrent.Executor; @@ -24,19 +25,19 @@ public class ExecutorContextPropagationSensor implements SpecialSensor { private static final ElementMatcher EXECUTER_CLASSES_MATCHER = isSubTypeOf(Executor.class); @Override - public boolean shouldInstrument(Class clazz, InstrumentationConfiguration settings) { - TypeDescription type = TypeDescription.ForLoadedType.of(clazz); + public boolean shouldInstrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings) { + TypeDescription type = typeWithLoader.getType(); return settings.getSource().getSpecial().isExecutorContextPropagation() && EXECUTER_CLASSES_MATCHER.matches(type); } @Override - public boolean requiresInstrumentationChange(Class clazz, InstrumentationConfiguration first, InstrumentationConfiguration second) { + public boolean requiresInstrumentationChange(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration first, InstrumentationConfiguration second) { return false; //if the sensor stays active it never requires changes } @Override - public DynamicType.Builder instrument(Class clazz, InstrumentationConfiguration conf, DynamicType.Builder builder) { + public DynamicType.Builder instrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration conf, DynamicType.Builder builder) { return builder.visit(ExecutorAdvice.TARGET); } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/RunnableContextAttachSensor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/RunnableContextAttachSensor.java index 40fc921761..1419a3dd73 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/RunnableContextAttachSensor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/RunnableContextAttachSensor.java @@ -9,6 +9,7 @@ import rocks.inspectit.ocelot.bootstrap.Instances; import rocks.inspectit.ocelot.bootstrap.context.ContextTuple; import rocks.inspectit.ocelot.config.model.instrumentation.SpecialSensorSettings; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationConfiguration; import static net.bytebuddy.matcher.ElementMatchers.*; @@ -26,8 +27,8 @@ public class RunnableContextAttachSensor implements SpecialSensor { private static final ElementMatcher CLASSES_MATCHER = isSubTypeOf(Runnable.class); @Override - public boolean shouldInstrument(Class clazz, InstrumentationConfiguration settings) { - TypeDescription type = TypeDescription.ForLoadedType.of(clazz); + public boolean shouldInstrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings) { + TypeDescription type = typeWithLoader.getType(); SpecialSensorSettings sensorSettings = settings.getSource().getSpecial(); boolean enabled = sensorSettings.isScheduledExecutorContextPropagation() || @@ -38,12 +39,12 @@ public boolean shouldInstrument(Class clazz, InstrumentationConfiguration set } @Override - public boolean requiresInstrumentationChange(Class clazz, InstrumentationConfiguration first, InstrumentationConfiguration second) { + public boolean requiresInstrumentationChange(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration first, InstrumentationConfiguration second) { return false; //if the sensor stays active it never requires changes } @Override - public DynamicType.Builder instrument(Class clazz, InstrumentationConfiguration settings, DynamicType.Builder builder) { + public DynamicType.Builder instrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings, DynamicType.Builder builder) { return builder.visit(RunnableRunAdvice.TARGET); } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ScheduledExecutorContextPropagationSensor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ScheduledExecutorContextPropagationSensor.java index 1bcb63eb17..0ca46621e1 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ScheduledExecutorContextPropagationSensor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ScheduledExecutorContextPropagationSensor.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.bootstrap.Instances; import rocks.inspectit.ocelot.bootstrap.context.IContextManager; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationConfiguration; import java.util.concurrent.Callable; @@ -57,18 +58,18 @@ public class ScheduledExecutorContextPropagationSensor implements SpecialSensor private static final ElementMatcher CLASSES_MATCHER = isSubTypeOf(ScheduledExecutorService.class); @Override - public boolean shouldInstrument(Class clazz, InstrumentationConfiguration settings) { - val type = TypeDescription.ForLoadedType.of(clazz); + public boolean shouldInstrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings) { + val type = typeWithLoader.getType(); return settings.getSource().getSpecial().isScheduledExecutorContextPropagation() && CLASSES_MATCHER.matches(type); } @Override - public boolean requiresInstrumentationChange(Class clazz, InstrumentationConfiguration first, InstrumentationConfiguration second) { + public boolean requiresInstrumentationChange(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration first, InstrumentationConfiguration second) { return false; //if the sensor stays active it never requires changes } @Override - public DynamicType.Builder instrument(Class clazz, InstrumentationConfiguration settings, DynamicType.Builder builder) { + public DynamicType.Builder instrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings, DynamicType.Builder builder) { return builder .visit(ScheduledExecutorRunnableAdvice.TARGET) .visit(ScheduledExecutorRunnableContinuousAdvice.TARGET) diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/SpecialSensor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/SpecialSensor.java index e51a73cab3..0b690867b4 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/SpecialSensor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/SpecialSensor.java @@ -1,44 +1,48 @@ package rocks.inspectit.ocelot.core.instrumentation.special; import net.bytebuddy.dynamic.DynamicType; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationConfiguration; public interface SpecialSensor { /** * Evaluates for the given type if this sensor requires a instrumentation given a configuration. - * If this method returns true, {@link #instrument(Class, InstrumentationConfiguration, DynamicType.Builder)} + * If this method returns true, {@link #instrument(TypeDescriptionWithClassLoader, InstrumentationConfiguration, DynamicType.Builder)} * will be called later to perform the instrumentation. * - * @param clazz the type to check for - * @param settings the configuration ot check for + * @param typeWithLoader the type to check for + * @param settings the configuration ot check for + * * @return true if this sensor is active and requires an instrumentation for the given type under the given configuration */ - boolean shouldInstrument(Class clazz, InstrumentationConfiguration settings); + boolean shouldInstrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings); /** * Evaluates whether the instrumentation has to change given a certain configuration change. * This is invoked to decide if it is necessary to re-instrument a class given a configuration change. *

- * It is guaranteed that this method is only invoked if {@link #shouldInstrument(Class, InstrumentationConfiguration)} + * It is guaranteed that this method is only invoked if {@link #shouldInstrument(TypeDescriptionWithClassLoader, InstrumentationConfiguration)} * return true for both given configurations for the given type, therefore this does not need to be checked. * - * @param clazz the type to check for - * @param first the first configuration - * @param second the second configuration + * @param typeWithLoader the type to check for + * @param first the first configuration + * @param second the second configuration + * * @return true, if a configuration change from "first" to "second" (or vice-versa) would require a change in the bytecode added by this sensor. */ - boolean requiresInstrumentationChange(Class clazz, InstrumentationConfiguration first, InstrumentationConfiguration second); + boolean requiresInstrumentationChange(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration first, InstrumentationConfiguration second); /** * Apply the given instrumentation on the given type. - * This method is guaranteed to be only invoked when {@link #shouldInstrument(Class, InstrumentationConfiguration)} for the same parameters returns true. + * This method is guaranteed to be only invoked when {@link #shouldInstrument(TypeDescriptionWithClassLoader, InstrumentationConfiguration)} for the same parameters returns true. + * + * @param typeWithLoader the class being instrumented + * @param settings the configuration to apply + * @param builder the builder to use for defining the instrumentation * - * @param clazz the class being instrumented - * @param settings the configuration to apply - * @param builder the builder to use for defining the instrumentation * @return the altered builder */ - DynamicType.Builder instrument(Class clazz, InstrumentationConfiguration settings, DynamicType.Builder builder); + DynamicType.Builder instrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings, DynamicType.Builder builder); } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ThreadStartContextPropagationSensor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ThreadStartContextPropagationSensor.java index 1eb0acf832..465b59df18 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ThreadStartContextPropagationSensor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/ThreadStartContextPropagationSensor.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.bootstrap.Instances; import rocks.inspectit.ocelot.bootstrap.context.IContextManager; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationConfiguration; import static net.bytebuddy.matcher.ElementMatchers.*; @@ -28,18 +29,18 @@ public class ThreadStartContextPropagationSensor implements SpecialSensor { private static final ElementMatcher CLASSES_MATCHER = is(Thread.class).or(isSubTypeOf(Thread.class)); @Override - public boolean shouldInstrument(Class clazz, InstrumentationConfiguration settings) { - TypeDescription type = TypeDescription.ForLoadedType.of(clazz); + public boolean shouldInstrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings) { + TypeDescription type = typeWithLoader.getType(); return settings.getSource().getSpecial().isThreadStartContextPropagation() && CLASSES_MATCHER.matches(type); } @Override - public boolean requiresInstrumentationChange(Class clazz, InstrumentationConfiguration first, InstrumentationConfiguration second) { + public boolean requiresInstrumentationChange(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration first, InstrumentationConfiguration second) { return false; //if the sensor stays active it never requires changes } @Override - public DynamicType.Builder instrument(Class clazz, InstrumentationConfiguration settings, DynamicType.Builder builder) { + public DynamicType.Builder instrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings, DynamicType.Builder builder) { return builder .visit(ThreadStartAdvice.TARGET) .visit(ThreadRunAdvice.TARGET); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/traceinjector/Log4J2TraceIdAutoInjector.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/traceinjector/Log4J2TraceIdAutoInjector.java index 7cf0c31a7f..ce1fa6d299 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/traceinjector/Log4J2TraceIdAutoInjector.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/traceinjector/Log4J2TraceIdAutoInjector.java @@ -8,6 +8,7 @@ import net.bytebuddy.matcher.ElementMatcher; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.bootstrap.Instances; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationConfiguration; import rocks.inspectit.ocelot.core.instrumentation.special.SpecialSensor; @@ -25,18 +26,18 @@ public class Log4J2TraceIdAutoInjector implements SpecialSensor { private static final ElementMatcher CLASSES_MATCHER = hasSuperType(named("org.apache.logging.log4j.message.MessageFactory")); @Override - public boolean shouldInstrument(Class clazz, InstrumentationConfiguration settings) { - TypeDescription type = TypeDescription.ForLoadedType.of(clazz); + public boolean shouldInstrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings) { + TypeDescription type = typeWithLoader.getType(); return settings.getTracingSettings().getLogCorrelation().getTraceIdAutoInjection().isEnabled() && CLASSES_MATCHER.matches(type); } @Override - public boolean requiresInstrumentationChange(Class clazz, InstrumentationConfiguration first, InstrumentationConfiguration second) { + public boolean requiresInstrumentationChange(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration first, InstrumentationConfiguration second) { return false; //if the sensor stays active it never requires changes } @Override - public DynamicType.Builder instrument(Class clazz, InstrumentationConfiguration settings, DynamicType.Builder builder) { + public DynamicType.Builder instrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings, DynamicType.Builder builder) { return builder .visit(NewMessageCharSequenceAdvice.TARGET) .visit(NewMessageObjectAdvice.TARGET); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/traceinjector/Log4JTraceIdAutoInjector.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/traceinjector/Log4JTraceIdAutoInjector.java index fdd64ae3a3..79501e1dbf 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/traceinjector/Log4JTraceIdAutoInjector.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/special/traceinjector/Log4JTraceIdAutoInjector.java @@ -7,6 +7,7 @@ import net.bytebuddy.matcher.ElementMatcher; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.bootstrap.Instances; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationConfiguration; import rocks.inspectit.ocelot.core.instrumentation.special.SpecialSensor; @@ -24,18 +25,18 @@ public class Log4JTraceIdAutoInjector implements SpecialSensor { private static final ElementMatcher CLASSES_MATCHER = is(named("org.apache.log4j.Category")).or(hasSuperType(named("org.apache.log4j.Category"))); @Override - public boolean shouldInstrument(Class clazz, InstrumentationConfiguration settings) { - TypeDescription type = TypeDescription.ForLoadedType.of(clazz); + public boolean shouldInstrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings) { + TypeDescription type = typeWithLoader.getType(); return settings.getTracingSettings().getLogCorrelation().getTraceIdAutoInjection().isEnabled() && CLASSES_MATCHER.matches(type); } @Override - public boolean requiresInstrumentationChange(Class clazz, InstrumentationConfiguration first, InstrumentationConfiguration second) { + public boolean requiresInstrumentationChange(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration first, InstrumentationConfiguration second) { return false; //if the sensor stays active it never requires changes } @Override - public DynamicType.Builder instrument(Class clazz, InstrumentationConfiguration settings, DynamicType.Builder builder) { + public DynamicType.Builder instrument(TypeDescriptionWithClassLoader typeWithLoader, InstrumentationConfiguration settings, DynamicType.Builder builder) { return builder .visit(ForcedLogAdvice.TARGET); } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/AsyncClassTransformer.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/AbstractClassTransformer.java similarity index 60% rename from inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/AsyncClassTransformer.java rename to inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/AbstractClassTransformer.java index 889b008eda..90b68fcf12 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/AsyncClassTransformer.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/AbstractClassTransformer.java @@ -1,11 +1,9 @@ -package rocks.inspectit.ocelot.core.instrumentation; +package rocks.inspectit.ocelot.core.instrumentation.transformer; -import com.google.common.annotations.VisibleForTesting; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import lombok.val; import net.bytebuddy.ByteBuddy; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -16,129 +14,167 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.core.config.InspectitConfigChangedEvent; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.InstrumentationConfigurationResolver; import rocks.inspectit.ocelot.core.instrumentation.config.model.ClassInstrumentationConfiguration; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationRule; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationScope; import rocks.inspectit.ocelot.core.instrumentation.event.ClassInstrumentedEvent; -import rocks.inspectit.ocelot.core.instrumentation.event.IClassDefinitionListener; import rocks.inspectit.ocelot.core.instrumentation.event.TransformerShutdownEvent; import rocks.inspectit.ocelot.core.instrumentation.hook.DispatchHookAdvices; import rocks.inspectit.ocelot.core.instrumentation.injection.JigsawModuleInstrumenter; -import rocks.inspectit.ocelot.core.instrumentation.special.ClassLoaderDelegation; import rocks.inspectit.ocelot.core.instrumentation.special.SpecialSensor; import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; import rocks.inspectit.ocelot.core.utils.CoreUtils; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; import java.lang.instrument.Instrumentation; import java.security.ProtectionDomain; import java.util.*; /** - * A class transformer applying all inspectIT instrumentations. - * This transform only instrument classes when they are redefined / retransformed!. + * Base for all classes which should act as {@link java.lang.instrument.ClassFileTransformer}s. Anyway, we introduced + * a custom {@link ClassTransformer} interface to ease Java8 and Java9 interoperability. */ -@Component @Slf4j -public class AsyncClassTransformer implements ClassFileTransformer { +public abstract class AbstractClassTransformer implements ClassTransformer { - @Autowired - private InspectitEnvironment env; + /** + * A lock for safely accessing {@link #shuttingDown} in combination with {@link #instrumentedClasses}. + */ + protected final Object shutDownLock = new Object(); @Autowired - private ApplicationContext ctx; + protected ApplicationContext ctx; @Autowired - private Instrumentation instrumentation; + protected Instrumentation instrumentation; @Autowired - private InstrumentationConfigurationResolver configResolver; + protected InstrumentationConfigurationResolver configResolver; @Autowired - private SelfMonitoringService selfMonitoring; + protected InspectitEnvironment env; @Autowired - @VisibleForTesting - List classDefinitionListeners; + private SelfMonitoringService selfMonitoring; @Autowired private JigsawModuleInstrumenter moduleManager; - @Autowired - private ClassLoaderDelegation classLoaderDelegation; - /** * Detects if the instrumenter is in the process of shutting down. * When it is shutting down, no new instrumentations are added anymore, instead all existing instrumentations are removed. */ @Getter - private volatile boolean shuttingDown = false; - - /** - * A lock for safely accessing {@link #shuttingDown} in combination with {@link #instrumentedClasses}. - */ - private final Object shutDownLock = new Object(); + protected volatile boolean shuttingDown = false; /** * Stores all classes which have been instrumented with a configuration different - * than {@link ClassInstrumentationConfiguration#NO_INSTRUMENTATION}. + * form {@link ClassInstrumentationConfiguration#NO_INSTRUMENTATION}. *

* Package private for testing. */ Cache, Boolean> instrumentedClasses = CacheBuilder.newBuilder().weakKeys().build(); @Override - public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] bytecode) throws IllegalClassFormatException { - if (classBeingRedefined == null) { // class is not loaded yet! we only redefine only loaded classes to prevent blocking - classDefinitionListeners.forEach(lis -> lis.onNewClassDefined(className, loader)); - return bytecode; //leave the class unchanged for now - + public void destroy() { + // this lock guarantees through updateAndGetActiveConfiguration that no instrumentation is added after the lock is released + synchronized (shutDownLock) { + shuttingDown = true; } - - //retransforms can be triggered by other agents where the classloader delegation has not been applied yet - if (!classLoaderDelegation.getClassLoaderClassesRequiringRetransformation(loader, configResolver.getCurrentConfig()) - .isEmpty()) { - log.debug("Skipping instrumentation of {} as bootstrap classes were not made available yet for the class", className); - return bytecode; //leave the class unchanged for now - } else { - return instrumentBytecode(classBeingRedefined, bytecode); + ctx.publishEvent(new TransformerShutdownEvent(this)); + if (!CoreUtils.isJVMShuttingDown()) { + deinstrumentAllClasses(); } } - @PostConstruct - void init() { - instrumentation.addTransformer(this, true); + @Override + public byte[] transform(Object module, ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { + String classNameInDotNotation = className.replace("/", "."); + if (InstrumentationConfigurationResolver.isClassFromIgnoredPackage(env.getCurrentConfig() + .getInstrumentation(), classNameInDotNotation, loader)) { + return classfileBuffer; + } + if (module != null) { + moduleManager.openModule(module); + } + return doTransform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer); } /** - * Removes all applied instrumentations if the JVM is not shutting down but the agent is. + * Entry point for subclasses to implemented their transformation */ - @PreDestroy - void destroy() { - // this lock guarantees through updateAndGetActiveConfiguration that no instrumentation is added after the lock is released - synchronized (shutDownLock) { - shuttingDown = true; + public abstract byte[] doTransform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException; + + /** + * Applies the {@link ClassInstrumentationConfiguration} to the provided bytecode. If modification fails, uninstrumented bytecode is returned. + * + * @param typeWithLoader The {@link TypeDescriptionWithClassLoader} representing this class to be instrumented + * @param classBeingRedefined If this is triggered by a redefine or retransform, the class being redefined or retransformed; if this is a class load, null + * @param bytecode The bytecode to by modified + * @param classConf The {@link ClassInstrumentationConfiguration} for the class to be instrumented + * + * @return The modified bytecode + */ + protected byte[] instrumentByteCode(TypeDescriptionWithClassLoader typeWithLoader, Class classBeingRedefined, byte[] bytecode, ClassInstrumentationConfiguration classConf) { + try { + if (classConf.isNoInstrumentation()) { + return bytecode; + } + + if (log.isDebugEnabled()) { + log.debug("Redefining class: {}", typeWithLoader.getName()); + } + + // Make a ByteBuddy builder based on the input bytecode + ClassFileLocator bytecodeClassFileLocator = ClassFileLocator.Simple.of(typeWithLoader.getName(), bytecode); + // See https://github.com/raphw/byte-buddy/issues/1095 and https://github.com/raphw/byte-buddy/issues/1040 + // why we are using the different method graph and decorate function here + DynamicType.Builder builder = new ByteBuddy().with(MethodGraph.Compiler.ForDeclaredMethods.INSTANCE) + .decorate(typeWithLoader.getType(), bytecodeClassFileLocator); + + // Apply the actual instrumentation onto the builders + for (SpecialSensor specialSensor : classConf.getActiveSpecialSensors()) { + builder = specialSensor.instrument(typeWithLoader, classConf.getActiveConfiguration(), builder); + } + + // Apply the instrumentation hook + ElementMatcher.Junction methodMatcher = getCombinedMethodMatcher(typeWithLoader.getType(), classConf); + if (methodMatcher != null) { + builder = DispatchHookAdvices.adviceOn(builder, methodMatcher); + } + + // "Compile" the builder to bytecode + DynamicType.Unloaded instrumentedClass = builder.make(); + + if (classBeingRedefined != null) { + dispatchClassInstrumentedEvent(classBeingRedefined, typeWithLoader.getType(), classConf); + } + + return instrumentedClass.getBytes(); + } catch (Throwable throwable) { + log.warn("Could not instrument class '{}' due to an error during bytecode generation.", typeWithLoader.getName(), throwable); + return bytecode; } - ctx.publishEvent(new TransformerShutdownEvent(this)); - if (!CoreUtils.isJVMShuttingDown()) { - deinstrumentAllClasses(); + } + + protected void dispatchClassInstrumentedEvent(Class clazz, TypeDescription type, ClassInstrumentationConfiguration classConf) { + if (!shuttingDown) { + //Notify listeners that this class has been instrumented (or deinstrumented) + ClassInstrumentedEvent event = new ClassInstrumentedEvent(this, clazz, type, classConf); + ctx.publishEvent(event); } - instrumentation.removeTransformer(this); } /** * Triggers a retransformation for all instrumented classes until none is instrumented anymore. - * Therefore this class expects that {@link #shuttingDown} is already set to true. + * Therefore, this class expects that {@link #shuttingDown} is already set to true. * When {@link #shuttingDown} is true, for every retransformed class any instrumentation is removed automatically. */ - private void deinstrumentAllClasses() { + protected void deinstrumentAllClasses() { //we deinstrument classloaders last to prevent classloading issues with the classloader delegation Set> instrumentedClassLoaders = new HashSet<>(); @@ -188,67 +224,15 @@ private void removeInstrumentationForBatch(List> batchClasses) { } } - private byte[] instrumentBytecode(Class targetClass, byte[] bytecode) { - try { - //load the type description and the desired instrumentation - TypeDescription type = TypeDescription.ForLoadedType.of(targetClass); - ClassInstrumentationConfiguration classConf = updateAndGetActiveConfiguration(targetClass, type); - - byte[] instrumentedBytecode; - if (classConf.isNoInstrumentation()) { - // we do not want to instrument this class -> we return the original bytecode - instrumentedBytecode = bytecode; - } else { - if (log.isDebugEnabled()) { - log.debug("Redefining class: {}", type.getName()); - } - moduleManager.openModule(targetClass); - - // Make a ByteBuddy builder based on the input bytecode - ClassFileLocator bytecodeClassFileLocator = ClassFileLocator.Simple.of(type.getName(), bytecode); - // See https://github.com/raphw/byte-buddy/issues/1095 and https://github.com/raphw/byte-buddy/issues/1040 - // why we are using the different method graph and decorate function here - DynamicType.Builder builder = new ByteBuddy().with(MethodGraph.Compiler.ForDeclaredMethods.INSTANCE) - .decorate(type, bytecodeClassFileLocator); - - // Apply the actual instrumentation onto the builders - for (SpecialSensor specialSensor : classConf.getActiveSpecialSensors()) { - builder = specialSensor.instrument(targetClass, classConf.getActiveConfiguration(), builder); - } - - // Apply the instrumentation hook - ElementMatcher.Junction methodMatcher = getCombinedMethodMatcher(targetClass, classConf); - if (methodMatcher != null) { - builder = DispatchHookAdvices.adviceOn(builder, methodMatcher); - } - - // "Compile" the builder to bytecode - DynamicType.Unloaded instrumentedClass = builder.make(); - instrumentedBytecode = instrumentedClass.getBytes(); - } - - if (!shuttingDown) { - //Notify listeners that this class has been instrumented (or deinstrumented) - val event = new ClassInstrumentedEvent(this, targetClass, type, classConf); - ctx.publishEvent(event); - } - - return instrumentedBytecode; - } catch (Throwable e) { - log.warn("Could not instrument class '{}' due to an error during bytecode generation.", targetClass.getName(), e); - return bytecode; - } - } - /** * Combining all method matchers of the matching rules in order to prevent multiple injections of the advice. */ - private ElementMatcher.Junction getCombinedMethodMatcher(Class clazz, ClassInstrumentationConfiguration classConfig) { + private ElementMatcher.Junction getCombinedMethodMatcher(TypeDescription type, ClassInstrumentationConfiguration classConfig) { ElementMatcher.Junction methodMatcher = null; for (InstrumentationRule rule : classConfig.getActiveRules()) { if (log.isDebugEnabled()) { - log.debug("Added hook to {} due to rule '{}'.", clazz, rule.getName()); + log.debug("Added hook to {} due to rule '{}'.", type.getName(), rule.getName()); } for (InstrumentationScope scope : rule.getScopes()) { if (log.isTraceEnabled()) { @@ -267,17 +251,16 @@ private ElementMatcher.Junction getCombinedMethodMatcher(Clas } /** - * Derives the {@link ClassInstrumentationConfiguration} based on the latest environment configuration for a given type. + * Derives the {@link ClassInstrumentationConfiguration} based on the latest environment configuration for a given class. * In addition the class is added to {@link #instrumentedClasses} if it is instrumented or removed from the set otherwise. * If the class transformer is shutting down, this returns {@link ClassInstrumentationConfiguration#NO_INSTRUMENTATION} * for every class (= all classes should be deinstrumented). * - * @param classBeingRedefined the class to check for - * @param type the classes type description + * @param classBeingRedefined the {@link Class} * - * @return + * @return Then updated {@link ClassInstrumentationConfiguration} */ - private ClassInstrumentationConfiguration updateAndGetActiveConfiguration(Class classBeingRedefined, TypeDescription type) { + protected ClassInstrumentationConfiguration updateAndGetActiveConfiguration(Class classBeingRedefined) { ClassInstrumentationConfiguration classConf = configResolver.getClassInstrumentationConfiguration(classBeingRedefined); synchronized (shutDownLock) { @@ -302,5 +285,4 @@ private ClassInstrumentationConfiguration updateAndGetActiveConfiguration(Class< private void selfMonitorInstrumentedClassesCount() { selfMonitoring.recordMeasurement("instrumented-classes", instrumentedClasses.size()); } - } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/AsyncClassTransformer.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/AsyncClassTransformer.java new file mode 100644 index 0000000000..85a35365d9 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/AsyncClassTransformer.java @@ -0,0 +1,52 @@ +package rocks.inspectit.ocelot.core.instrumentation.transformer; + +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; +import rocks.inspectit.ocelot.core.instrumentation.event.IClassDefinitionListener; +import rocks.inspectit.ocelot.core.instrumentation.special.ClassLoaderDelegation; + +import java.lang.instrument.IllegalClassFormatException; +import java.security.ProtectionDomain; +import java.util.List; + +/** + * Async {@link ClassTransformer} implementation. This is the default implementation to avoid unnecessary blocking + * at application boot time. + */ +@Component +@Slf4j +public class AsyncClassTransformer extends AbstractClassTransformer { + + @Autowired + @VisibleForTesting + List classDefinitionListeners; + + @Autowired + private ClassLoaderDelegation classLoaderDelegation; + + @Override + public boolean isEnabled() { + return env.getCurrentConfig().getInstrumentation().getInternal().isAsync(); + } + + @Override + public byte[] doTransform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] bytecode) throws IllegalClassFormatException { + if (classBeingRedefined == null) { // class is not loaded yet! we redefine only loaded classes to prevent blocking + classDefinitionListeners.forEach(lis -> lis.onNewClassDefined(className, loader)); + return bytecode; //leave the class unchanged for now + } + + //retransform can be triggered by other agents where the classloader delegation has not been applied yet + if (!classLoaderDelegation.getClassLoaderClassesRequiringRetransformation(loader, configResolver.getCurrentConfig()) + .isEmpty()) { + log.debug("Skipping instrumentation of {} as bootstrap classes were not made available yet for the class", className); + return bytecode; //leave the class unchanged for now + } else { + return instrumentByteCode(TypeDescriptionWithClassLoader.of(classBeingRedefined), classBeingRedefined, bytecode, updateAndGetActiveConfiguration(classBeingRedefined)); + } + } + +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformer.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformer.java new file mode 100644 index 0000000000..3cb5af7b5b --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformer.java @@ -0,0 +1,37 @@ +package rocks.inspectit.ocelot.core.instrumentation.transformer; + +import java.lang.instrument.IllegalClassFormatException; +import java.security.ProtectionDomain; + +/** + * Internal interface representing a {@link java.lang.instrument.ClassFileTransformer} + */ +public interface ClassTransformer { + + /** + * @return true, if transformer is enabled, false otherwise + */ + boolean isEnabled(); + + /** + * Pre Java9 ClassFileTransformer#transform implementation + * + * @see java.lang.instrument.ClassFileTransformer#transform(ClassLoader, String, Class, ProtectionDomain, byte[]) + */ + default byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { + // delegate to our Java 9 compatible transform method + return transform(null, loader, className, classBeingRedefined, protectionDomain, classfileBuffer); + } + + /** + * After Java9+ ClassFileTransformer#transform implementation + *

+ * Java 9 Signature: java.lang.instrument.ClassFileTransformer#transform(Module, ClassLoader, String, Class, ProtectionDomain, byte[]) + */ + byte[] transform(Object module, ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException; + + /** + * Destroys the {@link java.lang.instrument.ClassFileTransformer}. + */ + void destroy(); +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformerProxyGenerator.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformerProxyGenerator.java new file mode 100644 index 0000000000..9ff1977466 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformerProxyGenerator.java @@ -0,0 +1,110 @@ +package rocks.inspectit.ocelot.core.instrumentation.transformer; + +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.implementation.MethodDelegation; +import net.bytebuddy.matcher.ElementMatchers; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.Instrumentation; +import java.util.List; +import java.util.stream.Collectors; + +/** + * This class is responsible to instantiate an instance of {@link ClassFileTransformer} interface and proxy all calls to + * the configured {@link ClassTransformer}. + *

+ * We decided to introduce this indirection to support runtimes <= and >= Java8. Since {@link ClassFileTransformer} + * has a second transform method signature since Java9 to support Jigsaw module system, we created the instance on the fly and will receive + * an implementation for the current runtime. + */ +@Component +@Slf4j +public class ClassTransformerProxyGenerator { + + @Autowired + private Instrumentation instrumentation; + + @VisibleForTesting + @Autowired + List classTransformers; + + @VisibleForTesting + ClassTransformer activeTransformer; + + @VisibleForTesting + ClassFileTransformer transformerProxy; + + @PostConstruct + public void init() { + activeTransformer = findActiveTransformer(); + transformerProxy = createAndInstantiateClassTransformerProxy(activeTransformer); + instrumentation.addTransformer(transformerProxy, true); + log.info("Proxying ClassFileTransformer to : {}", activeTransformer.getClass().getName()); + + } + + @PreDestroy + public void destroy() { + if (activeTransformer != null) { + activeTransformer.destroy(); + } + instrumentation.removeTransformer(transformerProxy); + } + + /** + * Creates ByteBuddy instance of {@link ClassFileTransformer} and delegates all calls to our {@link ClassTransformer} + * implementation + * + * @param delegate The {@link ClassTransformer} instance + * + * @return The {@link ClassFileTransformer} instance to be registered at the {@link Instrumentation} instance + * + * @throws IllegalStateException if {@link ClassFileTransformer} instantiation fails + */ + @VisibleForTesting + ClassFileTransformer createAndInstantiateClassTransformerProxy(ClassTransformer delegate) { + try { + return new ByteBuddy().subclass(ClassFileTransformer.class) + .method(ElementMatchers.named("transform")) + .intercept(MethodDelegation.to(delegate, ClassTransformer.class)) + .make() + .load(getClass().getClassLoader()) + .getLoaded() + .getConstructor() + .newInstance(); + } catch (Exception e) { + throw new IllegalStateException("Failed to instantiate ClassFileTransformer ByteBuddy Proxy", e); + } + } + + /** + * Determines the actual {@link ClassTransformer} to be used. Only one {@link ClassTransformer} can be active. + * + * @return The curren active {@link ClassTransformer} + * + * @throws IllegalStateException if zero ore more than one {@link ClassTransformer} are found. + */ + private ClassTransformer findActiveTransformer() { + List transformers = classTransformers.stream() + .filter(ClassTransformer::isEnabled) + .collect(Collectors.toList()); + + if (transformers.size() != 1) { + if (transformers.size() == 0) { + throw new IllegalStateException("No active ClassTransformer found!"); + } else { + throw new IllegalStateException("Found more than one active ClassTransformer: " + StringUtils.join(transformers, ",")); + + } + } + return transformers.get(0); + } + +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/SyncClassTransformer.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/SyncClassTransformer.java new file mode 100644 index 0000000000..55182c7f5b --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/transformer/SyncClassTransformer.java @@ -0,0 +1,127 @@ +package rocks.inspectit.ocelot.core.instrumentation.transformer; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import lombok.Value; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; +import rocks.inspectit.ocelot.core.instrumentation.config.model.ClassInstrumentationConfiguration; +import rocks.inspectit.ocelot.core.instrumentation.event.IClassDefinitionListener; + +import java.lang.instrument.IllegalClassFormatException; +import java.security.ProtectionDomain; +import java.util.List; + +/** + * Synchronous {@link ClassTransformer} implementation. + *

+ * Can be enabled with the property inspectit.instrumentation.internal.async + *

+ * + * @see rocks.inspectit.ocelot.config.model.instrumentation.InternalSettings + */ +@Component +@Slf4j +public class SyncClassTransformer extends AbstractClassTransformer { + + @Autowired + @VisibleForTesting + List classDefinitionListeners; + + /** + * This Cache holds all {@link ClassInstrumentationConfiguration} and the corresponding bytecode for all classes + * which are instrumented on initial class load. + * Since all {@link rocks.inspectit.ocelot.core.instrumentation.event.IClassDiscoveryListener} are invoked after instrumentation + * we ensure {@link #doTransform(ClassLoader, String, Class, ProtectionDomain, byte[])} is invoked again and we can + * dispatch a new {@link rocks.inspectit.ocelot.core.instrumentation.event.ClassInstrumentedEvent} with the actual + * class object. + */ + Cache temporaryInstrumentationConfigCache = CacheBuilder.newBuilder().build(); + + @Override + public boolean isEnabled() { + return !env.getCurrentConfig().getInstrumentation().getInternal().isAsync(); + } + + @Override + protected void deinstrumentAllClasses() { + // Attach all class which might still be in the temp cache and not yet handled by the InstrumentationTrigger + if (temporaryInstrumentationConfigCache.size() > 0) { + temporaryInstrumentationConfigCache.asMap().keySet().forEach(k -> { + try { + instrumentedClasses.put(Class.forName(k.getClassName()), Boolean.TRUE); + } catch (ClassNotFoundException ignored) { + //Should never happen since we saw this class loading + } + }); + temporaryInstrumentationConfigCache.invalidateAll(); + } + super.deinstrumentAllClasses(); + } + + @Override + public byte[] doTransform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] bytecode) throws IllegalClassFormatException { + + byte[] instrumentedBytecode; + String classNameInDotNotation = className.replace("/", "."); + + CacheKey cacheKey = new CacheKey(loader, classNameInDotNotation); + ClassInstrumentationConfiguration classConf; + TypeDescriptionWithClassLoader typeWithLoader; + + if (classBeingRedefined == null) { // Initial class load + typeWithLoader = TypeDescriptionWithClassLoader.of(classNameInDotNotation, loader); + classConf = configResolver.getClassInstrumentationConfiguration(typeWithLoader); + instrumentedBytecode = instrumentByteCode(typeWithLoader, null, bytecode, classConf); + temporaryInstrumentationConfigCache.put(cacheKey, new CacheEntry(classConf, instrumentedBytecode)); + classDefinitionListeners.forEach(lis -> lis.onNewClassDefined(className, loader)); + } else { + typeWithLoader = TypeDescriptionWithClassLoader.of(classBeingRedefined); + classConf = updateAndGetActiveConfiguration(classBeingRedefined); + + CacheEntry entry = temporaryInstrumentationConfigCache.getIfPresent(cacheKey); + temporaryInstrumentationConfigCache.invalidate(cacheKey); + + if (entry != null) { + // we have seen this class before check if config differs and a retransformation is required + if (!entry.getClassConfiguration().isSameAs(typeWithLoader, classConf)) { + instrumentedBytecode = instrumentByteCode(typeWithLoader, classBeingRedefined, bytecode, classConf); + } else { + // reuse cached bytecode and notify InstrumentationManger about instrumentation + instrumentedBytecode = entry.getBytecode(); + dispatchClassInstrumentedEvent(classBeingRedefined, typeWithLoader.getType(), classConf); + } + } else { + instrumentedBytecode = instrumentByteCode(typeWithLoader, classBeingRedefined, bytecode, classConf); + } + } + + return instrumentedBytecode; + } + + /** + * Simple value object used as key for {@link #temporaryInstrumentationConfigCache} since class names are only + * unique in combination with the corresponding classloader. + */ + @Value + private static class CacheKey { + + ClassLoader loader; + + String className; + } + + /** + * Simple value object holding a {@link ClassInstrumentationConfiguration} and the resulting bytecode + */ + @Value + private static class CacheEntry { + + ClassInstrumentationConfiguration classConfiguration; + + byte[] bytecode; + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java index 878d3651cc..7ad93f40dc 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java @@ -1,5 +1,6 @@ package rocks.inspectit.ocelot.core.metrics; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Maps; import io.opencensus.tags.TagContext; @@ -112,6 +113,7 @@ protected void stop() { if (tagValues.size() > tagValueLimit) { blockedTagKeysByMeasure.computeIfAbsent(tagKey, blocked -> Maps.newHashMap()) .putIfAbsent(tagKey, true); + agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, tagKey)); } else { tagValues.add(tagValue); } @@ -146,7 +148,7 @@ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAcce } else { String overflowReplacement = env.getCurrentConfig().getMetrics().getTagGuard().getOverflowReplacement(); tags.put(key, TagUtils.createTagValueAsString(key, overflowReplacement)); - agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, key)); + } }); @@ -158,7 +160,6 @@ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAcce } else { String overflowReplacement = env.getCurrentConfig().getMetrics().getTagGuard().getOverflowReplacement(); tags.put(key, TagUtils.createTagValueAsString(key, overflowReplacement)); - agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, key)); } }); @@ -197,7 +198,7 @@ public Map>> read() { if (Files.exists(path)) { try { byte[] content = Files.readAllBytes(path); - @SuppressWarnings("unchecked") Map>> tags = mapper.readValue(content, Map.class); + @SuppressWarnings("unchecked") Map>> tags = mapper.readValue(content, new TypeReference>>>() {}); return tags; } catch (Exception e) { log.error("Error loading tag value database from persistence file '{}'", fileName, e); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/system/ProcessorMetricsRecorder.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/system/ProcessorMetricsRecorder.java index 612776bf24..45f5247491 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/system/ProcessorMetricsRecorder.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/system/ProcessorMetricsRecorder.java @@ -67,7 +67,7 @@ protected void init() { if (!systemCpuUsage.isPresent()) { log.info(METRIC_UNAVAILABLE, SYSTEM_USAGE_METRIC_FULL_NAME, METH_SYS_CPU_LOAD); } - if (!systemCpuUsage.isPresent()) { + if (!processCpuUsage.isPresent()) { log.info(METRIC_UNAVAILABLE, PROCESS_USAGE_METRIC_FULL_NAME, METH_PROC_CPU_LOAD); } if (!averageLoadAvailable) { diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/opentelemetry/OpenTelemetryControllerImpl.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/opentelemetry/OpenTelemetryControllerImpl.java index 1f034368f8..526256d8ae 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/opentelemetry/OpenTelemetryControllerImpl.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/opentelemetry/OpenTelemetryControllerImpl.java @@ -20,6 +20,7 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.event.ContextClosedEvent; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.context.event.EventListener; import org.springframework.core.Ordered; @@ -147,19 +148,22 @@ public class OpenTelemetryControllerImpl implements IOpenTelemetryController { @VisibleForTesting void init() { initOtel(env.getCurrentConfig()); - - // close the tracer provider when the JVM is shutting down - Runtime.getRuntime().addShutdownHook(new Thread(this::shutdown)); - Instances.openTelemetryController = this; } @EventListener(ContextRefreshedEvent.class) - @Order(Ordered.LOWEST_PRECEDENCE) - synchronized private void startAtStartup(ContextRefreshedEvent event) { + @Order() + synchronized private void startAtStartup() { start(); } + @EventListener(ContextClosedEvent.class) + @Order(Ordered.HIGHEST_PRECEDENCE) + public void handleContextClosed() { + flush(); + shutdown(); + } + /** * Configures and registers {@link io.opentelemetry.api.OpenTelemetry}, triggered by the {@link rocks.inspectit.ocelot.core.config.InspectitConfigChangedEvent} triggered * For tracing, the {@link SdkTracerProvider} is reconfigured and updated in the {@link GlobalOpenTelemetry}. @@ -169,7 +173,7 @@ synchronized private void startAtStartup(ContextRefreshedEvent event) { * @return */ @EventListener(InspectitConfigChangedEvent.class) - @Order(Ordered.LOWEST_PRECEDENCE) + @Order() @VisibleForTesting synchronized boolean configureOpenTelemetry() { if (shutdown) { @@ -238,7 +242,10 @@ synchronized public boolean start() { */ @Override public void flush() { + log.info("Flush pending OTEL data."); + long start = System.nanoTime(); openTelemetry.flush(); + log.info("Flushing process took {} ms", (System.nanoTime() - start) / 1000000); } /** @@ -333,13 +340,9 @@ private SdkTracerProvider buildTracerProvider(InspectitConfig configuration) { sampler = new DynamicSampler(sampleProbability); multiSpanExporter = DynamicMultiSpanExporter.create(); // @formatter:off - Resource tracerProviderAttributes = Resource.create(Attributes.of( - ResourceAttributes.SERVICE_NAME, configuration.getExporters().getTracing().getServiceName(), - AttributeKey.stringKey("inspectit.agent.version"), AgentManager.getAgentVersion(), - ResourceAttributes.TELEMETRY_SDK_VERSION, AgentManager.getOpenTelemetryVersion(), - ResourceAttributes.TELEMETRY_SDK_LANGUAGE, "java", - ResourceAttributes.TELEMETRY_SDK_NAME, "opentelemetry" - )); + Resource tracerProviderAttributes = Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, configuration.getExporters() + .getTracing() + .getServiceName(), AttributeKey.stringKey("inspectit.agent.version"), AgentManager.getAgentVersion(), ResourceAttributes.TELEMETRY_SDK_VERSION, AgentManager.getOpenTelemetryVersion(), ResourceAttributes.TELEMETRY_SDK_LANGUAGE, "java", ResourceAttributes.TELEMETRY_SDK_NAME, "opentelemetry")); // @formatter:on spanProcessor = BatchSpanProcessor.builder(multiSpanExporter) .setMaxExportBatchSize(configuration.getTracing().getMaxExportBatchSize()) diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java index da5ef5d075..c133290405 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java @@ -1,18 +1,25 @@ package rocks.inspectit.ocelot.core.selfmonitoring; +import com.google.common.annotations.VisibleForTesting; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; +import rocks.inspectit.ocelot.core.utils.RingBuffer; +import javax.annotation.PostConstruct; import java.time.Duration; import java.time.LocalDateTime; import java.util.Comparator; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; /** * Manages the {@link AgentHealth} and publishes {@link AgentHealthChangedEvent}s when it changes. @@ -24,6 +31,8 @@ public class AgentHealthManager { private final ApplicationContext ctx; + private final ScheduledExecutorService executor; + /** * Map of {@code eventClass -> agentHealth}, whereas the {@code agentHealth} is reset whenever an event of type * {@code eventClass} occurs (see {@link #onInvalidationEvent(Object)}. @@ -41,9 +50,32 @@ public class AgentHealthManager { private final InspectitEnvironment env; + private final RingBuffer healthIncidentBuffer = new RingBuffer<>(10); //TODO make this configurable + + @PostConstruct + @VisibleForTesting + void startHealthCheckScheduler() { + checkHealthAndSchedule(); + } + + public List getHistory() { + return this.healthIncidentBuffer.asList(); + } + + public void update(AgentHealth eventHealth, Class invalidator, String message) { + if (invalidator == null) { + handleTimeoutHealth(eventHealth); + } else { + handleInvalidatableHealth(eventHealth, invalidator, message); + } + + triggerEvent(invalidator, message); + + } + public void handleInvalidatableHealth(AgentHealth eventHealth, Class invalidator, String eventMessage) { invalidatableHealth.merge(invalidator, eventHealth, AgentHealth::mostSevere); - triggerEventAndMetricIfHealthChanged(eventMessage); + triggerEvent(invalidator, eventMessage); } private void handleTimeoutHealth(AgentHealth eventHealth) { @@ -56,22 +88,33 @@ private void handleTimeoutHealth(AgentHealth eventHealth) { public void invalidateIncident(Class eventClass, String eventMessage) { invalidatableHealth.remove(eventClass); - triggerEventAndMetricIfHealthChanged(eventMessage); } - private void triggerEventAndMetricIfHealthChanged(String message) { - if (getCurrentHealth() != lastNotifiedHealth) { - synchronized (this) { - AgentHealth currHealth = getCurrentHealth(); - if (currHealth != lastNotifiedHealth) { - AgentHealth lastHealth = lastNotifiedHealth; - lastNotifiedHealth = currHealth; - - AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, lastHealth, currHealth, message); - ctx.publishEvent(event); - } + private void triggerEvent( Class invalidator, String message) { + synchronized (this) { + boolean changedHealth = false; + AgentHealth currHealth = getCurrentHealth(); + AgentHealth lastHealth = lastNotifiedHealth; + if(healthChanged()) { + changedHealth = true; + lastNotifiedHealth = currHealth; } + + AgentHealthIncident incident = new AgentHealthIncident(LocalDateTime.now().toString(), currHealth, invalidator.getTypeName() , message, changedHealth); + healthIncidentBuffer.put(incident); + + AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, lastHealth, currHealth, message); + ctx.publishEvent(event); } + + } + + private boolean healthChanged() { + if (getCurrentHealth() != lastNotifiedHealth) { + AgentHealth currHealth = getCurrentHealth(); + return currHealth != lastNotifiedHealth; + } + return false; } /** @@ -91,18 +134,43 @@ public AgentHealth getCurrentHealth() { .stream() .reduce(AgentHealth::mostSevere) .orElse(AgentHealth.OK); - return AgentHealth.mostSevere(generalHealth, invHealth); } + /** + * Checks whether the current health has changed since last check and schedules another check. + * The next check will run dependent on the earliest status timeout in the future: + *
    + *
  • does not exist -> run again after validity period
  • + *
  • exists -> run until that timeout is over
  • + *
validityPeriod + */ + private void checkHealthAndSchedule() { + Duration delay = getNextHealthTimeoutDuration(); + + if (log.isDebugEnabled()) { + log.debug("Schedule health check in {} minutes", delay.toMinutes()); + } + + executor.schedule(this::checkHealthAndSchedule, delay.toMillis(), TimeUnit.MILLISECONDS); + } + + public Duration getNextHealthTimeoutDuration() { Duration validityPeriod = env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getValidityPeriod(); - return generalHealthTimeouts.values() + Duration delay = generalHealthTimeouts.values() .stream() .filter(d -> d.isAfter(LocalDateTime.now())) .max(Comparator.naturalOrder()) - .map(d -> Duration.between(d, LocalDateTime.now())) + .map(d -> Duration.between(d, LocalDateTime.now()).abs()) .orElse(validityPeriod); + + delay = Duration.ofMillis(Math.max(delay.toMillis(), env.getCurrentConfig() + .getSelfMonitoring() + .getAgentHealth() + .getMinHealthCheckDelay() + .toMillis())); + return delay; } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListener.java index 1d124131b5..de1d1f2ec3 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListener.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListener.java @@ -1,8 +1,11 @@ package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; +@Component @Slf4j public class LogWritingHealthEventListener implements HealthEventListener { @@ -10,11 +13,10 @@ public class LogWritingHealthEventListener implements HealthEventListener { @Override public void onAgentHealthEvent(AgentHealthChangedEvent event) { - if (event.getNewHealth().isMoreSevereOrEqualTo(event.getOldHealth())) { - log.warn(LOG_CHANGE_STATUS, event.getOldHealth(), event.getOldHealth(), event.getMessage()); + log.warn(LOG_CHANGE_STATUS, event.getOldHealth(), event.getNewHealth(), event.getMessage()); } else { - log.info(LOG_CHANGE_STATUS, event.getOldHealth(), event.getOldHealth(), event.getMessage()); + log.info(LOG_CHANGE_STATUS, event.getOldHealth(), event.getNewHealth(), event.getMessage()); } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListener.java index 466def582d..02ee047c6c 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListener.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListener.java @@ -1,20 +1,35 @@ package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; +import com.google.common.annotations.VisibleForTesting; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; +import javax.annotation.PostConstruct; import java.util.HashMap; +@Component public class MetricWritingHealthEventListener implements HealthEventListener { + private static final String INITIAL_METRIC_MESSAGE = "Initial health metric sent"; + @Autowired private SelfMonitoringService selfMonitoringService; + @PostConstruct + @VisibleForTesting + void sendInitialHealthMetric() { + HashMap tags = new HashMap<>(); + tags.put("message", INITIAL_METRIC_MESSAGE); + selfMonitoringService.recordMeasurement("health", AgentHealth.OK.ordinal(), tags); + } @Override public void onAgentHealthEvent(AgentHealthChangedEvent event) { HashMap tags = new HashMap<>(); tags.put("message", event.getMessage()); + tags.put("source", event.getSource().getClass().getName()); selfMonitoringService.recordMeasurement("health", event.getNewHealth().ordinal(), tags); } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java index ff481dc8cd..c3aa5558e0 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java @@ -1,16 +1,32 @@ package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthState; import rocks.inspectit.ocelot.core.config.propertysources.http.HttpConfigurationPoller; +import rocks.inspectit.ocelot.core.selfmonitoring.AgentHealthManager; import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; +import java.util.List; + +@Component public class PollerWritingHealthEventListener implements HealthEventListener { @Autowired HttpConfigurationPoller httpConfigurationPoller; + @Autowired + AgentHealthManager agentHealthManager; + @Override public void onAgentHealthEvent(AgentHealthChangedEvent event) { - httpConfigurationPoller.updateAgentHealth(event.getNewHealth()); + List incidentHistory = agentHealthManager.getHistory(); + AgentHealthIncident latestIncident = AgentHealthIncident.getNoneIncident(); + if (!incidentHistory.isEmpty()) { + latestIncident = incidentHistory.get(incidentHistory.size() - 1); + } + AgentHealthState state = new AgentHealthState(latestIncident.getHealth(), latestIncident.getSource(), latestIncident.getMessage(), incidentHistory); + httpConfigurationPoller.updateAgentHealthState(state); } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java index ba7fdd5ea3..e667e80634 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java @@ -23,9 +23,17 @@ public class AgentHealthChangedEvent extends ApplicationEvent { @Getter private AgentHealth newHealth; + /** + * The message stating the cause of the event. + */ @Getter private String message; + /** + * Indicates if this event caused a health change. + */ + private boolean changedState; + public AgentHealthChangedEvent(Object source, @NonNull AgentHealth oldHealth, @NonNull AgentHealth newHealth, String message) { super(source); this.oldHealth = oldHealth; diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java index c6c1801dd5..b5dbeebd13 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; @@ -21,16 +22,13 @@ @Component @Slf4j @RequiredArgsConstructor -public class LogHealthMonitor implements InternalProcessingAppender.LogEventConsumer { +public class LogHealthMonitor implements InternalProcessingAppender.LogEventConsumer { @Autowired AgentHealthManager agentHealthManager; - private final ScheduledExecutorService executor; - - private final InspectitEnvironment env; - - private final SelfMonitoringService selfMonitoringService; + public LogHealthMonitor(ApplicationContext applicationContext, ScheduledExecutorService scheduledExecutorService, InspectitEnvironment inspectitEnvironment, SelfMonitoringService selfMonitoringService) { + } @Override public void onLoggingEvent(ILoggingEvent event, Class invalidator) { @@ -39,12 +37,12 @@ public void onLoggingEvent(ILoggingEvent event, Class invalidator) { return; } AgentHealth eventHealth = AgentHealth.fromLogLevel(event.getLevel()); - agentHealthManager.handleInvalidatableHealth(eventHealth, invalidator, "Logging health change"); //TODO We need a more speaking message here + agentHealthManager.handleInvalidatableHealth(eventHealth, invalidator, event.getMessage()); } @Override public void onInvalidationEvent(Object invalidator) { - agentHealthManager.invalidateIncident(invalidator.getClass(), "Logging health change"); //TODO We need a more speaking message here + agentHealthManager.invalidateIncident(invalidator.getClass(), "Invalidation due to invalidator event"); } @PostConstruct @@ -53,35 +51,11 @@ void registerAtAppender() { InternalProcessingAppender.register(this); } - @PostConstruct - @VisibleForTesting - void startHealthCheckScheduler() { - checkHealthAndSchedule(); - } - - @PostConstruct - @VisibleForTesting - void sendInitialHealthMetric() { - selfMonitoringService.recordMeasurement("health", AgentHealth.OK.ordinal()); - } - @PreDestroy @VisibleForTesting void unregisterFromAppender() { InternalProcessingAppender.unregister(this); } - /** - * Checks whether the current health has changed since last check and schedules another check. - * The next check will run dependent on the earliest status timeout in the future: - *
    - *
  • does not exist -> run again after validity period
  • - *
  • exists -> run until that timeout is over
  • - *
validityPeriod - */ - private void checkHealthAndSchedule() { - Duration delay = agentHealthManager.getNextHealthTimeoutDuration(); - executor.schedule(this::checkHealthAndSchedule, delay.toMillis(), TimeUnit.MILLISECONDS); - } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/service/DynamicallyActivatableServiceObserver.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/service/DynamicallyActivatableServiceObserver.java new file mode 100644 index 0000000000..c92af17c64 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/service/DynamicallyActivatableServiceObserver.java @@ -0,0 +1,44 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Getter; +import org.springframework.stereotype.Component; +import rocks.inspectit.ocelot.core.service.DynamicallyActivatableService; + +import java.util.HashMap; +import java.util.Map; + +/** + * Observes all currently available services that are supported by the + * inspectit ocelot agent (e.g. Prometheus, Jaeger, Influx, ...) as well as integrated services such as Log-Preloading + * and the Agent Command Service and tracks their current state (enabled/disabled). + * Those states will be send to the Frontend, where depending on the state of the service we can enable/disable certain + * features. As well as preventing the user to run into errors and give proper guidance to which services still have to + * be activated to access certain features. + * + * Has a method to generate a JSON String out of the services and their states to send it to the UI. + * The JSON String contains the service names and their current state (true=enabled/false=disabled). + * In the Frontend the JSON String can be parsed to a JavaScript object to work with. + */ +@Component +public class DynamicallyActivatableServiceObserver { + @Getter + private static Map serviceStateMap = new HashMap<>(); + + public void updateServiceState(DynamicallyActivatableService service) { + serviceStateMap.put(service.getName(), service.isEnabled()); + } + + public static String asJson() { + ObjectMapper objectMapper = new ObjectMapper(); + String json = "{}"; + + try { + json = objectMapper.writeValueAsString(serviceStateMap); + } catch (Exception e) { + System.out.println(e.getMessage()); //Add proper logging + } + + return json; + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/service/DynamicallyActivatableService.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/service/DynamicallyActivatableService.java index febe418d0e..99fec74f0d 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/service/DynamicallyActivatableService.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/service/DynamicallyActivatableService.java @@ -15,6 +15,7 @@ import rocks.inspectit.ocelot.core.config.InspectitConfigChangedEvent; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.opentelemetry.OpenTelemetryControllerImpl; +import rocks.inspectit.ocelot.core.selfmonitoring.service.DynamicallyActivatableServiceObserver; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -39,6 +40,9 @@ public abstract class DynamicallyActivatableService { private List configDependencies; + @Autowired + private DynamicallyActivatableServiceObserver serviceObserver; + /** * True if the service is currently enabled. */ @@ -72,6 +76,8 @@ void startIfEnabled() { } else { enabled = false; } + + serviceObserver.updateServiceState(this); } /** @@ -134,6 +140,7 @@ synchronized void checkForUpdates(InspectitConfigChangedEvent ev) { enable(); } + serviceObserver.updateServiceState(this); } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/RingBuffer.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/RingBuffer.java new file mode 100644 index 0000000000..490c6250e0 --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/RingBuffer.java @@ -0,0 +1,45 @@ +package rocks.inspectit.ocelot.core.utils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +public class RingBuffer { + + private final AtomicInteger currentIndex = new AtomicInteger(0); + + private final AtomicInteger bufferSize; + private final List buffer; + + public RingBuffer (int bufferSize) { + this.bufferSize = new AtomicInteger(bufferSize); + buffer = new ArrayList<>(bufferSize); + } + + public void put(T element) { + int index = currentIndex.getAndIncrement(); + if (index >= bufferSize.get()) { + currentIndex.set(0); + index = 0; + } + buffer.add(index, element); + } + + public T get(int index) { + return buffer.get(index % buffer.size()); + } + + public List asList() { + if (buffer.isEmpty()) { + return Collections.emptyList(); + } + int oldestIndex = currentIndex.get() - 1; + List elementList = new ArrayList<>(); + for (int i = oldestIndex; i < oldestIndex + this.buffer.size(); i++) { + elementList.add(get(i)); + } + return elementList; + } + +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/command/handler/impl/EnvironmentCommandExecutorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/command/handler/impl/EnvironmentCommandExecutorTest.java new file mode 100644 index 0000000000..1cdc0541fb --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/command/handler/impl/EnvironmentCommandExecutorTest.java @@ -0,0 +1,118 @@ +package rocks.inspectit.ocelot.core.command.handler.impl; + +import org.apache.commons.io.FileUtils; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.TestPropertySource; +import rocks.inspectit.ocelot.commons.models.command.impl.EnvironmentCommand; +import rocks.inspectit.ocelot.commons.models.command.impl.LogsCommand; +import rocks.inspectit.ocelot.config.model.command.AgentCommandSettings; +import rocks.inspectit.ocelot.core.SpringTestBase; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.nio.charset.Charset; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; + +@ExtendWith(MockitoExtension.class) +public class EnvironmentCommandExecutorTest { + + static final String tmpDir = "tmpconf_int_test"; + + static final String configurationA = "inspectit:\n agent-commands:\n enabled: true\n url: http://localhost:8090/api/v1/agent/command"; + + @BeforeAll + static void createConfigDir() { + new File(tmpDir).mkdir(); + } + + @BeforeEach + void cleanConfigDir() throws Exception { + FileUtils.cleanDirectory(new File(tmpDir)); + } + + @AfterAll + static void deleteConfigDir() throws Exception { + FileUtils.deleteDirectory(new File(tmpDir)); + } + + @Nested + @DirtiesContext + @TestPropertySource(properties = {"inspectit.config.file-based.path=" + tmpDir, "inspectit.config.file-based.frequency=50ms"}) + public class Configuration extends SpringTestBase { + + @Autowired + InspectitEnvironment env; + + @Test + public void test() throws IOException { + testConfiguration(configurationA, true, new URL("http://localhost:8090/api/v1/agent/command")); + } + + private void testConfiguration(String configuration, boolean enabled, URL commandUrl) throws IOException { + FileUtils.write(new File(tmpDir + "/env-command.yml"), configuration, Charset.defaultCharset()); + + await().atMost(15, TimeUnit.SECONDS).untilAsserted(() -> { + AgentCommandSettings settings = env.getCurrentConfig().getAgentCommands(); + assertThat(settings).isNotNull(); + assertThat(settings.isEnabled()).isEqualTo(enabled); + assertThat(settings.getUrl()).isEqualTo(commandUrl); + }); + } + + } + + @Nested + @DirtiesContext + public class Execute { + + @InjectMocks + EnvironmentCommandExecutor executor; + + @Test + public void testEnvironmentDetailsBeingBuiltCorrectly() { + + EnvironmentCommand command = new EnvironmentCommand(); + command.setCommandId(UUID.randomUUID()); + EnvironmentCommand.Response response = (EnvironmentCommand.Response) executor.execute(command); + + // available environment variables should be returned + assertThat(response.getEnvironment().getEnvironmentVariables().size()).isGreaterThan(0); + assertThat(response.getEnvironment().getEnvironmentVariables()).containsKey("PATH"); + + // system properties should be returned + assertThat(response.getEnvironment().getSystemProperties().size()).isGreaterThan(0); + assertThat(response.getEnvironment().getSystemProperties()).containsKey("os.name"); + assertThat(response.getEnvironment().getSystemProperties()).containsKey("java.version"); + + // any jvm arguments passed in the starting command should be returned + assertThat(response.getEnvironment().getJvmArguments().size()).isGreaterThan(0); + } + + @Test + public void testInvalidCommand() { + LogsCommand command = new LogsCommand(); + command.setCommandId(UUID.randomUUID()); + + IllegalArgumentException exception = Assertions.assertThrows(IllegalArgumentException.class, () -> executor.execute(command)); + assertThat(exception.getMessage()).isEqualTo("Invalid command type. Executor does not support commands of type " + command.getClass()); + } + + } + +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceStateTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceStateTest.java index 0440746ed7..64d0b3e5e1 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceStateTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceStateTest.java @@ -89,7 +89,7 @@ public void fetchingYaml() { .filter(key -> key.startsWith("X-OCELOT-")) .collect(Collectors.toList()); - assertThat(headerKeys).containsOnly("X-OCELOT-AGENT-ID", "X-OCELOT-AGENT-VERSION", "X-OCELOT-JAVA-VERSION", "X-OCELOT-VM-NAME", "X-OCELOT-VM-VENDOR", "X-OCELOT-START-TIME", "X-OCELOT-HEALTH"); + assertThat(headerKeys).containsOnly("X-OCELOT-AGENT-ID", "X-OCELOT-AGENT-VERSION", "X-OCELOT-JAVA-VERSION", "X-OCELOT-VM-NAME", "X-OCELOT-VM-VENDOR", "X-OCELOT-START-TIME", "X-OCELOT-HEALTH", "X-OCELOT-SERVICE-STATES-MAP"); } @Test diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java index 1ef90c8935..1eae9b1c9b 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java @@ -57,7 +57,9 @@ @Testcontainers(disabledWithoutDocker = true) abstract class ExporterServiceIntegrationTestBase extends SpringTestBase { - static final String COLLECTOR_IMAGE = "ghcr.io/open-telemetry/opentelemetry-java/otel-collector"; + static final String COLLECTOR_TAG = "0.58.0"; + + static final String COLLECTOR_IMAGE = "otel/opentelemetry-collector-contrib:" + COLLECTOR_TAG; static final Integer COLLECTOR_OTLP_GRPC_PORT = 4317; @@ -91,7 +93,7 @@ abstract class ExporterServiceIntegrationTestBase extends SpringTestBase { private static final Logger LOGGER = Logger.getLogger(ExporterServiceIntegrationTestBase.class.getName()); /** - * The {@link OtlpGrpcServer} used as an exporter endpoirt for the OpenTelemetry Collector + * The {@link OtlpGrpcServer} used as an exporter endpoint for the OpenTelemetry Collector */ static OtlpGrpcServer grpcServer; @@ -162,6 +164,17 @@ static String getEndpoint(Integer originalPort, String path) { return String.format("http://%s:%d/%s", collector.getHost(), collector.getMappedPort(originalPort), path.startsWith("/") ? path.substring(1) : path); } + /** + * Gets the desired endpoint of the {@link #collector} constructed as 'http://{@link GenericContainer#getHost() collector.getHost()}:{@link GenericContainer#getMappedPort(int) collector.getMappedPort(port)}' + * + * @param originalPort the port to get the actual mapped port for + * + * @return the constructed endpoint for the {@link #collector} + */ + static String getEndpoint(Integer originalPort) { + return String.format("http://%s:%d", collector.getHost(), collector.getMappedPort(originalPort)); + } + /** * Creates a nested trace with parent and child span and flushes them. * diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterServiceIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterServiceIntTest.java index f0508dd42d..062b6d4348 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterServiceIntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterServiceIntTest.java @@ -1,17 +1,22 @@ package rocks.inspectit.ocelot.core.exporter; import io.github.netmikey.logunit.api.LogCapturer; +import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import org.assertj.core.api.AssertionsForClassTypes; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; +import rocks.inspectit.ocelot.config.model.exporters.CompressionMethod; import rocks.inspectit.ocelot.config.model.exporters.ExporterEnabledState; import rocks.inspectit.ocelot.config.model.exporters.TransportProtocol; import rocks.inspectit.ocelot.config.model.exporters.metrics.OtlpMetricsExporterSettings; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import java.time.Duration; +import java.time.temporal.ChronoUnit; +import java.util.HashMap; import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; @@ -51,7 +56,7 @@ void clearRequests() { @Test void verifyMetricsWrittenGrpc() { updateProperties(mps -> { - mps.setProperty("inspectit.exporters.metrics.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT, OTLP_METRICS_PATH)); + mps.setProperty("inspectit.exporters.metrics.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT)); mps.setProperty("inspectit.exporters.metrics.otlp.export-interval", "500ms"); mps.setProperty("inspectit.exporters.metrics.otlp.enabled", ExporterEnabledState.ENABLED); mps.setProperty("inspectit.exporters.metrics.otlp.protocol", TransportProtocol.GRPC); @@ -85,6 +90,8 @@ void verifyMetricsWrittenHttp() { awaitMetricsExported(metricVal, tagKeyHttp, tagVal); } + + @DirtiesContext @Test void testNoEndpointSet() { @@ -113,5 +120,101 @@ void defaultSettings() { assertThat(otlp.getEnabled().equals(ExporterEnabledState.IF_CONFIGURED)); assertThat(otlp.getEndpoint()).isNullOrEmpty(); assertThat(otlp.getProtocol()).isNull(); + assertThat(otlp.getPreferredTemporality()).isEqualTo(AggregationTemporality.CUMULATIVE); + assertThat(otlp.getHeaders()).isNullOrEmpty(); + assertThat(otlp.getCompression()).isEqualTo(CompressionMethod.NONE); + assertThat(otlp.getTimeout()).isEqualTo(Duration.ofSeconds(10)); + } + + @DirtiesContext + @Test + void testAggregationTemporalityCumulative(){ + updateProperties(mps -> { + mps.setProperty("inspectit.exporters.metrics.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT)); + mps.setProperty("inspectit.exporters.metrics.otlp.export-interval", "500ms"); + mps.setProperty("inspectit.exporters.metrics.otlp.enabled", ExporterEnabledState.ENABLED); + mps.setProperty("inspectit.exporters.metrics.otlp.protocol", TransportProtocol.GRPC); + mps.setProperty("inspectit.exporters.metrics.otlp.preferredTemporality", AggregationTemporality.CUMULATIVE); + }); + + assertThat(service.isEnabled()).isTrue(); + + recordMetricsAndFlush(1, "key", "val"); + recordMetricsAndFlush(2, "key", "val"); + + await().atMost(30, TimeUnit.SECONDS) + .untilAsserted(() -> assertThat(grpcServer.metricRequests.stream()).anyMatch(mReq -> mReq.getResourceMetricsList() + .stream() + .anyMatch(rm -> + // check for the "my-counter" metrics + rm.getInstrumentationLibraryMetrics(0).getMetrics(0).getName().equals("my-counter") + // check for the specific attribute and value + && rm.getInstrumentationLibraryMetrics(0) + .getMetricsList() + .stream() + .anyMatch(metric -> metric.getSum() + .getDataPointsList() + .stream() + .anyMatch(d -> d.getAsInt() == 3))))); + } + + @DirtiesContext + @Test + void testAggregationTemporalityDelta(){ + updateProperties(mps -> { + mps.setProperty("inspectit.exporters.metrics.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT)); + mps.setProperty("inspectit.exporters.metrics.otlp.export-interval", "500ms"); + mps.setProperty("inspectit.exporters.metrics.otlp.enabled", ExporterEnabledState.ENABLED); + mps.setProperty("inspectit.exporters.metrics.otlp.protocol", TransportProtocol.GRPC); + mps.setProperty("inspectit.exporters.metrics.otlp.preferredTemporality", AggregationTemporality.DELTA); + }); + + assertThat(service.isEnabled()).isTrue(); + + recordMetricsAndFlush(1, "key", "val"); + recordMetricsAndFlush(2, "key", "val"); + + await().atMost(30, TimeUnit.SECONDS) + .untilAsserted(() -> assertThat(grpcServer.metricRequests.stream()).anyMatch(mReq -> mReq.getResourceMetricsList() + .stream() + .anyMatch(rm -> + // check for the "my-counter" metrics + rm.getInstrumentationLibraryMetrics(0).getMetrics(0).getName().equals("my-counter") + // check for the specific attribute and value + && rm.getInstrumentationLibraryMetrics(0) + .getMetricsList() + .stream() + .anyMatch(metric -> metric.getSum() + .getDataPointsList() + .stream() + .anyMatch(d -> d.getAsInt() == 2))))); + + } + + @DirtiesContext + @Test + void testHeaders(){ + updateProperties(mps -> { + mps.setProperty("inspectit.exporters.metrics.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT)); + mps.setProperty("inspectit.exporters.metrics.otlp.export-interval", "500ms"); + mps.setProperty("inspectit.exporters.metrics.otlp.enabled", ExporterEnabledState.ENABLED); + mps.setProperty("inspectit.exporters.metrics.otlp.protocol", TransportProtocol.GRPC); + mps.setProperty("inspectit.exporters.metrics.otlp.headers", new HashMap(){{put("my-header-key","my-header-value");}}); + }); + assertThat(service.isEnabled()).isTrue(); + assertThat(environment.getCurrentConfig().getExporters().getMetrics().getOtlp().getHeaders()).containsEntry("my-header-key","my-header-value"); + } + + @DirtiesContext + @Test + void testCompression() { + updateProperties(properties -> { + properties.setProperty("inspectit.exporters.metrics.otlp.protocol", TransportProtocol.GRPC); + properties.setProperty("inspectit.exporters.metrics.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT)); + properties.setProperty("inspectit.exporters.metrics.otlp.enabled", ExporterEnabledState.ENABLED); + properties.setProperty("inspectit.exporters.metrics.otlp.compression", CompressionMethod.GZIP); + }); + assertThat(service.isEnabled()).isTrue(); + assertThat(environment.getCurrentConfig().getExporters().getMetrics().getOtlp().getCompression()).isEqualTo(CompressionMethod.GZIP); } } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpTraceExporterServiceIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpTraceExporterServiceIntTest.java index 480abf32d1..56f99c3326 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpTraceExporterServiceIntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpTraceExporterServiceIntTest.java @@ -7,10 +7,14 @@ import org.junit.jupiter.api.extension.RegisterExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; +import rocks.inspectit.ocelot.config.model.exporters.CompressionMethod; import rocks.inspectit.ocelot.config.model.exporters.ExporterEnabledState; import rocks.inspectit.ocelot.config.model.exporters.TransportProtocol; import rocks.inspectit.ocelot.config.model.exporters.trace.OtlpTraceExporterSettings; +import java.time.Duration; +import java.time.temporal.ChronoUnit; +import java.util.HashMap; import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; @@ -22,7 +26,7 @@ @DirtiesContext public class OtlpTraceExporterServiceIntTest extends ExporterServiceIntegrationTestBase { - public static final String OTLP_GRPC_TRACING_PATH = "/v1/trace"; + public static final String OTLP_TRACING_PATH = "/v1/traces"; @RegisterExtension LogCapturer warnLogs = LogCapturer.create() @@ -41,7 +45,7 @@ void clearRequests() { void verifyTraceSentGrpc() { updateProperties(properties -> { properties.setProperty("inspectit.exporters.tracing.otlp.protocol", TransportProtocol.GRPC); - properties.setProperty("inspectit.exporters.tracing.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT, OTLP_GRPC_TRACING_PATH)); + properties.setProperty("inspectit.exporters.tracing.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT)); properties.setProperty("inspectit.exporters.tracing.otlp.enabled", ExporterEnabledState.ENABLED); }); @@ -59,7 +63,7 @@ void verifyTraceSentGrpc() { void verifyTraceSentHttp() { updateProperties(properties -> { properties.setProperty("inspectit.exporters.tracing.otlp.protocol", TransportProtocol.HTTP_PROTOBUF); - properties.setProperty("inspectit.exporters.tracing.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_HTTP_PORT, OTLP_GRPC_TRACING_PATH)); + properties.setProperty("inspectit.exporters.tracing.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_HTTP_PORT, OTLP_TRACING_PATH)); properties.setProperty("inspectit.exporters.tracing.otlp.enabled", ExporterEnabledState.ENABLED); }); @@ -99,6 +103,35 @@ void defaultSettings() { assertThat(otlp.getEnabled().equals(ExporterEnabledState.IF_CONFIGURED)); assertThat(otlp.getEndpoint()).isNullOrEmpty(); assertThat(otlp.getProtocol()).isNull(); + assertThat(otlp.getHeaders()).isNullOrEmpty(); + assertThat(otlp.getCompression()).isEqualTo(CompressionMethod.NONE); + assertThat(otlp.getTimeout()).isEqualTo(Duration.ofSeconds(10)); } + @DirtiesContext + @Test + void testHeaders(){ + updateProperties(properties -> { + properties.setProperty("inspectit.exporters.tracing.otlp.protocol", TransportProtocol.HTTP_PROTOBUF); + properties.setProperty("inspectit.exporters.tracing.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_HTTP_PORT, OTLP_TRACING_PATH)); + properties.setProperty("inspectit.exporters.tracing.otlp.enabled", ExporterEnabledState.ENABLED); + properties.setProperty("inspectit.exporters.tracing.otlp.headers", new HashMap(){{put("my-header-key","my-header-value");}}); + + }); + assertThat(service.isEnabled()).isTrue(); + assertThat(environment.getCurrentConfig().getExporters().getTracing().getOtlp().getHeaders()).containsEntry("my-header-key","my-header-value"); + } + + @DirtiesContext + @Test + void testCompression() { + updateProperties(properties -> { + properties.setProperty("inspectit.exporters.tracing.otlp.protocol", TransportProtocol.GRPC); + properties.setProperty("inspectit.exporters.tracing.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_HTTP_PORT, OTLP_TRACING_PATH)); + properties.setProperty("inspectit.exporters.tracing.otlp.enabled", ExporterEnabledState.ENABLED); + properties.setProperty("inspectit.exporters.tracing.otlp.compression", CompressionMethod.GZIP); + }); + assertThat(service.isEnabled()).isTrue(); + assertThat(environment.getCurrentConfig().getExporters().getTracing().getOtlp().getCompression()).isEqualTo(CompressionMethod.GZIP); + } } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationTriggererIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationTriggererIntTest.java index ed6cfa67b4..4305a852cc 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationTriggererIntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/InstrumentationTriggererIntTest.java @@ -10,6 +10,7 @@ import org.springframework.test.context.TestPropertySource; import rocks.inspectit.ocelot.bootstrap.Instances; import rocks.inspectit.ocelot.core.SpringTestBase; +import rocks.inspectit.ocelot.core.instrumentation.transformer.AsyncClassTransformer; import rocks.inspectit.ocelot.core.testutils.DummyClassLoader; import java.util.Arrays; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationConfigurationResolverTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationConfigurationResolverTest.java index 269fe3b645..3a3dfe0e3d 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationConfigurationResolverTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationConfigurationResolverTest.java @@ -16,6 +16,7 @@ import rocks.inspectit.ocelot.config.model.instrumentation.InstrumentationSettings; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.instrumentation.FakeExecutor; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; import rocks.inspectit.ocelot.core.instrumentation.config.dummy.LambdaTestProvider; import rocks.inspectit.ocelot.core.instrumentation.config.model.*; import rocks.inspectit.ocelot.core.instrumentation.special.SpecialSensor; @@ -89,8 +90,7 @@ public void matchingRule() throws IllegalAccessException { assertThat(result).isNotNull(); assertThat(result.getActiveSpecialSensors()).isEmpty(); - assertThat(result.getActiveRules()) - .hasSize(1) + assertThat(result.getActiveRules()).hasSize(1) .flatExtracting(InstrumentationRule::getScopes) .flatExtracting(InstrumentationScope::getTypeMatcher, InstrumentationScope::getMethodMatcher) .containsExactly(ElementMatchers.any(), ElementMatchers.any()); @@ -108,8 +108,7 @@ public void narrowingRule() throws IllegalAccessException { assertThat(result).isNotNull(); assertThat(result.getActiveSpecialSensors()).isEmpty(); - assertThat(result.getActiveRules()) - .hasSize(1) + assertThat(result.getActiveRules()).hasSize(1) .flatExtracting(InstrumentationRule::getScopes) .flatExtracting(InstrumentationScope::getTypeMatcher, InstrumentationScope::getMethodMatcher) .containsExactly(ElementMatchers.nameEndsWithIgnoreCase("object"), ElementMatchers.any()); @@ -131,11 +130,11 @@ public void disabledInstrumentation() throws IllegalAccessException { } } - @Nested class GetHookConfigurations { final Method testCase_methodA = TestCase.class.getDeclaredMethod("methodA"); + final Method testCase_methodB = TestCase.class.getDeclaredMethod("methodB"); Class testCaseClass; @@ -153,7 +152,6 @@ void testTypeMatchingButNoMethodsMatching() throws Exception { InstrumentationScope noMethodScope = new InstrumentationScope(ElementMatchers.any(), ElementMatchers.none()); InstrumentationRule r1 = InstrumentationRule.builder().name("r1").scope(noMethodScope).build(); - config = InstrumentationConfiguration.builder().source(settings).rule(r1).build(); FieldUtils.writeDeclaredField(resolver, "currentConfig", config, true); @@ -168,7 +166,6 @@ void testTypeNotMatchingButMethodMatching() throws Exception { InstrumentationScope noMethodScope = new InstrumentationScope(ElementMatchers.none(), ElementMatchers.any()); InstrumentationRule r1 = InstrumentationRule.builder().name("r1").scope(noMethodScope).build(); - config = InstrumentationConfiguration.builder().source(settings).rule(r1).build(); FieldUtils.writeDeclaredField(resolver, "currentConfig", config, true); @@ -178,7 +175,6 @@ void testTypeNotMatchingButMethodMatching() throws Exception { verify(hookResolver, never()).buildHookConfiguration(any(), any()); } - @Test void testSingleRuleForMethodMatches() throws Exception { ElementMatcher.Junction method = ElementMatchers.is(testCase_methodA); @@ -187,7 +183,6 @@ void testSingleRuleForMethodMatches() throws Exception { InstrumentationRule r1 = InstrumentationRule.builder().name("r1").scope(methodScope).build(); InstrumentationRule r2 = InstrumentationRule.builder().name("r2").scope(noMethodScope).build(); - config = InstrumentationConfiguration.builder().source(settings).rule(r1).rule(r2).build(); FieldUtils.writeDeclaredField(resolver, "currentConfig", config, true); @@ -198,7 +193,6 @@ void testSingleRuleForMethodMatches() throws Exception { verifyNoMoreInteractions(hookResolver); } - @Test void testMultipleRulesWithSameScopeMatching() throws Exception { ElementMatcher.Junction method = ElementMatchers.is(testCase_methodA); @@ -206,7 +200,6 @@ void testMultipleRulesWithSameScopeMatching() throws Exception { InstrumentationRule r1 = InstrumentationRule.builder().name("r1").scope(methodScope).build(); InstrumentationRule r2 = InstrumentationRule.builder().name("r2").scope(methodScope).build(); - config = InstrumentationConfiguration.builder().source(settings).rule(r1).rule(r2).build(); FieldUtils.writeDeclaredField(resolver, "currentConfig", config, true); @@ -217,7 +210,6 @@ void testMultipleRulesWithSameScopeMatching() throws Exception { verifyNoMoreInteractions(hookResolver); } - @Test void testMultipleRulesWithDifferentScopeMatching() throws Exception { ElementMatcher.Junction methodA = ElementMatchers.is(testCase_methodA); @@ -227,29 +219,28 @@ void testMultipleRulesWithDifferentScopeMatching() throws Exception { InstrumentationRule r1 = InstrumentationRule.builder().name("r1").scope(methodScope).build(); InstrumentationRule r2 = InstrumentationRule.builder().name("r2").scope(allScope).build(); - config = InstrumentationConfiguration.builder().source(settings).rule(r1).rule(r2).build(); FieldUtils.writeDeclaredField(resolver, "currentConfig", config, true); Map result = resolver.getHookConfigurations(testCaseClass); assertThat(result).hasSize(2); - verify(hookResolver, times(1)) - .buildHookConfiguration(same(config), eq(new HashSet<>(Arrays.asList(r1, r2)))); - verify(hookResolver, times(1)) - .buildHookConfiguration(same(config), eq(new HashSet<>(Arrays.asList(r2)))); + verify(hookResolver, times(1)).buildHookConfiguration(same(config), eq(new HashSet<>(Arrays.asList(r1, r2)))); + verify(hookResolver, times(1)).buildHookConfiguration(same(config), eq(new HashSet<>(Arrays.asList(r2)))); verifyNoMoreInteractions(hookResolver); } - @Test void testRuleIncludes() throws Exception { ElementMatcher.Junction method = ElementMatchers.is(testCase_methodA); InstrumentationScope methodScope = new InstrumentationScope(ElementMatchers.any(), method); - InstrumentationRule r1 = InstrumentationRule.builder().name("r1").scope(methodScope).includedRuleName("r2").build(); + InstrumentationRule r1 = InstrumentationRule.builder() + .name("r1") + .scope(methodScope) + .includedRuleName("r2") + .build(); InstrumentationRule r2 = InstrumentationRule.builder().name("r2").build(); - config = InstrumentationConfiguration.builder().source(settings).rule(r1).rule(r2).build(); FieldUtils.writeDeclaredField(resolver, "currentConfig", config, true); @@ -271,9 +262,7 @@ void noIncludes() { InstrumentationRule r2 = InstrumentationRule.builder().name("r2").build(); InstrumentationRule r3 = InstrumentationRule.builder().name("r3").build(); - config = InstrumentationConfiguration.builder().source(settings) - .rules(Arrays.asList(r1, r2, r3)) - .build(); + config = InstrumentationConfiguration.builder().source(settings).rules(Arrays.asList(r1, r2, r3)).build(); Set result = resolver.resolveIncludes(config, Arrays.asList(r1, r2)); @@ -287,25 +276,20 @@ void singleIncludes() { InstrumentationRule r3 = InstrumentationRule.builder().name("r3").build(); InstrumentationRule r4 = InstrumentationRule.builder().name("r4").build(); - config = InstrumentationConfiguration.builder().source(settings) - .rules(Arrays.asList(r1, r2, r3)) - .build(); + config = InstrumentationConfiguration.builder().source(settings).rules(Arrays.asList(r1, r2, r3)).build(); Set result = resolver.resolveIncludes(config, Arrays.asList(r1, r2)); assertThat(result).containsExactlyInAnyOrder(r1, r2, r3); } - @Test void nonExistingInclude() { InstrumentationRule r1 = InstrumentationRule.builder().name("r1").includedRuleName("r2").build(); InstrumentationRule r2 = InstrumentationRule.builder().name("r2").includedRuleName("I don't exist").build(); InstrumentationRule r3 = InstrumentationRule.builder().name("r3").build(); - config = InstrumentationConfiguration.builder().source(settings) - .rules(Arrays.asList(r1, r2, r3)) - .build(); + config = InstrumentationConfiguration.builder().source(settings).rules(Arrays.asList(r1, r2, r3)).build(); Set result = resolver.resolveIncludes(config, Arrays.asList(r1)); @@ -314,14 +298,16 @@ void nonExistingInclude() { @Test void multipleIncludes() { - InstrumentationRule r1 = InstrumentationRule.builder().name("r1").includedRuleName("r2").includedRuleName("r3").build(); + InstrumentationRule r1 = InstrumentationRule.builder() + .name("r1") + .includedRuleName("r2") + .includedRuleName("r3") + .build(); InstrumentationRule r2 = InstrumentationRule.builder().name("r2").build(); InstrumentationRule r3 = InstrumentationRule.builder().name("r3").build(); InstrumentationRule r4 = InstrumentationRule.builder().name("r4").build(); - config = InstrumentationConfiguration.builder().source(settings) - .rules(Arrays.asList(r1, r2, r3)) - .build(); + config = InstrumentationConfiguration.builder().source(settings).rules(Arrays.asList(r1, r2, r3)).build(); Set result = resolver.resolveIncludes(config, Arrays.asList(r1)); @@ -335,9 +321,7 @@ void cyclicDependency() { InstrumentationRule r3 = InstrumentationRule.builder().name("r3").includedRuleName("r1").build(); InstrumentationRule r4 = InstrumentationRule.builder().name("r4").build(); - config = InstrumentationConfiguration.builder().source(settings) - .rules(Arrays.asList(r1, r2, r3)) - .build(); + config = InstrumentationConfiguration.builder().source(settings).rules(Arrays.asList(r1, r2, r3)).build(); Set result = resolver.resolveIncludes(config, Arrays.asList(r1)); @@ -348,25 +332,16 @@ void cyclicDependency() { @Nested class IsIgnoredClass { - @Test - void testNonModifiableCLassesIgnored() { - when(instrumentation.isModifiableClass(same(String.class))).thenReturn(false); - - assertThat(resolver.isIgnoredClass(String.class, config)).isTrue(); - assertThat(resolver.isIgnoredClass(Integer.class, config)).isFalse(); - } - @Test void testInspectitClassesIgnored() { - assertThat(resolver.isIgnoredClass(InstrumentationSettings.class, config)).isTrue(); + assertThat(resolver.isIgnoredClass(TypeDescriptionWithClassLoader.of(InstrumentationSettings.class), config)).isTrue(); } - @Test void testBootstrapPackagesIgnoresWork() { when(settings.getIgnoredBootstrapPackages()).thenReturn(Collections.singletonMap("java.util.", true)); - assertThat(resolver.isIgnoredClass(Map.class, config)).isTrue(); - assertThat(resolver.isIgnoredClass(String.class, config)).isFalse(); + assertThat(resolver.isIgnoredClass(TypeDescriptionWithClassLoader.of(Map.class), config)).isTrue(); + assertThat(resolver.isIgnoredClass(TypeDescriptionWithClassLoader.of(String.class), config)).isFalse(); } @Test @@ -376,11 +351,11 @@ void testGeneralPackagesIgnoresWork() throws Exception { String packagename = copied.getName(); packagename = packagename.substring(0, packagename.length() - copied.getSimpleName().length()); - assertThat(resolver.isIgnoredClass(copied, config)).isFalse(); + assertThat(resolver.isIgnoredClass(TypeDescriptionWithClassLoader.of(copied), config)).isFalse(); when(settings.getIgnoredPackages()).thenReturn(Collections.singletonMap(packagename, true)); - assertThat(resolver.isIgnoredClass(copied, config)).isTrue(); + assertThat(resolver.isIgnoredClass(TypeDescriptionWithClassLoader.of(copied), config)).isTrue(); } @Test @@ -389,8 +364,8 @@ void testDoNotInstrumentMarkerWorks() throws Exception { Class ignored = Class.forName(IgnoredClass.class.getName(), false, dcl); Class notIgnored = Class.forName(NotIgnoredClass.class.getName(), false, dcl); - assertThat(resolver.isIgnoredClass(ignored, config)).isTrue(); - assertThat(resolver.isIgnoredClass(notIgnored, config)).isFalse(); + assertThat(resolver.isIgnoredClass(TypeDescriptionWithClassLoader.of(ignored), config)).isTrue(); + assertThat(resolver.isIgnoredClass(TypeDescriptionWithClassLoader.of(notIgnored), config)).isFalse(); } @Test @@ -398,9 +373,10 @@ void ignoreLambda() throws Exception { DummyClassLoader dcl = new DummyClassLoader(getClass().getClassLoader(), LambdaTestProvider.class); Class lambdasProvider = dcl.loadClass(LambdaTestProvider.class.getName()); - Class lambdaWithDefault = (Class) lambdasProvider.getMethod("getLambdaWithDefaultMethod").invoke(null); + Class lambdaWithDefault = (Class) lambdasProvider.getMethod("getLambdaWithDefaultMethod") + .invoke(null); - assertThat(resolver.isIgnoredClass(lambdaWithDefault, config)).isTrue(); + assertThat(resolver.isIgnoredClass(TypeDescriptionWithClassLoader.of(lambdaWithDefault), config)).isTrue(); } @Test @@ -410,23 +386,24 @@ void notIgnoreLambda() throws Exception { DummyClassLoader dcl = new DummyClassLoader(getClass().getClassLoader(), LambdaTestProvider.class); Class lambdasProvider = dcl.loadClass(LambdaTestProvider.class.getName()); - Class lambdaWithDefault = (Class) lambdasProvider.getMethod("getLambdaWithDefaultMethod").invoke(null); + Class lambdaWithDefault = (Class) lambdasProvider.getMethod("getLambdaWithDefaultMethod") + .invoke(null); - assertThat(resolver.isIgnoredClass(lambdaWithDefault, config)).isFalse(); + assertThat(resolver.isIgnoredClass(TypeDescriptionWithClassLoader.of(lambdaWithDefault), config)).isFalse(); } - @Test void testIgnoredClassloader() throws Exception { DummyClassLoader dcl = new IgnoredDummyClassLoader(FakeExecutor.class); Class copied = Class.forName(FakeExecutor.class.getName(), false, dcl); - assertThat(resolver.isIgnoredClass(copied, config)).isTrue(); + assertThat(resolver.isIgnoredClass(TypeDescriptionWithClassLoader.of(copied), config)).isTrue(); } } } class IgnoredDummyClassLoader extends DummyClassLoader implements DoNotInstrumentMarker { + public IgnoredDummyClassLoader(Class... classesToCopy) { super(classesToCopy); } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationRuleResolverTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationRuleResolverTest.java index ea86738ea1..abf92b5907 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationRuleResolverTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/InstrumentationRuleResolverTest.java @@ -2,9 +2,11 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Multiset; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; @@ -13,6 +15,8 @@ import rocks.inspectit.ocelot.config.model.instrumentation.actions.ActionCallSettings; import rocks.inspectit.ocelot.config.model.instrumentation.rules.InstrumentationRuleSettings; import rocks.inspectit.ocelot.config.model.instrumentation.rules.MetricRecordingSettings; +import rocks.inspectit.ocelot.config.model.selfmonitoring.ActionTracingMode; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.instrumentation.config.model.ActionCallConfig; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationRule; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationScope; @@ -27,11 +31,20 @@ @ExtendWith(MockitoExtension.class) class InstrumentationRuleResolverTest { + @InjectMocks + private InstrumentationRuleResolver ruleResolver; + @Mock private InstrumentationScopeResolver scopeResolver; - @InjectMocks - private InstrumentationRuleResolver ruleResolver; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private InspectitEnvironment environment; + + @BeforeEach + public void setupEnvironment() { + lenient().when(environment.getCurrentConfig().getSelfMonitoring().getActionTracing()) + .thenReturn(ActionTracingMode.ONLY_ENABLED); + } @Nested public class Resolve { @@ -81,6 +94,7 @@ public void resolveRules() { assertThat(result).hasSize(1); assertThat(result).flatExtracting(InstrumentationRule::getName).contains("rule-key"); assertThat(result).flatExtracting(InstrumentationRule::getScopes).contains(scope); + assertThat(result).flatExtracting(InstrumentationRule::isActionTracing).containsExactly(false); verify(scopeResolver).resolve(settings); verifyNoMoreInteractions(scopeResolver); } @@ -106,7 +120,6 @@ public void resolveRulesDisabledScope() { verifyNoMoreInteractions(scopeResolver); } - @Test public void verifyRuleIncludesPreserved() { InstrumentationRuleSettings ruleSettings = new InstrumentationRuleSettings(); @@ -119,12 +132,10 @@ public void verifyRuleIncludesPreserved() { Set result = ruleResolver.resolve(settings, Collections.emptyMap()); assertThat(result).hasSize(1); - assertThat(result) - .flatExtracting(InstrumentationRule::getIncludedRuleNames) + assertThat(result).flatExtracting(InstrumentationRule::getIncludedRuleNames) .containsExactlyInAnyOrder("inc1", "inc2"); } - @Test public void verifyPreEntryActionsPreserved() { ActionCallSettings first = Mockito.mock(ActionCallSettings.class); @@ -144,7 +155,6 @@ public void verifyPreEntryActionsPreserved() { .anySatisfy((ac) -> verifyActionCall(ac, "second", second)); } - @Test public void verifyEntryActionsPreserved() { ActionCallSettings first = Mockito.mock(ActionCallSettings.class); @@ -164,7 +174,6 @@ public void verifyEntryActionsPreserved() { .anySatisfy((ac) -> verifyActionCall(ac, "second", second)); } - @Test public void verifyPostEntryActionsPreserved() { ActionCallSettings first = Mockito.mock(ActionCallSettings.class); @@ -203,7 +212,6 @@ public void verifyPreExitActionsPreserved() { .anySatisfy((ac) -> verifyActionCall(ac, "second", second)); } - @Test public void verifyExitActionsPreserved() { ActionCallSettings first = Mockito.mock(ActionCallSettings.class); @@ -223,7 +231,6 @@ public void verifyExitActionsPreserved() { .anySatisfy((ac) -> verifyActionCall(ac, "second", second)); } - @Test public void verifyPostExitActionsPreserved() { ActionCallSettings first = Mockito.mock(ActionCallSettings.class); @@ -243,8 +250,77 @@ public void verifyPostExitActionsPreserved() { .anySatisfy((ac) -> verifyActionCall(ac, "second", second)); } + @Test + public void verifyActionTracingEnabled() { + InstrumentationRuleSettings ruleSettings = new InstrumentationRuleSettings(); + ruleSettings.setEnabled(true); + ruleSettings.setEnableActionTracing(true); + InstrumentationSettings settings = new InstrumentationSettings(); + settings.setRules(Collections.singletonMap("rule-key", ruleSettings)); + + Set result = ruleResolver.resolve(settings, Collections.emptyMap()); + + assertThat(result).hasSize(1); + assertThat(result).flatExtracting(InstrumentationRule::isActionTracing).containsExactly(true); + } + + @Test + public void verifyActionTracingDisabled_Off() { + when(environment.getCurrentConfig() + .getSelfMonitoring() + .getActionTracing()).thenReturn(ActionTracingMode.OFF); + + InstrumentationRuleSettings ruleSettings = new InstrumentationRuleSettings(); + ruleSettings.setEnabled(true); + ruleSettings.setEnableActionTracing(true); + InstrumentationSettings settings = new InstrumentationSettings(); + settings.setRules(Collections.singletonMap("rule-key", ruleSettings)); + + Set result = ruleResolver.resolve(settings, Collections.emptyMap()); + + assertThat(result).hasSize(1); + assertThat(result).flatExtracting(InstrumentationRule::isActionTracing).containsExactly(false); + } + + @Test + public void verifyActionTracingEnabled_All() { + when(environment.getCurrentConfig() + .getSelfMonitoring() + .getActionTracing()).thenReturn(ActionTracingMode.ALL_WITH_DEFAULT); + + InstrumentationRuleSettings ruleSettings = new InstrumentationRuleSettings(); + ruleSettings.setEnabled(true); + ruleSettings.setEnableActionTracing(false); + InstrumentationSettings settings = new InstrumentationSettings(); + settings.setRules(Collections.singletonMap("rule-key", ruleSettings)); + + Set result = ruleResolver.resolve(settings, Collections.emptyMap()); + + assertThat(result).hasSize(1); + assertThat(result).flatExtracting(InstrumentationRule::isActionTracing).containsExactly(true); + } + + @Test + public void verifyActionTracingDisabled_WithoutDefault() { + when(environment.getCurrentConfig() + .getSelfMonitoring() + .getActionTracing()).thenReturn(ActionTracingMode.ALL_WITHOUT_DEFAULT); + + InstrumentationRuleSettings ruleSettings = new InstrumentationRuleSettings(); + ruleSettings.setEnabled(true); + ruleSettings.setEnableActionTracing(true); + ruleSettings.setDefaultRule(true); + InstrumentationSettings settings = new InstrumentationSettings(); + settings.setRules(Collections.singletonMap("rule-key", ruleSettings)); + + Set result = ruleResolver.resolve(settings, Collections.emptyMap()); + + assertThat(result).hasSize(1); + assertThat(result).flatExtracting(InstrumentationRule::isActionTracing).containsExactly(false); + } + private void verifyActionCall(ActionCallConfig ac, String name, ActionCallSettings callSettings) { - assertThat(ac.getName()).isEqualTo(name); + assertThat(ac.getDataKey()).isEqualTo(name); assertThat(ac.getCallSettings()).isSameAs(callSettings); } @@ -255,10 +331,7 @@ class ResolveMetricRecordings { @Test void emptyMetricName() { - MetricRecordingSettings rec = MetricRecordingSettings.builder() - .value("42") - .metric("") - .build(); + MetricRecordingSettings rec = MetricRecordingSettings.builder().value("42").metric("").build(); InstrumentationRuleSettings irs = new InstrumentationRuleSettings(); irs.setMetrics(ImmutableMap.of("default_metric", rec)); @@ -270,13 +343,9 @@ void emptyMetricName() { }); } - @Test void customMetricName() { - MetricRecordingSettings rec = MetricRecordingSettings.builder() - .value("42") - .metric("my_metric") - .build(); + MetricRecordingSettings rec = MetricRecordingSettings.builder().value("42").metric("my_metric").build(); InstrumentationRuleSettings irs = new InstrumentationRuleSettings(); irs.setMetrics(ImmutableMap.of("default_metric", rec)); @@ -288,12 +357,9 @@ void customMetricName() { }); } - @Test void emptyValue() { - MetricRecordingSettings rec = MetricRecordingSettings.builder() - .value("") - .build(); + MetricRecordingSettings rec = MetricRecordingSettings.builder().value("").build(); InstrumentationRuleSettings irs = new InstrumentationRuleSettings(); irs.setMetrics(ImmutableMap.of("default_metric", rec)); @@ -304,9 +370,7 @@ void emptyValue() { @Test void nullValue() { - MetricRecordingSettings rec = MetricRecordingSettings.builder() - .value(null) - .build(); + MetricRecordingSettings rec = MetricRecordingSettings.builder().value(null).build(); InstrumentationRuleSettings irs = new InstrumentationRuleSettings(); irs.setMetrics(ImmutableMap.of("default_metric", rec)); diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/MethodHookConfigurationResolverTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/MethodHookConfigurationResolverTest.java index 96e276e64a..d53eddc715 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/MethodHookConfigurationResolverTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/MethodHookConfigurationResolverTest.java @@ -55,14 +55,14 @@ void initTestData() { ActionCallSettings seta1 = new ActionCallSettings(); seta1.setAction("providerA"); callToA1 = ActionCallConfig.builder() - .name("my_key") + .dataKey("my_key") .callSettings(seta1) .action(providerA).build(); ActionCallSettings seta2 = new ActionCallSettings(); seta2.setAction("providerA"); callToA2 = ActionCallConfig.builder() - .name("my_key") + .dataKey("my_key") .callSettings(seta2) .action(providerA).build(); @@ -73,7 +73,7 @@ void initTestData() { ActionCallSettings setb1 = new ActionCallSettings(); setb1.setAction("providerB"); callToB = ActionCallConfig.builder() - .name("my_key") + .dataKey("my_key") .callSettings(setb1) .action(providerB).build(); } @@ -209,7 +209,7 @@ void verifyProvidersOrderedByDependencies() throws Exception { dependingOnFirst.setAction("providerA"); dependingOnFirst.setDataInput(Maps.newHashMap("someArgument", "my_key")); ActionCallConfig depFirst = ActionCallConfig.builder() - .name("second_key") + .dataKey("second_key") .callSettings(dependingOnFirst) .action(providerA).build(); @@ -217,7 +217,7 @@ void verifyProvidersOrderedByDependencies() throws Exception { dependingOnSecond.setAction("providerA"); dependingOnSecond.setDataInput(Maps.newHashMap("someArgument", "second_key")); ActionCallConfig depSecond = ActionCallConfig.builder() - .name("second_key") + .dataKey("second_key") .callSettings(dependingOnSecond) .action(providerA).build(); @@ -241,7 +241,7 @@ void verifyPreEntryProvidersPreserved() throws Exception { ActionCallSettings firstSettings = new ActionCallSettings(); firstSettings.setAction("providerA"); ActionCallConfig first = ActionCallConfig.builder() - .name("first") + .dataKey("first") .callSettings(firstSettings) .action(providerA).build(); @@ -249,7 +249,7 @@ void verifyPreEntryProvidersPreserved() throws Exception { secondSettings.setAction("providerB"); secondSettings.setDataInput(ImmutableMap.of("somearg", "first")); ActionCallConfig second = ActionCallConfig.builder() - .name("second") + .dataKey("second") .callSettings(secondSettings) .action(providerB).build(); @@ -270,7 +270,7 @@ void verifyEntryProvidersPreserved() throws Exception { ActionCallSettings firstSettings = new ActionCallSettings(); firstSettings.setAction("providerA"); ActionCallConfig first = ActionCallConfig.builder() - .name("first") + .dataKey("first") .callSettings(firstSettings) .action(providerA).build(); @@ -278,7 +278,7 @@ void verifyEntryProvidersPreserved() throws Exception { secondSettings.setAction("providerB"); secondSettings.setDataInput(ImmutableMap.of("somearg", "first")); ActionCallConfig second = ActionCallConfig.builder() - .name("second") + .dataKey("second") .callSettings(secondSettings) .action(providerB).build(); @@ -300,7 +300,7 @@ void verifyPostEntryProvidersPreserved() throws Exception { ActionCallSettings firstSettings = new ActionCallSettings(); firstSettings.setAction("providerA"); ActionCallConfig first = ActionCallConfig.builder() - .name("first") + .dataKey("first") .callSettings(firstSettings) .action(providerA).build(); @@ -308,7 +308,7 @@ void verifyPostEntryProvidersPreserved() throws Exception { secondSettings.setAction("providerB"); secondSettings.setDataInput(ImmutableMap.of("somearg", "first")); ActionCallConfig second = ActionCallConfig.builder() - .name("second") + .dataKey("second") .callSettings(secondSettings) .action(providerB).build(); @@ -329,7 +329,7 @@ void verifyPreExitProvidersPreserved() throws Exception { ActionCallSettings firstSettings = new ActionCallSettings(); firstSettings.setAction("providerA"); ActionCallConfig first = ActionCallConfig.builder() - .name("first") + .dataKey("first") .callSettings(firstSettings) .action(providerA).build(); @@ -337,7 +337,7 @@ void verifyPreExitProvidersPreserved() throws Exception { secondSettings.setAction("providerB"); secondSettings.setDataInput(ImmutableMap.of("somearg", "first")); ActionCallConfig second = ActionCallConfig.builder() - .name("second") + .dataKey("second") .callSettings(secondSettings) .action(providerB).build(); @@ -358,7 +358,7 @@ void verifyExitProvidersPreserved() throws Exception { ActionCallSettings firstSettings = new ActionCallSettings(); firstSettings.setAction("providerA"); ActionCallConfig first = ActionCallConfig.builder() - .name("first") + .dataKey("first") .callSettings(firstSettings) .action(providerA).build(); @@ -366,7 +366,7 @@ void verifyExitProvidersPreserved() throws Exception { secondSettings.setAction("providerB"); secondSettings.setDataInput(ImmutableMap.of("somearg", "first")); ActionCallConfig second = ActionCallConfig.builder() - .name("second") + .dataKey("second") .callSettings(secondSettings) .action(providerB).build(); @@ -388,7 +388,7 @@ void verifyPostExitProvidersPreserved() throws Exception { ActionCallSettings firstSettings = new ActionCallSettings(); firstSettings.setAction("providerA"); ActionCallConfig first = ActionCallConfig.builder() - .name("first") + .dataKey("first") .callSettings(firstSettings) .action(providerA).build(); @@ -396,7 +396,7 @@ void verifyPostExitProvidersPreserved() throws Exception { secondSettings.setAction("providerB"); secondSettings.setDataInput(ImmutableMap.of("somearg", "first")); ActionCallConfig second = ActionCallConfig.builder() - .name("second") + .dataKey("second") .callSettings(secondSettings) .action(providerB).build(); diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/RuleDependencyTreePrinterTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/RuleDependencyTreePrinterTest.java index d1d80ae68c..3ede2af13e 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/RuleDependencyTreePrinterTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/RuleDependencyTreePrinterTest.java @@ -23,6 +23,8 @@ private List generateRules() { .name("rule_a") .includedRuleName("rule_b") .scope(dummyScope) + .defaultRule(true) + .actionTracing(true) .build(), InstrumentationRule.builder() .name("rule_b") @@ -38,6 +40,7 @@ private List generateRules() { .build(), InstrumentationRule.builder() .name("rule_e") + .actionTracing(true) .build(), InstrumentationRule.builder() .name("rule_f") @@ -46,6 +49,7 @@ private List generateRules() { .build(), InstrumentationRule.builder() .name("rule_g") + .defaultRule(true) .build() ); // @formatter:on @@ -117,14 +121,14 @@ public void printTree() { "------------------------------------------------------------\n" + "Rule Dependency-Tree\n" + "------------------------------------------------------------\n" + - "+--- rule_a\n" + + "+--- *rule_a (ACTIONTRACING)\n" + "| \\--- rule_b\n" + "+--- rule_c\n" + "| +--- rule_b\n" + "| \\--- rule_d\n" + "\\--- rule_f\n" + - " +--- rule_e\n"+ - " \\--- rule_g\n" + " +--- rule_e (ACTIONTRACING)\n"+ + " \\--- *rule_g\n" ); // @formatter:on } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/GenericActionCallSorterTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/GenericActionCallSorterTest.java index ff78b8e0ec..7cf2a70f8b 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/GenericActionCallSorterTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/config/callsorting/GenericActionCallSorterTest.java @@ -32,7 +32,7 @@ private static class TestCallBuilder { ActionCallConfig build() { return ActionCallConfig.builder() - .name(name) + .dataKey(name) .callSettings(settings) .build(); } @@ -102,7 +102,7 @@ TestCallBuilder onlyIfNotNull(String data) { List getNames(List calls) { return calls.stream() - .map(ActionCallConfig::getName) + .map(ActionCallConfig::getDataKey) .collect(Collectors.toList()); } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/HookManagerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/HookManagerTest.java index 90c493470a..3d8bc840d6 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/HookManagerTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/HookManagerTest.java @@ -1,5 +1,6 @@ package rocks.inspectit.ocelot.core.instrumentation.hook; +import net.bytebuddy.description.method.MethodDescription; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -10,14 +11,20 @@ import rocks.inspectit.ocelot.bootstrap.instrumentation.IMethodHook; import rocks.inspectit.ocelot.bootstrap.instrumentation.noop.NoopMethodHook; import rocks.inspectit.ocelot.core.instrumentation.config.InstrumentationConfigurationResolver; +import rocks.inspectit.ocelot.core.instrumentation.config.model.MethodHookConfiguration; import rocks.inspectit.ocelot.core.selfmonitoring.ActionScopeFactory; import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; +import rocks.inspectit.ocelot.core.utils.CoreUtils; +import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; +import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) public class HookManagerTest { @@ -83,4 +90,74 @@ public void preventRecursion() { assertThat(resultSecond).isSameAs(NoopMethodHook.INSTANCE); } } + + @Nested + public class LazyHooking { + + final Method testCase_methodA = LazyHooking.class.getDeclaredMethod("methodA"); + + private MethodHook dummyHook; + + private String methodASignature; + + private void initLazyHooking() { + MethodDescription description = new MethodDescription.ForLoadedMethod(testCase_methodA); + MethodHookConfiguration hookConfiguration = MethodHookConfiguration.builder().build(); + HashMap hookConfigs = new HashMap<>(); + hookConfigs.put(description, hookConfiguration); + methodASignature = CoreUtils.getSignature(description); + dummyHook = MethodHook.builder().actionScopeFactory(mock(ActionScopeFactory.class)).build(); + + when(configResolver.getHookConfigurations(any(Class.class))).thenReturn(hookConfigs); + when(hookGenerator.buildHook(any(), any(), any())).thenReturn(dummyHook); + + ReflectionTestUtils.setField(manager, "isLazyHookingEnabled", true); + } + + public void methodA() { + + } + + LazyHooking() throws NoSuchMethodException { + } + + @Test + void testHooksLoadLazy() { + + initLazyHooking(); + + IMethodHook lazyHook = manager.getHook(HookManagerTest.class, methodASignature); + + Map, Map> lazyLoadedHooks = (Map, Map>) ReflectionTestUtils.getField(manager, "lazyLoadedHooks"); + Set> lazyHookingPerformed = (Set>) ReflectionTestUtils.getField(manager, "lazyHookingPerformed"); + + assertThat(lazyHookingPerformed).contains(HookManagerTest.class); + assertThat(lazyLoadedHooks).containsKey(HookManagerTest.class); + assertThat(lazyHook).isEqualTo(dummyHook); + } + + @Test + void testLazyHooksMergedIntoHooksMap() { + + initLazyHooking(); + + IMethodHook lazyHook = manager.getHook(HookManagerTest.class, methodASignature); + + HookManager.HookUpdate hookUpdate = manager.startUpdate(); + hookUpdate.updateHooksForClass(HookManagerTest.class); + hookUpdate.commitUpdate(); + + IMethodHook regularHook = manager.getHook(HookManagerTest.class, methodASignature); + + Map, Map> hooks = (Map, Map>) ReflectionTestUtils.getField(manager, "hooks"); + Map, Map> lazyLoadedHooks = (Map, Map>) ReflectionTestUtils.getField(manager, "lazyLoadedHooks"); + Set> lazyHookingPerformed = (Set>) ReflectionTestUtils.getField(manager, "lazyHookingPerformed"); + + assertThat(lazyHookingPerformed).contains(HookManagerTest.class); + assertThat(hooks).containsKey(HookManagerTest.class); + assertThat(lazyLoadedHooks).isEmpty(); + assertThat(regularHook).isEqualTo(lazyHook); + } + } + } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java index 36ac188b1f..970b7c84bf 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java @@ -4,14 +4,18 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import rocks.inspectit.ocelot.config.model.instrumentation.rules.MetricRecordingSettings; import rocks.inspectit.ocelot.config.model.instrumentation.rules.RuleTracingSettings; +import rocks.inspectit.ocelot.config.model.selfmonitoring.ActionTracingMode; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.instrumentation.config.model.MethodHookConfiguration; import rocks.inspectit.ocelot.core.instrumentation.context.ContextManager; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction; @@ -33,21 +37,29 @@ @ExtendWith(MockitoExtension.class) public class MethodHookGeneratorTest { + @InjectMocks + MethodHookGenerator generator; + @Mock ContextManager contextManager; @Mock ActionScopeFactory actionScopeFactory; - @InjectMocks - MethodHookGenerator generator; - @Mock VariableAccessorFactory variableAccessorFactory; @Mock ObfuscationManager obfuscation; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + InspectitEnvironment environment; + + @BeforeEach + public void setupEnvironment() { + lenient().when(environment.getCurrentConfig().getSelfMonitoring().getActionTracing()).thenReturn(ActionTracingMode.ALL_WITH_DEFAULT); + } + @Nested class BuildHook { diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookTest.java index db396f4e0a..73e39d70a4 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookTest.java @@ -7,6 +7,7 @@ import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import rocks.inspectit.ocelot.bootstrap.context.InternalInspectitContext; +import rocks.inspectit.ocelot.core.instrumentation.config.model.MethodHookConfiguration; import rocks.inspectit.ocelot.core.instrumentation.context.ContextManager; import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction; @@ -34,6 +35,8 @@ public class MethodHookTest { @Mock private ActionScopeFactory actionScopeFactory; + private MethodHookConfiguration sourceConfiguration = MethodHookConfiguration.builder().build(); + @Nested class OnEnter { @@ -64,6 +67,7 @@ void testExceptionHandling() { .entryActions(Arrays.asList(first, second, third)) .methodInformation(Mockito.mock(MethodReflectionInformation.class)) .actionScopeFactory(actionScopeFactory) + .sourceConfiguration(sourceConfiguration) .build(); InternalInspectitContext ctx = hook.onEnter(null, null); @@ -103,6 +107,7 @@ void testReactivationOfActionsOnCopy() { .entryAction(action) .methodInformation(Mockito.mock(MethodReflectionInformation.class)) .actionScopeFactory(actionScopeFactory) + .sourceConfiguration(sourceConfiguration) .build(); InternalInspectitContext ctx = hook.onEnter(null, null); @@ -119,7 +124,7 @@ void testReactivationOfActionsOnCopy() { verify(actionScopeFactory).createScope(action); verifyNoMoreInteractions(actionScopeFactory, action); - MethodHook copy = hook.getResettedCopy(); + MethodHook copy = hook.getResetCopy(); ctx = copy.onEnter(null, null); copy.onExit(null, null, null, null, ctx); @@ -161,6 +166,7 @@ void testExceptionHandling() { .exitActions(Arrays.asList(first, second, third)) .methodInformation(Mockito.mock(MethodReflectionInformation.class)) .actionScopeFactory(actionScopeFactory) + .sourceConfiguration(sourceConfiguration) .build(); InternalInspectitContext ctx = hook.onEnter(null, null); @@ -194,6 +200,7 @@ void testReactivationOfActionsOnCopy() { .exitAction(action) .methodInformation(Mockito.mock(MethodReflectionInformation.class)) .actionScopeFactory(actionScopeFactory) + .sourceConfiguration(sourceConfiguration) .build(); InternalInspectitContext ctx = hook.onEnter(null, null); @@ -210,7 +217,7 @@ void testReactivationOfActionsOnCopy() { verify(actionScopeFactory).createScope(action); verifyNoMoreInteractions(actionScopeFactory, action); - MethodHook copy = hook.getResettedCopy(); + MethodHook copy = hook.getResetCopy(); ctx = copy.onEnter(null, null); copy.onExit(null, null, null, null, ctx); diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/AsyncClassTransformerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/AsyncClassTransformerTest.java similarity index 86% rename from inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/AsyncClassTransformerTest.java rename to inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/AsyncClassTransformerTest.java index 08ff6fa707..98c1228bdb 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/AsyncClassTransformerTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/AsyncClassTransformerTest.java @@ -1,4 +1,4 @@ -package rocks.inspectit.ocelot.core.instrumentation; +package rocks.inspectit.ocelot.core.instrumentation.transformer; import net.bytebuddy.matcher.ElementMatchers; import org.junit.jupiter.api.BeforeAll; @@ -13,6 +13,7 @@ import rocks.inspectit.ocelot.config.model.instrumentation.InstrumentationSettings; import rocks.inspectit.ocelot.config.model.instrumentation.InternalSettings; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.instrumentation.FakeExecutor; import rocks.inspectit.ocelot.core.instrumentation.config.InstrumentationConfigurationResolver; import rocks.inspectit.ocelot.core.instrumentation.config.model.ClassInstrumentationConfiguration; import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationRule; @@ -71,17 +72,6 @@ void setupTransformer() { transformer.classDefinitionListeners = new ArrayList<>(); } - @Nested - public class Init { - - @Test - void testTransfomerSetup() { - transformer.init(); - verify(instrumentation).addTransformer(transformer, true); - } - - } - @Nested public class Destroy { @@ -104,12 +94,9 @@ void testTransfomerCleanup() throws Exception { InstrumentationScope scope = new InstrumentationScope(ElementMatchers.any(), ElementMatchers.any()); InstrumentationRule rule = InstrumentationRule.builder().scope(scope).build(); - ClassInstrumentationConfiguration mockedConfig = new ClassInstrumentationConfiguration( - Collections.singleton(mockSensor), Collections.singleton(rule), null - ); - when(configResolver.getClassInstrumentationConfiguration(any())).thenReturn(mockedConfig); - when(classLoaderDelegation.getClassLoaderClassesRequiringRetransformation(any(), any())) - .thenReturn(new LinkedHashSet<>()); + ClassInstrumentationConfiguration mockedConfig = new ClassInstrumentationConfiguration(Collections.singleton(mockSensor), Collections.singleton(rule), null); + when(configResolver.getClassInstrumentationConfiguration(any(Class.class))).thenReturn(mockedConfig); + when(classLoaderDelegation.getClassLoaderClassesRequiringRetransformation(any(), any())).thenReturn(new LinkedHashSet<>()); Class clazz = AsyncClassTransformerTest.class; String className = clazz.getName().replace('.', '/'); @@ -118,17 +105,16 @@ void testTransfomerCleanup() throws Exception { verify(mockSensor).instrument(any(), any(), any()); Mockito.reset(mockSensor); - doAnswer((inv) -> transformer.transform(clazz.getClassLoader(), className, clazz, null, bytecodeOfTest)) - .when(instrumentation).retransformClasses(clazz); + doAnswer((inv) -> transformer.transform(clazz.getClassLoader(), className, clazz, null, bytecodeOfTest)).when(instrumentation) + .retransformClasses(clazz); transformer.destroy(); verify(mockSensor, never()).instrument(any(), any(), any()); verify(instrumentation).retransformClasses(clazz); - verify(instrumentation).removeTransformer(transformer); + //verify(instrumentation).removeTransformer(transformer); } - @Test void verifyClassloaderDeinstrumentedLast() throws Exception { @@ -143,12 +129,9 @@ void verifyClassloaderDeinstrumentedLast() throws Exception { SpecialSensor mockSensor = Mockito.mock(SpecialSensor.class); when(mockSensor.instrument(any(), any(), any())).then(invocation -> invocation.getArgument(2)); - ClassInstrumentationConfiguration mockedConfig = new ClassInstrumentationConfiguration( - Collections.singleton(mockSensor), Collections.emptySet(), null - ); - when(configResolver.getClassInstrumentationConfiguration(any())).thenReturn(mockedConfig); - when(classLoaderDelegation.getClassLoaderClassesRequiringRetransformation(any(), any())) - .thenReturn(new LinkedHashSet<>()); + ClassInstrumentationConfiguration mockedConfig = new ClassInstrumentationConfiguration(Collections.singleton(mockSensor), Collections.emptySet(), null); + when(configResolver.getClassInstrumentationConfiguration(any(Class.class))).thenReturn(mockedConfig); + when(classLoaderDelegation.getClassLoaderClassesRequiringRetransformation(any(), any())).thenReturn(new LinkedHashSet<>()); List> classes = Arrays.asList(String.class, Integer.class, URLClassLoader.class, ClassLoader.class); for (Class clazz : classes) { @@ -183,10 +166,9 @@ void verifyClassloaderDeinstrumentedLast() throws Exception { ordered.verify(instrumentation).retransformClasses(String.class); ordered.verify(instrumentation).retransformClasses(argThat(matcher), argThat(matcher)); - verify(instrumentation).removeTransformer(transformer); + //verify(instrumentation).removeTransformer(transformer); } - @Test void testRetransformErrorHandling() throws Exception { @@ -226,24 +208,27 @@ void testRetransformErrorHandling() throws Exception { @Nested public class Transform { + private void prepareConfig() { + InstrumentationSettings settings = new InstrumentationSettings(); + InspectitConfig conf = new InspectitConfig(); + conf.setInstrumentation(settings); + when(env.getCurrentConfig()).thenReturn(conf); + } + @Test void verifyClassInstrumentedEventPublished() throws Exception { - when(classLoaderDelegation.getClassLoaderClassesRequiringRetransformation(any(), any())) - .thenReturn(new LinkedHashSet<>()); - IClassDefinitionListener listener = Mockito.mock(IClassDefinitionListener.class); + prepareConfig(); - transformer.init(); + when(classLoaderDelegation.getClassLoaderClassesRequiringRetransformation(any(), any())).thenReturn(new LinkedHashSet<>()); SpecialSensor mockSensor = Mockito.mock(SpecialSensor.class); when(mockSensor.instrument(any(), any(), any())).then(invocation -> invocation.getArgument(2)); InstrumentationScope scope = new InstrumentationScope(ElementMatchers.any(), ElementMatchers.any()); InstrumentationRule rule = InstrumentationRule.builder().scope(scope).build(); - ClassInstrumentationConfiguration mockedConfig = new ClassInstrumentationConfiguration( - Collections.singleton(mockSensor), Collections.singleton(rule), null - ); - when(configResolver.getClassInstrumentationConfiguration(any())).thenReturn(mockedConfig); + ClassInstrumentationConfiguration mockedConfig = new ClassInstrumentationConfiguration(Collections.singleton(mockSensor), Collections.singleton(rule), null); + when(configResolver.getClassInstrumentationConfiguration(any(Class.class))).thenReturn(mockedConfig); Class clazz = AsyncClassTransformerTest.class; String className = clazz.getName().replace('.', '/'); @@ -256,10 +241,13 @@ void verifyClassInstrumentedEventPublished() throws Exception { @Test void testDefinitionListenersInvokedForNewClasses() throws Exception { + + prepareConfig(); + IClassDefinitionListener listener = Mockito.mock(IClassDefinitionListener.class); transformer.classDefinitionListeners = Arrays.asList(listener); - transformer.init(); + //transformer.init(); Class clazz = AsyncClassTransformerTest.class; String className = clazz.getName().replace('.', '/'); @@ -270,18 +258,18 @@ void testDefinitionListenersInvokedForNewClasses() throws Exception { } - @Test void testDefinitionListenersNotInvokedForExistingClasses() throws Exception { - when(classLoaderDelegation.getClassLoaderClassesRequiringRetransformation(any(), any())) - .thenReturn(new LinkedHashSet<>()); + + prepareConfig(); + + when(classLoaderDelegation.getClassLoaderClassesRequiringRetransformation(any(), any())).thenReturn(new LinkedHashSet<>()); IClassDefinitionListener listener = Mockito.mock(IClassDefinitionListener.class); transformer.classDefinitionListeners = Arrays.asList(listener); - when(configResolver.getClassInstrumentationConfiguration(any())) - .thenReturn(ClassInstrumentationConfiguration.NO_INSTRUMENTATION); + when(configResolver.getClassInstrumentationConfiguration(any(Class.class))).thenReturn(ClassInstrumentationConfiguration.NO_INSTRUMENTATION); - transformer.init(); + //transformer.init(); Class clazz = AsyncClassTransformerTest.class; String className = clazz.getName().replace('.', '/'); diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformerProxyGeneratorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformerProxyGeneratorTest.java new file mode 100644 index 0000000000..b0d597903a --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/ClassTransformerProxyGeneratorTest.java @@ -0,0 +1,136 @@ +package rocks.inspectit.ocelot.core.instrumentation.transformer; + +import org.hamcrest.CoreMatchers; +import org.junit.Assume; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.Instrumentation; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class ClassTransformerProxyGeneratorTest { + + @Mock + Instrumentation instrumentation; + + @Mock + ClassTransformer transformer1; + + @Mock + ClassTransformer transformer2; + + @InjectMocks + ClassTransformerProxyGenerator transformerProxy; + + @Nested + public class Init { + + @Test + void testProxyCreated() { + transformerProxy.classTransformers = Arrays.asList(transformer1, transformer2); + when(transformer1.isEnabled()).thenReturn(true); + when(transformer2.isEnabled()).thenReturn(false); + + transformerProxy.init(); + + assertThat(transformerProxy.activeTransformer).isEqualTo(transformer1); + assertThat(transformerProxy.transformerProxy).isNotNull(); + + verify(instrumentation).addTransformer(transformerProxy.transformerProxy, true); + } + + @Test + void testNoTransformerAvailable() { + transformerProxy.classTransformers = Arrays.asList(transformer1, transformer2); + when(transformer1.isEnabled()).thenReturn(false); + when(transformer2.isEnabled()).thenReturn(false); + + assertThatExceptionOfType(IllegalStateException.class).isThrownBy(() -> { + transformerProxy.init(); + }).withMessage("No active ClassTransformer found!"); + + } + + @Test + void testMultipleActiveTransformerAvailable() { + transformerProxy.classTransformers = Arrays.asList(transformer1, transformer2); + when(transformer1.isEnabled()).thenReturn(true); + when(transformer2.isEnabled()).thenReturn(true); + + assertThatExceptionOfType(IllegalStateException.class).isThrownBy(() -> { + transformerProxy.init(); + }).withMessageStartingWith("Found more than one active ClassTransformer"); + + } + } + + @Nested + public class Destroy { + + @Test + void destroy() { + transformerProxy.classTransformers = Arrays.asList(transformer1, transformer2); + when(transformer1.isEnabled()).thenReturn(true); + when(transformer2.isEnabled()).thenReturn(false); + + transformerProxy.init(); + + assertThat(transformerProxy.activeTransformer).isEqualTo(transformer1); + assertThat(transformerProxy.transformerProxy).isNotNull(); + + verify(instrumentation).addTransformer(transformerProxy.transformerProxy, true); + + transformerProxy.destroy(); + + verify(instrumentation).removeTransformer(transformerProxy.transformerProxy); + + verify(transformer1).destroy(); + } + } + + @Nested + public class ProxyGeneration { + + @Test + void isProxyForJava8() { + Assume.assumeThat(System.getProperty("java.version"), CoreMatchers.startsWith("1.8")); + + ClassFileTransformer cft = transformerProxy.createAndInstantiateClassTransformerProxy(transformer1); + + List transformMethods = Arrays.stream(cft.getClass().getMethods()) + .filter(m -> m.getName().equals("transform")) + .collect(Collectors.toList()); + + assertThat(transformMethods.size()).isEqualTo(1); + + } + + @Test + void isProxyForJava9AndLater() { + Assume.assumeThat(System.getProperty("java.version"), CoreMatchers.not(CoreMatchers.startsWith("1.8"))); + + ClassFileTransformer cft = transformerProxy.createAndInstantiateClassTransformerProxy(transformer1); + + List transformMethods = Arrays.stream(cft.getClass().getMethods()) + .filter(m -> m.getName().equals("transform")) + .collect(Collectors.toList()); + + assertThat(transformMethods.size()).isEqualTo(2); + } + + } +} \ No newline at end of file diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/SyncClassTransformerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/SyncClassTransformerTest.java new file mode 100644 index 0000000000..ac608b3654 --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/transformer/SyncClassTransformerTest.java @@ -0,0 +1,109 @@ +package rocks.inspectit.ocelot.core.instrumentation.transformer; + +import net.bytebuddy.matcher.ElementMatchers; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.context.ApplicationContext; +import rocks.inspectit.ocelot.config.model.InspectitConfig; +import rocks.inspectit.ocelot.config.model.instrumentation.InstrumentationSettings; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.instrumentation.TypeDescriptionWithClassLoader; +import rocks.inspectit.ocelot.core.instrumentation.config.InstrumentationConfigurationResolver; +import rocks.inspectit.ocelot.core.instrumentation.config.model.ClassInstrumentationConfiguration; +import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationRule; +import rocks.inspectit.ocelot.core.instrumentation.config.model.InstrumentationScope; +import rocks.inspectit.ocelot.core.instrumentation.event.ClassInstrumentedEvent; +import rocks.inspectit.ocelot.core.instrumentation.special.SpecialSensor; +import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; +import rocks.inspectit.ocelot.core.testutils.Dummy; +import rocks.inspectit.ocelot.core.testutils.DummyClassLoader; + +import java.lang.instrument.Instrumentation; +import java.util.ArrayList; +import java.util.Collections; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class SyncClassTransformerTest { + + @Mock + InspectitEnvironment env; + + @Mock + ApplicationContext ctx; + + @Mock + Instrumentation instrumentation; + + @Mock + SelfMonitoringService selfMonitoring; + + @Mock + InstrumentationConfigurationResolver configResolver; + + @InjectMocks + SyncClassTransformer transformer = new SyncClassTransformer(); + + private static byte[] bytecodeOfDummy; + + private static final String DUMMY_CLASS_NAME = Dummy.class.getName(); + + @BeforeAll + static void readByteCode() { + bytecodeOfDummy = DummyClassLoader.readByteCode(DummyClassLoader.class); + } + + @BeforeEach + void setupTransformer() { + transformer.classDefinitionListeners = new ArrayList<>(); + } + + @Nested + public class Transform { + + @Test + void verifyClassInstrumentedEventPublishedAfterSecondTransform() throws Exception { + InstrumentationSettings settings = new InstrumentationSettings(); + InspectitConfig conf = new InspectitConfig(); + conf.setInstrumentation(settings); + when(env.getCurrentConfig()).thenReturn(conf); + + SpecialSensor mockSensor = Mockito.mock(SpecialSensor.class); + when(mockSensor.instrument(any(), any(), any())).then(invocation -> invocation.getArgument(2)); + InstrumentationScope scope = new InstrumentationScope(ElementMatchers.any(), ElementMatchers.any()); + InstrumentationRule rule = InstrumentationRule.builder().scope(scope).build(); + + ClassInstrumentationConfiguration mockedConfig = new ClassInstrumentationConfiguration(Collections.singleton(mockSensor), Collections.singleton(rule), null); + when(configResolver.getClassInstrumentationConfiguration(any(TypeDescriptionWithClassLoader.class))).thenReturn(mockedConfig); + when(configResolver.getClassInstrumentationConfiguration(any(Class.class))).thenReturn(mockedConfig); + + String className = DUMMY_CLASS_NAME.replace('.', '/'); + + transformer.transform(Thread.currentThread() + .getContextClassLoader(), className, null, null, bytecodeOfDummy); + + assertThat(transformer.temporaryInstrumentationConfigCache.size()).isEqualTo(1); + verify(mockSensor).instrument(any(), any(), any()); + + Mockito.reset(mockSensor); + transformer.transform(SyncClassTransformer.class.getClassLoader(), className, Dummy.class, null, bytecodeOfDummy); + assertThat(transformer.temporaryInstrumentationConfigCache.size()).isEqualTo(0); + + verify(mockSensor, never()).instrument(any(), any(), any()); + verify(ctx).publishEvent(isA(ClassInstrumentedEvent.class)); + + } + + } + +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/opentelemetry/OpenTelemetryControllerImplIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/opentelemetry/OpenTelemetryControllerImplIntTest.java index 9b383f2e99..ba1fee12cd 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/opentelemetry/OpenTelemetryControllerImplIntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/opentelemetry/OpenTelemetryControllerImplIntTest.java @@ -18,13 +18,11 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import rocks.inspectit.ocelot.config.model.exporters.ExporterEnabledState; import rocks.inspectit.ocelot.core.SLF4JBridgeHandlerUtils; import rocks.inspectit.ocelot.core.SpringTestBase; import rocks.inspectit.ocelot.core.exporter.LoggingTraceExporterService; -import rocks.inspectit.ocelot.core.opentelemetry.trace.CustomIdGenerator; import rocks.inspectit.ocelot.core.utils.OpenTelemetryUtils; import java.io.IOException; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java index 0c71b22ea4..c0f9552be8 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java @@ -1,5 +1,163 @@ +/* package rocks.inspectit.ocelot.core.selfmonitoring; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.classic.spi.LoggingEvent; +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.junit.jupiter.MockitoExtension; +import org.slf4j.LoggerFactory; +import org.springframework.context.ApplicationContext; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.config.model.InspectitConfig; +import rocks.inspectit.ocelot.config.model.selfmonitoring.AgentHealthSettings; +import rocks.inspectit.ocelot.config.model.selfmonitoring.SelfMonitoringSettings; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.instrumentation.config.event.InstrumentationConfigurationChangedEvent; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; + +import java.time.Duration; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; +import static org.mockito.Mockito.*; + +*/ +/** + * Tests {@link AgentHealthManager} + *//* + + //TODO check what is still needed in this test + +@ExtendWith(MockitoExtension.class) public class AgentHealthManagerTest { -} + private static final long VALIDITY_PERIOD_MILLIS = 500; + + private static InspectitConfig config; + + private ScheduledExecutorService executorService; + + private InspectitEnvironment environment; + + private ApplicationContext context; + + private AgentHealthManager healthManager; + + @BeforeAll + static void createInspectitConfig() { + config = new InspectitConfig(); + AgentHealthSettings agentHealth = new AgentHealthSettings(); + agentHealth.setValidityPeriod(Duration.ofMillis(VALIDITY_PERIOD_MILLIS)); + SelfMonitoringSettings selfMonitoring = new SelfMonitoringSettings(); + selfMonitoring.setAgentHealth(agentHealth); + config.setSelfMonitoring(selfMonitoring); + } + + @BeforeEach + void setupStatusManager() { + executorService = new ScheduledThreadPoolExecutor(1); + + environment = mock(InspectitEnvironment.class); + when(environment.getCurrentConfig()).thenReturn(config); + + context = mock(ApplicationContext.class); + + healthManager = new AgentHealthManager(context, executorService, environment); + healthManager.startHealthCheckScheduler(); + } + + @AfterEach + void shutdownExecutorService() { + executorService.shutdown(); + } + + private ILoggingEvent createLoggingEvent(Level level) { + return new LoggingEvent("com.dummy.Method", (Logger) LoggerFactory.getLogger(AgentHealthManagerTest.class), level, "Dummy Info", new Throwable(), new String[]{}); + } + + private void verifyExactlyOneEventWasPublished(AgentHealth status) { + ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(AgentHealthChangedEvent.class); + verify(context).publishEvent(statusCaptor.capture()); + assertThat(statusCaptor.getValue().getNewHealth()).isEqualTo(status); + verifyNoMoreInteractions(context); + } + + @Nested + class OnLogEvent { + + @Test + void logInstrumentationEvents() { + assertThat(healthManager.getCurrentHealth()).withFailMessage("Initial status shall be OK") + .isEqualTo(AgentHealth.OK); + + healthManager.onLoggingEvent(createLoggingEvent(Level.INFO), InstrumentationConfigurationChangedEvent.class); + healthManager.onLoggingEvent(createLoggingEvent(Level.DEBUG), InstrumentationConfigurationChangedEvent.class); + assertThat(healthManager.getCurrentHealth()).withFailMessage("INFO and DEBUG messages shall not change the status") + .isEqualTo(AgentHealth.OK); + + verifyNoInteractions(context); + + healthManager.onLoggingEvent(createLoggingEvent(Level.WARN), InstrumentationConfigurationChangedEvent.class); + assertThat(healthManager.getCurrentHealth()).withFailMessage("Status after WARN message shall be WARNING") + .isEqualTo(AgentHealth.WARNING); + verifyExactlyOneEventWasPublished(AgentHealth.WARNING); + + clearInvocations(context); + + healthManager.onLoggingEvent(createLoggingEvent(Level.ERROR), InstrumentationConfigurationChangedEvent.class); + assertThat(healthManager.getCurrentHealth()).withFailMessage("Status after ERROR message shall be ERROR") + .isEqualTo(AgentHealth.ERROR); + verifyExactlyOneEventWasPublished(AgentHealth.ERROR); + + clearInvocations(context); + + healthManager.onLoggingEvent(createLoggingEvent(Level.INFO), InstrumentationConfigurationChangedEvent.class); + assertThat(healthManager.getCurrentHealth()).withFailMessage("INFO messages shall not change the status") + .isEqualTo(AgentHealth.ERROR); + verifyNoMoreInteractions(context); + + clearInvocations(context); + + healthManager.onInvalidationEvent(new InstrumentationConfigurationChangedEvent(this, null, null)); + assertThat(healthManager.getCurrentHealth()).withFailMessage("When new instrumentation was triggered, status shall be OK") + .isEqualTo(AgentHealth.OK); + verifyExactlyOneEventWasPublished(AgentHealth.OK); + } + + @Test + void logGeneralEvents() { + assertThat(healthManager.getCurrentHealth()).withFailMessage("Initial status shall be OK") + .isEqualTo(AgentHealth.OK); + + healthManager.onLoggingEvent(createLoggingEvent(Level.INFO), null); + healthManager.onLoggingEvent(createLoggingEvent(Level.DEBUG), null); + assertThat(healthManager.getCurrentHealth()).withFailMessage("INFO and DEBUG messages shall not change the status") + .isEqualTo(AgentHealth.OK); + + verifyNoInteractions(context); + + healthManager.onLoggingEvent(createLoggingEvent(Level.ERROR), null); + assertThat(healthManager.getCurrentHealth()).withFailMessage("Status after ERROR message shall be ERROR") + .isEqualTo(AgentHealth.ERROR); + verifyExactlyOneEventWasPublished(AgentHealth.ERROR); + + clearInvocations(context); + + await().atMost(VALIDITY_PERIOD_MILLIS * 2, TimeUnit.MILLISECONDS) + .untilAsserted(() -> assertThat(healthManager.getCurrentHealth()).withFailMessage("ERROR status should jump back to OK after timeout") + .isEqualTo(AgentHealth.OK)); + + await().atMost(VALIDITY_PERIOD_MILLIS * 2, TimeUnit.MILLISECONDS) + .untilAsserted(() -> verifyExactlyOneEventWasPublished(AgentHealth.OK)); + } + + } + +}*/ diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java index a46672b960..97e180ac1a 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java @@ -35,6 +35,7 @@ */ @ExtendWith(MockitoExtension.class) public class LogHealthMonitorTest { + //TODO check tests what they need private static final long VALIDITY_PERIOD_MILLIS = 500; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/service/DynamicallyActivatableServiceObserverTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/service/DynamicallyActivatableServiceObserverTest.java new file mode 100644 index 0000000000..e5350b0651 --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/service/DynamicallyActivatableServiceObserverTest.java @@ -0,0 +1,66 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.service; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Nested; +import rocks.inspectit.ocelot.core.command.AgentCommandService; +import rocks.inspectit.ocelot.core.exporter.JaegerExporterService; +import rocks.inspectit.ocelot.core.exporter.PrometheusExporterService; +import rocks.inspectit.ocelot.core.selfmonitoring.logs.LogPreloader; +import rocks.inspectit.ocelot.core.service.DynamicallyActivatableService; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link DynamicallyActivatableServiceObserver} + */ +public class DynamicallyActivatableServiceObserverTest { + DynamicallyActivatableServiceObserver serviceObserver = new DynamicallyActivatableServiceObserver(); + + @Nested + class CheckBasicFunctionalityDASObserver { + DynamicallyActivatableService logPreloader = new LogPreloader(); + DynamicallyActivatableService promExpoService = new PrometheusExporterService(); + DynamicallyActivatableService agentCommandService = new AgentCommandService(); + DynamicallyActivatableService jaegerExpoService = new JaegerExporterService(); + + List expectedList = new ArrayList() {{ + add(new LogPreloader()); + add(new PrometheusExporterService()); + add(new AgentCommandService()); + add(new JaegerExporterService()); + }}; + + void setupTest(){ + for(DynamicallyActivatableService service : expectedList){ + serviceObserver.updateServiceState(service); + } + } + + @Test + public void checkMap(){ + setupTest(); + + Map resultMap = serviceObserver.getServiceStateMap(); + + //Check LogPreloader + assertThat(resultMap.containsKey(logPreloader.getName())); + assertThat(resultMap.get(logPreloader.getName())).isEqualTo(logPreloader.isEnabled()); + + //Check PrometheusExporterService + assertThat(resultMap.containsKey(promExpoService.getName())); + assertThat(resultMap.get(promExpoService.getName())).isEqualTo(promExpoService.isEnabled()); + + //Check AgentCommandService + assertThat(resultMap.containsKey(agentCommandService.getName())); + assertThat(resultMap.get(agentCommandService.getName())).isEqualTo(agentCommandService.isEnabled()); + + //Check JaegerExporterService + assertThat(resultMap.containsKey(jaegerExpoService.getName())); + assertThat(resultMap.get(jaegerExpoService.getName())).isEqualTo(jaegerExpoService.isEnabled()); + } + } +} diff --git a/inspectit-ocelot-core/src/test/resources/otel-config.yaml b/inspectit-ocelot-core/src/test/resources/otel-config.yaml index 9234675e5e..6684ac30fc 100644 --- a/inspectit-ocelot-core/src/test/resources/otel-config.yaml +++ b/inspectit-ocelot-core/src/test/resources/otel-config.yaml @@ -38,6 +38,8 @@ exporters: endpoint: $OTLP_EXPORTER_ENDPOINT tls: insecure: true + compression: none + service: extensions: [health_check] pipelines: @@ -50,3 +52,6 @@ service: logs: receivers: [otlp] exporters: [logging, otlp] + telemetry: + logs: + level: "info" diff --git a/inspectit-ocelot-documentation/docs/assets/action-tracing.png b/inspectit-ocelot-documentation/docs/assets/action-tracing.png new file mode 100644 index 0000000000000000000000000000000000000000..d331a222588e3b0ac47bb61c97316cffb5bd5caf GIT binary patch literal 108903 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ð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 literal 0 HcmV?d00001 diff --git a/inspectit-ocelot-documentation/docs/assets/config-btn.png b/inspectit-ocelot-documentation/docs/assets/config-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..2876f3c3897e1847a15da805970139325ca4e8b4 GIT binary patch literal 565 zcmV-50?Pe~P)r2pghumpTs$QLlwo3bcC(bb5`s}0Ra4XZu7|%?reRURv3Uw+i97%hN zmd;+?%1PQAnf&2AuiGfoNhkQ*Qnvu>V_StG3fSfT1B}s`Udy3@Nct+#vV>uQMr2f_ zu*+DZNjn%8?4)ok6O{CL1T&a(t>mx}nb=wPkiZWBPYW~C$gzwO=Xrl?YURwCtctE; zJ=$33VvwLH8PMVcJ+}>^OJpz@oV2T=5VSC_m3rc@gZn^tEjL;1MRZ7zZOLa$(o-ok zO!=*l=Q#{3Z$+Moe2jsyhh>@!_9DQSyE%Ify9l;PfAny#%T^O)Vo>xR9Ki}U*9`)C z>;TJzg)=sT&ysH9RVgs64o>P*gV6( z=@JvzQ{H8ZG)5vXD7y*sgr=}xsxEYagVWDZUX;LuH-ia%8pzROD;ZN+J@F5{vWB2? zr5dG|T-y3CA%oqs^q7YBh?;NKA)!WU*;k7{@jdtgqKc@0CAu@^00000NkvXXu0mjf D^VtaN literal 0 HcmV?d00001 diff --git a/inspectit-ocelot-documentation/docs/assets/download-archive-btn.png b/inspectit-ocelot-documentation/docs/assets/download-archive-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..59ca045f7c301d3f15d13677b928b1417f8d19af GIT binary patch literal 498 zcmV() zqjJO2%lbzVvrIx!%DYkze|i{0cv9-Ftn!)$IIOm9THU@B<3nhepy2X>%b#3carxfY z!WrQZQRUQTD$$avU6cfL;{WAXLUg{i>LMDMRvt^qJKCP8w%m@KP9U5X4xPmiQf*o( zwXMc_YH7KJJ+&8KBkUTy1;pvI)kz312@uELcLGTUfT4OLqKiSa6z7ebQtqY@%$V`3 zfi#m*b*(rnf<%!1gkeh_Tn_t;+8GJu6}LlgNAA2D1ag!hx!A{yPoIPW+y?uwqh==b zg`p}<<5vki@TAbV?I o=m*u2YX_7V7}JE?>WqJfFW(7%?&~YuR{#J207*qoM6N<$f)uab3jhEB literal 0 HcmV?d00001 diff --git a/inspectit-ocelot-documentation/docs/assets/logs-btn.png b/inspectit-ocelot-documentation/docs/assets/logs-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7c4d2274ac2cb85a4154258b21f3e0675eec9b GIT binary patch literal 223 zcmV<503iQ~P)p(oJuXw&w#xeM8@+;F%VSFIS{}K6ghbm zjDk@x5CGKHA*K{327^j^lG;S0fF1x8#ormI6U88`Kv&m~0wRC_19hWVgTBrm1*3pG Z005PjYx*T5mKgv5002ovPDHLkV1g{MOKkuE literal 0 HcmV?d00001 diff --git a/inspectit-ocelot-documentation/docs/assets/service-states-btn.png b/inspectit-ocelot-documentation/docs/assets/service-states-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..a201e06d79d773a45b51357f1fcedc8b6ac52e73 GIT binary patch literal 331 zcmV-R0kr;!P)|DFWMBo9T|usE9dNKo0{sk#^8Gslq?p=|hUb%F zpacW%A`6BU$aU=~7zHB}fXcV_fp!F_t%F{QqhnC{h^_sDt)wTZO++cU&p<*$da!`w z42V*cE&vq8pn8B%^r2%19O4S}bUZe2odM#ZK>-GZV+0roN3jP1d1S0XPsfA0>euOM d;V2k3007Occ%vb%&;S4c002ovPDHLkV1l4setZA` literal 0 HcmV?d00001 diff --git a/inspectit-ocelot-documentation/docs/assets/status-table-view-ui.png b/inspectit-ocelot-documentation/docs/assets/status-table-view-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..13bf8d78335b6ef9bbfc698f77809b788d7200b6 GIT binary patch literal 88044 zcmcedbx>SQ7pEa;aCZqIKya5J!QFxre3;_x9AC>3jP8&gnk=O!yZiX>=446c`v7bXge*RTvl~Ulg;5z#mNUrm;L|F2s9XBQZ|xwH5gQ7vxIsD(aL{KTXX8DAhOjER{bT>JO$W~nPH zZ1B=BpvZ1+4vY<{sycr4^62UuQ6Q#%|M%hfd*-e%t5>J}_US2}2|AsI1aOIp{=#@KGc z?VJj`kj8J^wg@YM!DWmJmb0qKwEyaWr{l~3Nry*ZI}q`HyjsI5!-gkWUfHG&vJH_2QJ zR8}r*gJw^$W)UsYJC{M%;<{SE**0~-zn%eGNY+w4+K_#}tmNQvZkX9Apq=u?ldyv_ zOfs8_e6lsV0q?2~#3M<~YUV!g7Fb_T@OVe__cP?uX@a3fThNh138zO$~)Hf-OpGFWh%)a8v8p)%8ylB_SMsX>fNg31&|HO37-zo^V6>Cl7&osW8)*ZhaXu0{AQ<$ATdG6-=XB@;wFBAg_D<0 zohj9@{-S{fDaFCb|6V2MzGGr$g`rF8G=sAqoRZ0AZE6ayhAVzx;U7zA{bd)vux*iW zG<~M)squqE?}ztnA5pX_5y59t#auqS8SM5Bpo9?a=M`u8evGI7e|J>{p>e`0lS4wI zptoIR=*wmV8dU1xL5|x&*^Ue`u(oAlYA!gr{cUZuO%Cuhh7tDQ&T8-L@x!Cw)HG+l z$<^qH(cyk7t{#41Yg%FMz{9ZQ|vuuyMgc@lyu%IzBC#nDCSh)t$BpeQ97=ta9=$cDnD_ z*jNa^I0mwtxjs_2XY(&mC>2w5P;JzQ4~3>%M=n$lOeIP8D3r4p$KLN4^;1v}@^+$7 zw~h{K^l_ij?HrG>br~^vJI4J~e(~}8cF1X1ITQDr_c&Ns6m+APXC1!UEsoiEi9Ak@ zKc@bUoea?!6L}zl2VR5~W*B{%re9a^8(TZp)~!SD*k+l~pqg#cD9{Mpk?7zbvg25N zv{Euka@YnIs%op_+zk@Lh^G7VU5J_(bq*{8Xpw%O(K<+}rW^@O5!pB<{Bzm~>V4|z)8m@#x$xwIyMJg7=np3-G z63VhUK^LFLFuo$bHBNB2cf}jaZt-bA(>Vs*#6JXLz7(zH2(M0t8&v9!X zJi%N~fMSY zJG%_VP)I*=L3-!l98BaK0`TeiV~Ldg3kHuW)}65o$}Wp-6o!6VTw?0?UjlFMw)b=w zK=j1KEB_%aO+Yl~bn2uiqH| zp{<|RB-c)W)IvM&wq{N>P801$iR=&4ECoThqCo7^6{2faW2}P@Imp)U1CAQU`C<=$ z>gBLLk>@^e`TQJmQHcpBE}yEq&|OzA@X!W9qaA~YiO9h3`gou>|8#IK491K?zqY@- za?!hNLsj$g+9x5ATc-L;UZrgOomZPW``a)jJ2Q71)=Z1=-hOb6@o(~noOW;-^IyDB z?=Crv4CGN=m|@^JnQKeoKHR~&p;R1XJxsIfHdwF{?kZsmbQ$@~z&> z6EkF7b;<&+qN4KMaB<;gTpFaQS+!;yst|M;IrsO?0po`K8*T>}{9K^!8_c$IS4x{y zi(a|mu%7Ryol1^=t!9<9Ted+fOf^IcPj~Yzjo29s2wuH9Z5}^~kK~4Zg=W=AFr#Gp z2Pke9{CEf&&WeBs4=NK=91=5a-s2@UptYkJz~oS@>Wd5t`pa<%K&M3|5&Z5GUT z1j-eNNu}upYRgM|=!N_x(c(94{9jO4d-&}aJ4X{1-Ms|twP}LGk-Jwig*v#@nGtRzGBtxKh-iYvw)?9p;>&QgDML; z*S=Q*j!;;`i3{Z@c>dDd9lGAsc60XaQzbE|;Z^nYyL}W;wOI>zdbAAdGGd1?wwsmI zU}tB9V+&bs?%8ZExD>wTbwzoNoa8`y1Mgm>qF8wOD!0BNQ6rTOLZ<3_Hv1c>P3y%2 zW+Nd5vygs5g|9p1aNhIXS+&nP?D6t5LI|UUx?)>99ufu_mH{byL(vbZe}t{>Pa<3v zEIM`pIl)~_^#$$wdXj#HV;Qm+C1f=PuDyMyPsHOq2mWKWey8M=msD9R5E&npyg-Sn&Y4oj}RnhJ?Ltup2DczO;uG4T_hy|V37V(M% zUay0g0WZ-le{8CT;!owH3g4&s0FeEkT69ID+U32K0YS_h zSgS2DNKCISG1{< zO@AS&i~?4+3#?cmP8<;{rWN#I)x!k2I*yT4yx_+&{5XLCeI-n&-vhE?#oG7mJ(eCj zIUPk)-Un3cwPt+7w%iZuD3q-+qq36kHb@bb2aFs^M|E8y9;`#{-HVM3Jh&C8&UUOt zLM{&@J>!Nk(zqsE!qU!UJa{%c6w+477JeJh`%AtKJM0H~*`2K?mbuJNu{F|u;IbPz z9TyWou%TBvnCcTT?n_vo22GQ8{A8*p2l>Hn;hkeOzP3-bv)rqVSqxg~+aj&O<6_eq zr|mCW>`o?FQVPzZ8-eHA^#H+U!F4#FkgLx6ZM&_r;Wm)F7g3B}RKGH3oBh5w8Apv{ zU{zsXQ*4QQ6R~XFcj=q*f_#|k)hLx=IZEC@wM~_VtVGu*IXnY*TXKSNftZ}}K}CT* z8pHtcH{1DumzS%}KjzHnk-t%A^jI49br%{;5uOFfb3e>{b9HY|!emlZ1Y~ry?1&xr zuWSlUpsy{^h27!dYEM|4PiPO&iYp?AcI>WWiW!wE*ohK5k|}9L;mET90)=%ocz+m_wtLrl}|nk?JO`QbvXQ^$M@QBE($xM>#FL&s2KRqYst|&U@uuE!_ht= z2N7+*=@ow44~wByw2IxB{fU!B@$2(MvxPJ|u4IvvPl>gbgYastXx|6EjR>fMLd5F;s5S&1eqhSl(#O2R*$cBF~9#r3n3x^^m#C%fZRG^Wme8e%ZYl|lW zXqtnrg^9e3bjur9~$)Sp6Z$()AZllQLI zlrwNuA)l6x`fC9?P(W*jW58xh$M}hb z{i7}=!|0xU^ADxh0Ie$CLMA91ul=$wZF`mw{Ak9AQ<~P?94|rgq|}$~dh?y+<#1Qi z=4#=s&jtBZ;<9B#Cz~bkc^bUqo3{ZcddDw>yh(eo<>ZG9T_=Ls%AZr;=u-*nh_EV- zg`SxCMlXt|bq(r~GHhN-qxMg&lyFOpJt1#%gEqmneuR}NSqW6q^$9Q-yv#bLtZf)q zZ4lp*4mBtt6EKEmR8@al9KXBYqXfB+xjQ?n7l!8_M4mt0MxLMiFaZk+Z%YH*&u1ux z{+y@Q+!;oB=*gYu&wJEGg*?R$)f2V`pL*O1Q@UNH31S-3X9E|1utIEK z9zJPcp=T2Ze==n5;&3o5a8Z;T2U})%#)4b9TO6)tzBb+O))Ya;3nkr~nmF{0)_wSW zA0P3?P^QPpmVzX2ej2+D=1~%y;3ltrresxqLHCnC;*V5&f%;=MH*_5dKSisV1t08< zZ%h<=5GCT$riTdk*krwk6XD?3Q+T9b8bacB-IK@8eCh9M z^d1$`P2EiAJ$!eM%leHKBDTcD>pjiKdy0(7X#G=@aFEjLJs?XkR*opfOR+>sf9j%b zHSVb$_u{%RO$~JsZ@940I4yzTxYd&Cv|I3~;zKW@uVf$31;+7;C)pzARD7=L_E9GG zKBpLZRfzHFP)N=c#;MixA76Lwp0p;)4xcZnwz2qrx8Ti42ex6gyoTDSU@-Ha$||lE zuQ;ufh<0}FRcEmM8=bWbzdV=pmh^-t5yAeqZ5wmaOnRRo)KcSMxcJ*Y_NNxRPxgPzYm1)c*G{x{3P5N9{bG57fR$BIv`*5@h zvYqYaa9RE3BgR^I%hm(Dn;Xg_^=ZNv5em&Ih7cC##Ej$&ZS6C}J?xxtFWtp$;&Y+B z%eQ;=HA4>j>=cwwP)1j4Y@8E=zQ|1S0<;Wgz^6XcY`>YiGY1_(5DAaSJe6b}F*8L% zr9D9n;DOmXK4$P^Ylq@D`B$oJ@Mmb15uD> z{1Kbi@5UFytuKx~Xe4WrKXtyKy!W{UEWXgbUG{?Gcxel74VxKA zZgFfT+FN3^!yf@-ZR{=*aPPRVKtGoz8qC9}vVCIb(}>?O2$C?=v5XvD_2v`PT%j>l znkDk0<-Wnr$_=UXAiv7G@qO<6rcqjkg!FC8Gz@Q_Ar$^DvWrAb$T+voIgM0c@k9X4Fl}aS$@WX97Fzem<=5BF_&BMl3FD?UeI@NkDZoEZ@aul1N%!BwMon z;Lxp{^F|M2x_s{Y=YWKUd@PPyn~eO42xd zzRqBJ-GqJBd2oEJDCg7S`(Gub!&~`~NJ7G9|>wa6-zL0aqcm63G|Sw@Q=W_VWtu*jay%nc5!#0CzD z)q$yjBVB@z;F++JN{o2)40-p;F0e9C3b@kfK-ByvXr`{9U0z5=gGTyViV@^nzz?%r zC>Sdm*bEpNTWQo0#eNj-yzCCyELdk5#z(D7aPV}{0yOP`AVGQsD}AB|>di#hUh9N6 z7DR{&OCd1qT?6RoUa|?LIb3=%s@qF#5eJprl!R7jZfd}naGCNX-(L*J3;4m@AVi`G z)p9}0m|Y&7MpBAU(yecRhg=96(Gt;+{{>D;m9N}&Iy(pyZ@O}SCZzXPRy@!2d+^MY z9o85bdf#1_A7I+juobex&wfs2JZh+N^o*W=dqK1`ioy9n*}J}sk?X*TO4i6lQKjUC zXv4pZ!V1S^@OC5>2|yY2#68nTIxf)JsZF{_>?p;~kr?Qcq?8nr5qG$F_h$CmKN^(~ z5NSx(qdDTDm^ooRfyQ)y-2i=pk)QdpSMrN2Gu2OVe8Gz1%t5+?M((8sX$}x};l;~M zIKPLY+mvo9D8t%Fr$LYVb!bp_ttvnVtfE#U#Deqk)~+dA8KJ;r52|NF<;R6vo0@+Q zMPh5KxbRnGp46dW_*D$ViFlNAnqK19n4jbSrw~2~G&6&p?jZ`=En9aZ@yAZvs1Ob~ zGwEE*tC%ADO||5?KrM8|QyG@`+|`%@z>KYzyEf{shg2&|@7q`~Y#5`;Zx<3Va%Yye zhRg)kgXnwAzbBQj;{e6t-7fvlO`@z;I_S>iEr^pj1zvEG4=Fw_vH3dK~6#;qP<)Q9^vA4cUAy3jfg&E`H2OnG?Gvoy;x4e2>$W%&$454Q+ zsutD1v{(53BuFCAVm00z1CSR!pd0Caq2~`t{!@wMOCKjtJ<|n5^^q`n>y?k5kQ+nw z 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

Ukd)Y@hsDlTq-%O}K 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 ZcS##IvGtYD{+@k2YkvMT;?$LU{|n!?|FQr8 literal 0 HcmV?d00001 diff --git a/inspectit-ocelot-documentation/docs/breaking-changes/breaking-changes.md b/inspectit-ocelot-documentation/docs/breaking-changes/breaking-changes.md index 2c7c4658c8..c7b7a71f37 100644 --- a/inspectit-ocelot-documentation/docs/breaking-changes/breaking-changes.md +++ b/inspectit-ocelot-documentation/docs/breaking-changes/breaking-changes.md @@ -39,7 +39,7 @@ This release introduces the property `protocol` for the Jaeger and OpenTelemetry ### Configuration sources only accept valid `YAML`, `JSON` (keys must be wrapped in double quotes) or `properties` notation -As of version 1.16.0, the [configuration sources](/configuration/configuration-sources.md) only accept valid `YAML`, `JSON` or `properties` notation. The "mix and match" of JSON and YAML should be avoided. For JSON, all keys need to be wrapped in double quotes. +As of version 1.16.0, the [configuration sources](configuration/configuration-sources.md) only accept valid `YAML`, `JSON` or `properties` notation. The "mix and match" of JSON and YAML should be avoided. For JSON, all keys need to be wrapped in double quotes. Upgrading to version 1.16.0 may break your startup routines if the JSON passed as command line arguments is invalid. For example, the following code will **not** work anymore and cause an exception: ```bash diff --git a/inspectit-ocelot-documentation/docs/config-server/status-table-view.md b/inspectit-ocelot-documentation/docs/config-server/status-table-view.md new file mode 100644 index 0000000000..e54794940b --- /dev/null +++ b/inspectit-ocelot-documentation/docs/config-server/status-table-view.md @@ -0,0 +1,19 @@ +--- +id: status-table-view +title: Status Table View Guide +sidebar_label: Agent Status Table View +--- + +The Status Table in the Agent Status page offers, in addition to displaying the most important agent information in the table, the possibility to retrieve additional information via different buttons. +Here is a short guide to help you navigate around the status table. + +![Status Table View](assets/status-table-view-ui.png) + +## Explanation of Highlighted Buttons + +| Button | Function | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| ![Status Table View](assets/service-states-btn.png)
**Service States** | Displays the services (e.g. Prometheus, Jaeger, Influx, Log-Preloading, Agent Command Service, ...) and their current state (`enabled`/`disabled`).
In the future, we plan to implement the functionality to enable/disable the services in this view. | +| ![Status Table View](assets/logs-btn.png)
**Agent Logs** | Displays the logs of the service if agent commands and log preloading are enabled. | +| ![Status Table View](assets/config-btn.png)
**Current Config** | Displays the current config in `yaml` format when the agent commands are enabled. | +| ![Status Table View](assets/download-archive-btn.png)
**Support Archive** | Downloads a support archive as a `.zip` file if the agent commands are enabled. The support archive contains logs (if log preloading is enabled), the current config, and environment details. | \ No newline at end of file diff --git a/inspectit-ocelot-documentation/docs/instrumentation/process.md b/inspectit-ocelot-documentation/docs/instrumentation/process.md index a4259958cd..02b617e1dc 100644 --- a/inspectit-ocelot-documentation/docs/instrumentation/process.md +++ b/inspectit-ocelot-documentation/docs/instrumentation/process.md @@ -43,4 +43,22 @@ inspectit: instrumentation: internal: use-inspectit-protection-domain: false -``` \ No newline at end of file +``` + +## Synchronous instrumentation (BETA!) +:::caution +Enabling synchronous instrumentation in Java 8 environments will result in significant boot time performance degradation! +See See: JDK-7018422 +::: + +By default, all instrumentation is performed purely asynchronously in the background. There may be situations where this is not appropriate and a class must be instrumented directly at the first load, +e.g. in batch processes. + +InspectIT can be configured to instrumented classes on first class load by updating the following configuration: +```yaml +inspectit: + instrumentation: + internal: + async: false +``` + diff --git a/inspectit-ocelot-documentation/docs/metrics/metric-exporters.md b/inspectit-ocelot-documentation/docs/metrics/metric-exporters.md index 5e23f2f74b..0b189565ba 100644 --- a/inspectit-ocelot-documentation/docs/metrics/metric-exporters.md +++ b/inspectit-ocelot-documentation/docs/metrics/metric-exporters.md @@ -82,11 +82,15 @@ To enable the OTLP exporters, it is only required to specify the `url`. The following properties are nested properties below the `inspectit.exporters.metrics.otlp-grpc` property: -| Property | Default | Description | -| ----------- |-----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `.enabled` | `IF_CONFIGURED` | If `ENABLED` or `IF_CONFIGURED`, the inspectIT Ocelot agent will try to start the OTLP gRPC metrics exporter. | -| `.endpoint` | `null` | Target to which the exporter is going to send metrics, e.g. `http://localhost:4317` | -| `.protocol` | `null` | The transport protocol, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported protocols are `grpc` and `http/protobuf`. | +| Property | Default | Description | +|-------------------------|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `.enabled` | `IF_CONFIGURED` | If `ENABLED` or `IF_CONFIGURED`, the inspectIT Ocelot agent will try to start the OTLP gRPC metrics exporter. | +| `.endpoint` | `null` | Target to which the exporter is going to send metrics, e.g. `http://localhost:4317` | +| `.protocol` | `null` | The transport protocol, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported protocols are `grpc` and `http/protobuf`. | +| `.preferredTemporality` | `CUMULATIVE` | The preferred output aggregation temporality, see [OTEL documentation](https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure/README.md). Supported values are `CUMULATIVE` and `DELTA`.| +| `.headers` | `null` | Key-value pairs to be used as headers associated with gRPC or HTTP requests, see [OTEL documentation](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md).| +| `.compression` | `NONE` | The compression method, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported compression methods are `gzip` and `none`. | +| `.timeout` | `10s` | Maximum time the OTLP exporter will wait for each batch export, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). | To make inspectIT Ocelot push the metris via OTLP to, e.g. an OpenTelemetry Collector running on the same machine as the agent, the following JVM property can be used: diff --git a/inspectit-ocelot-documentation/docs/tracing/self-monitoring.md b/inspectit-ocelot-documentation/docs/tracing/self-monitoring.md new file mode 100644 index 0000000000..f9c6179c94 --- /dev/null +++ b/inspectit-ocelot-documentation/docs/tracing/self-monitoring.md @@ -0,0 +1,48 @@ +--- +id: tracing-self-monitoring +title: Self-Monitoring +--- + +The inspectIT Ocelot Agent allows to trace itself to get detailed information about what the agent is doing (e.g. execution of method hooks and actions). + +## Action Tracing + +:::warning +Please note that this feature is intended **only for debug purposes** or to help you create configuration. +Depending on the size of the configuration used, this can result in a large amount of data being collected, so this feature **should not be used in production environments or during performance testing**. +::: + +Using the *action tracing* feature, the agent will record method hooks and action calls including detailed information about the execution context where they are executed in. +These data are, for example, the arguments of an action, the return value of an action and the existing context data/variables. + +![Trace with enabled action tracing](assets/action-tracing.png) + +Action tracing can be configured using the `inspectit.self-monitoring.action-tracing` property. + +```YAML +inspectit: + self-monitoring: + action-tracing: ONLY_ENABLED +``` + +The default value of this setting is `ONLY_ENABLED` and accepts the following options: + +- `OFF` - Action tracing is disabled and no spans are created. +- `ONLY_ENABLED` - Only actions and method hooks of rules for which action tracing has been explicitly enabled are traced. +- `ALL_WITHOUT_DEFAULT` - Only actions and method hooks of rules which are not fagged as default rules are traced. +- `ALL_WITH_DEFAULT` - All method hooks and actions are traced. + +### Enabling Action Tracing for Specific Rules + +By default, action tracing is not enabled for any rule. +To trace the method hooks and actions of a specific rule, action tracing can be enabled for a rule by using their `enable-action-tracing` attribute. + +```YAML +inspectit: + instrumentation: + rules: + 'r_example_rule': + enable-action-tracing: true +``` + +Note that this setting **only has an effect** if the action tracing mode is set to `ONLY_ENABLED`.! \ No newline at end of file diff --git a/inspectit-ocelot-documentation/docs/tracing/trace-exporters.md b/inspectit-ocelot-documentation/docs/tracing/trace-exporters.md index c4c7de51b4..53147bae30 100644 --- a/inspectit-ocelot-documentation/docs/tracing/trace-exporters.md +++ b/inspectit-ocelot-documentation/docs/tracing/trace-exporters.md @@ -82,13 +82,16 @@ To make inspectIT Ocelot push the spans to a Jaeger server running on the same m The OpenTelemetry Protocol (OTLP) exporters export the Traces in OTLP to the desired endpoint at a specified interval. By default, the OTLP exporters are enabled but the URL endpoint needed for the exporter to actually start is set to `null`. -The following properties are nested properties below the `inspectit.exporters.traces.otlp` property: - -| Property | Default | Description | -| ----------- |------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `.enabled` | `IF_CONFIGURED` | If `ENABLED` or `IF_CONFIGURED`, the inspectIT Ocelot agent will try to start the OTLP gRPC trace exporter. | -| `.endpoint` | `null` | Target to which the exporter is going to send traces, e.g. `http://localhost:4317` | -| `.protocol` | `null` | The transport protocol, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported protocols are `grpc` and `http/protobuf`. | +The following properties are nested properties below the `inspectit.exporters.tracing.otlp` property: + +| Property | Default | Description | +|----------------|-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `.enabled` | `IF_CONFIGURED` | If `ENABLED` or `IF_CONFIGURED`, the inspectIT Ocelot agent will try to start the OTLP gRPC trace exporter. | +| `.endpoint` | `null` | Target to which the exporter is going to send traces, e.g. `http://localhost:4317` | +| `.protocol` | `null` | The transport protocol, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported protocols are `grpc` and `http/protobuf`. | +| `.headers` | `null` | Key-value pairs to be used as headers associated with gRPC or HTTP requests, see [OTEL documentation](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md). | +| `.compression` | `NONE` | The compression method, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported compression methods are `gzip` and `none`. | +| `.timeout` | `10s` | Maximum time the OTLP exporter will wait for each batch export, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). | To make inspectIT Ocelot push the spans via OTLP to, e.g. an OpenTelemetry Collector running on the same machine as the agent, the following JVM property can be used: diff --git a/inspectit-ocelot-documentation/website/README.md b/inspectit-ocelot-documentation/website/README.md index f3da77ff34..67eee500fa 100644 --- a/inspectit-ocelot-documentation/website/README.md +++ b/inspectit-ocelot-documentation/website/README.md @@ -23,6 +23,12 @@ $ yarn $ yarn start ``` +2.1 Access the preview version: + +You can access the preview version of the documentation at +[http://localhost:3000/inspectit-ocelot/docs/next/doc1](http://localhost:3000/inspectit-ocelot/docs/next/doc1) +(note the **/next/** sub-path). + ## Directory Structure Your project file structure should look something like this diff --git a/inspectit-ocelot-documentation/website/pages/en/versions.js b/inspectit-ocelot-documentation/website/pages/en/versions.js index 11e3903f9c..d957a9c8e7 100644 --- a/inspectit-ocelot-documentation/website/pages/en/versions.js +++ b/inspectit-ocelot-documentation/website/pages/en/versions.js @@ -45,7 +45,9 @@ function Versions(props) { - Release Notes + + Release Notes + @@ -91,7 +93,7 @@ function Versions(props) { - + Release Notes diff --git a/inspectit-ocelot-documentation/website/sidebars.json b/inspectit-ocelot-documentation/website/sidebars.json index 7334cb3d54..218b5fcbd0 100644 --- a/inspectit-ocelot-documentation/website/sidebars.json +++ b/inspectit-ocelot-documentation/website/sidebars.json @@ -26,7 +26,8 @@ "tracing/tracing", "tracing/trace-exporters", "tracing/log-correlation", - "tracing/privacy" + "tracing/privacy", + "tracing/tracing-self-monitoring" ], "Instrumentation": [ "instrumentation/instrumentation", @@ -53,7 +54,8 @@ "config-server/user-authentication", "config-server/config-docs", "config-server/log-config", - "config-server/syntax-highlighting" + "config-server/syntax-highlighting", + "config-server/status-table-view" ], "Breaking Changes": [ "breaking-changes/Breaking Changes" diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.0/breaking-changes/breaking-changes.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.0/breaking-changes/breaking-changes.md index a47a73ef6c..4cd70565da 100644 --- a/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.0/breaking-changes/breaking-changes.md +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.0/breaking-changes/breaking-changes.md @@ -8,7 +8,7 @@ original_id: Breaking Changes ### Configuration sources only accept valid `YAML`, `JSON` (keys must be wrapped in double quotes) or `properties` notation -As of version 1.16.0, the [configuration sources](/configuration/configuration-sources.md) only accept valid `YAML`, `JSON` or `properties` notation. The "mix and match" of JSON and YAML should be avoided. For JSON, all keys need to be wrapped in double quotes. +As of version 1.16.0, the [configuration sources](configuration/configuration-sources.md) only accept valid `YAML`, `JSON` or `properties` notation. The "mix and match" of JSON and YAML should be avoided. For JSON, all keys need to be wrapped in double quotes. Upgrading to version 1.16.0 may break your startup routines if the JSON passed as command line arguments is invalid. For example, the following code will **not** work anymore and cause an exception: ```bash @@ -358,4 +358,4 @@ The configuration server will not load the configuration if it is still located ## Breaking changes in 0.4 -There are no breaking changes for version 0.4. \ No newline at end of file +There are no breaking changes for version 0.4. diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/configuration-sources.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/configuration-sources.md new file mode 100644 index 0000000000..771399a1d9 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/configuration-sources.md @@ -0,0 +1,97 @@ +--- +id: version-1.16.1-configuration-sources +title: Configuration Sources +original_id: configuration-sources +--- + +inspectIT Ocelot tries to implement the zero-configuration approach but lets you externalize the configuration and influence every bit of its configuration if this is required. +Internally it uses the Spring-based `PropertySource` order to allow overriding of configuration values. +Configuration properties are considered in inspectIT Ocelot in the following order: + +1. [Java Agent Arguments](#java-agent-arguments) +1. [Java System Properties](#java-system-properties) +1. [OS environment Variables](#os-environment-variables) +1. External Configuration Sources: + * [File-based Configuration](configuration/external-configuration-sources.md#file-based-configuration) +1. inspectIT Ocelot Defaults + +When an invalid configuration is given to inspectIT on startup, the agent will use a fallback configuration. +In this fallback configuration, the agent is inactive with the exception of listening for configuration updates. + +When giving an invalid configuration through a runtime update to the agent, the agent will simply retain the previous configuration. + +## Available Configuration Sources + +### Java Agent Arguments + +You can pass a JSON object as string to the agent via its command line arguments. +For example, to override the service name used to identify your application reporting the performance data, +you can change the `inspectit.service-name` property as follows: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-1.16.1.jar="{ \"inspectit\": { \"service-name\": \"My Custom Service\" }}" -jar my-java-program.jar +``` + +Note that you have to escape the quotes within your JSON string. On linux you can just use the more readable single quotes notation: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-1.16.1.jar='{ "inspectit": { "service-name": "My Custom Service" }}' -jar my-java-program.jar +``` + +### Java System Properties + +You can pass any configuration property as the Java System property to the Java command that you use to start your Java application. +Using this approach you can change the `inspectit.service-name` property as follows: + +```bash +$ java -Dinspectit.service-name="My Custom Service" -javaagent:/path/to/inspectit-ocelot-agent-1.16.1.jar -jar my-java-program.jar +``` + +### OS Environment Variables + +Similar to the Java System properties, inspectIT Ocelot will also consider all the available operating system environment variables. +Due to the relaxed bindings, you can use upper case format, which is recommended when using system environment variables. + +```bash +$ INSPECTIT_SERVICE_NAME="My Custom Service" java -javaagent:/path/to/inspectit-ocelot-agent-1.16.1.jar -jar my-java-program.jar +``` + +## Relaxed Bindings + +Note that due to the Spring-powered configuration approach, the inspectIT Ocelot agent uses Spring support for relaxed bindings. +This means that a property can be specified in different formats depending on the property source. +As suggested by Spring, the allowed formats are: + +| Property | Note | +| --- | --- | +| `inspectit.service-name` | Kebab-case, which is recommended for use in `.properties` and `.yml` files. | +| `inspectit.serviceName` | Standard camelCase syntax. | +| `inspectit.service_name` | Underscore notation (snake_case), which is an alternative format for use in `.properties` and `.yml` files. | +| `INSPECTIT_SERVICE_NAME` | UPPER_CASE format, which is recommended when using system environment variables. | + +The formats should be used in the following way, based on the type of property source: + +| Property Source | Format | +| --- | --- | +| System properties | Camel case, kebab case, or underscore notation. | +| Environment Variables | Upper case format with the underscore as the delimiter. | +| Property files (`.properties`) | Camel case, kebab case, or underscore notation. | +| YAML files (`.yaml`, `.yml`) | Camel case, kebab case, or underscore notation. | + +## Environment Information + +Each agent stores the following information about its runtime environment: + +| Property | Note | +| --- | --- | +| `inspectit.env.agent-dir` | Resolves to the path where the agent-jar is stored. | +| `inspectit.env.hostname` | The hostname where the agent is running. | +| `inspectit.env.pid` | The process id of the JVM process. | + +They are used to define the default behavior when writing the configuration persistence file and will be sent +as attributes to the configuration server when fetching the configuration. + +You can reference these properties within the configuration using e.g. `${inspectit.env.agent-dir}` +as shown in the default configuration for +[HTTP-based configuration](configuration/external-configuration-sources.md#http-based-configuration). +Referencing every other property follows the same schema. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/open-census-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/open-census-configuration.md new file mode 100644 index 0000000000..ad71ae2575 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/open-census-configuration.md @@ -0,0 +1,35 @@ +--- +id: version-1.16.1-open-census-configuration +title: Using OpenCensus Library with inspectIT Ocelot +sidebar_label: OpenCensus Configuration +original_id: open-census-configuration +--- + +If you plan to use the OpenCensus library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenCensus instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenCensus as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 1.16.1 internally uses OpenCensus in version 0.28.3. Please adapt any OpenCensus dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opencensus + opencensus-api + 0.28.3 + + ``` + +2. Set the JVM property `inspectit.publishOpenCensusToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenCensusToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenCensus library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenCensus classes are then loaded by the bootstrap class loader. This ensures that OpenCensus implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenCensus classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenCensus classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenCensus instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/open-telemetry-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/open-telemetry-configuration.md new file mode 100644 index 0000000000..6476e2b11b --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/configuration/open-telemetry-configuration.md @@ -0,0 +1,37 @@ +--- +id: version-1.16.1-open-telemetry-configuration +title: Using OpenTelemetry Library with inspectIT Ocelot +sidebar_label: OpenTelemetry Configuration +original_id: open-telemetry-configuration +--- + +> TODO: finish the configuration documentation when the migration to OTEL (with the OTEL bridge) is finished, i.e., when all exporters (including OTLP exporters) are supported + +If you plan to use the OpenTelemetry library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenTelemetry instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenTelemetry as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 1.16.1 internally uses OpenTelemetry in version {opentelemetry-version}. Please adapt any OpenTelemetry dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opentelemetry + opentelemetry-api + {opentelemetry-version} + + ``` + +2. Set the JVM property `inspectit.publishOpenTelemetryToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenTelemetryToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenTelemetry library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenTelemetry classes are then loaded by the bootstrap class loader. This ensures that OpenTelemetry implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenTelemetry classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenTelemetry classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenTelemetry instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/getting-started/installation.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/getting-started/installation.md new file mode 100644 index 0000000000..490b019357 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/getting-started/installation.md @@ -0,0 +1,157 @@ +--- +id: version-1.16.1-installation +title: Installation +original_id: installation +--- + +This section describes the installation details for the inspectIT Ocelot agent. + +## Supported Java Runtime Environments + +The inspectIT Ocelot supports Java Runtime Environments in version 1.8.0 and above. You will not be able to use the agent with the lower Java versions. +The agent works with different JRE distributions including Oracle, openJDK, Azul, etc. + +## Adding the Agent to a JVM + +The best option for using the inspectIT Ocelot is to include it to the start of the JVM by using the `-javaagent` command-line option. +This way the agent will be initialized before your application starts. + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-1.16.1.jar" -jar my-java-program.jar +``` + +> Some application servers have dedicated scripts that are used to launch the actual JVM that runs the application. In such cases, you must alter the start-up scripts in order to instrument the correct JVM. + +## Attaching the Agent to a Running JVM + +inspectIT Ocelot also supports attaching the agent to an already running JVM. +In such a scenario the collection of metrics and traces will start from the point of the attachment. + +The attaching can easily be done using the agent itself and executing the following command: + +```bash +$ java -jar inspectit-ocelot-agent-1.16.1.jar [] +``` + +In the following example, we are attaching the agent to the JVM process `1337` and passing some [additional arguments](configuration/configuration-sources.md#java-agent-arguments) to it: +```bash +$ java -jar inspectit-ocelot-agent-1.16.1.jar 1337 '{"inspectit":{"service-name":"my-agent"}}' +``` + +> The agent is internally using the utility [jattach](https://github.com/apangin/jattach) for attaching itself to a running JVM. + +In order to find the process ID of a running JVM, you can use the `jcmd` to list all the running Java processes on your machine: + +```bash +$ jcmd -l +``` + +### Attaching Using jattach + +Another way of attaching the agent to a running JVM is to use the utility [jattach](https://github.com/apangin/jattach): + +```bash +$ ./jattach.sh load instrument false /path/to/inspectit-ocelot-agent-1.16.1.jar='{"inspectit.service-name" : "MyService"}' +``` +In this example we're also passing [JSON arguments](configuration/configuration-sources.md#java-agent-arguments) to the agent in order to configure its service name. + +> Using the attach options has some limitations with respect to using the OpenCensus instrumentation library in combination with the inspectIT Ocelot agent. Please refer to [OpenCensus Configuration](configuration/open-census-configuration.md) section to understand these limitations. + +## Using the Agent With a Security Manager + +If a Java Security Manager is enabled, the agent needs to be granted additional permissions to work. +For this, add the following to your policy file: + +``` +grant codeBase "file:" { + permission java.security.AllPermission; +}; +``` + +The correct policy file location depends on different factors. +See the [official Java documentation](https://docs.oracle.com/en/java/javase/17/security/permissions-jdk1.html#GUID-789089CA-8557-4017-B8B0-6899AD3BA18D) for further information. + +## Using the Agent with Kubernetes + +There are several ways to use the agent in a Kubernetes cluster. +For example, you could integrate the agent directly into the application container images, but this requires customizing all images. + +Another possibility is that the agent is automatically injected into the application containers using an **operator** and attached to the JVM processes. +For this purpose, the [OpenTelemetry K8s Operator](https://github.com/open-telemetry/opentelemetry-operator) can be used, with which it is possible to automatically roll out the inspectIT Ocelot Java Agent. +It is still under development, so it is not feature-complete, but depending on your needs the current version could already provide everything needed. + +:::warning Up-to-dateness of the Documentation +Since the OpenTelemetry K8s operator is currently under heavy development, the installation steps described below **may be outdated**. +They may nevertheless be helpful in navigating the OpenTelemetry Operator installation documentation by showing you which parts you need. +::: + +### Installing the Operator + +Install the OpenTelemetry Operator as described in its [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). This includes the following steps: + +1. Install the [cert-manager](https://cert-manager.io/docs/installation/) in your cluster if you have not done it already. +2. Install the operator using the following command. Please note that this will install the latest version of it: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml + ``` + + By adjusting the URL to a different GitHub release, a specific version of the operator can be used: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/download/v{version}/opentelemetry-operator.yaml + ``` + +### Using the Operator + +1. Create an `Instrumentation` object as shown below. Set the `spec.java.image` to the inspectIT Ocelot agent container image you would like to use: + + :::note + Please note that only container images of the inspectIT Ocelot Agent starting from version `1.15.2` are compatible and work with the OpenTelemetry K8s Operator. + ::: + + ```yaml + apiVersion: opentelemetry.io/v1alpha1 + kind: Instrumentation + metadata: + name: my-instrumentation + spec: + java: + image: inspectit/inspectit-ocelot-agent:1.15.2 + ``` + +2. Annotate namespaces or containers that should receive the agent as described in the [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). The possible values for the annotation can be: + + - `true` - inject the `Instrumentation` resource from the namespace. + - `my-instrumentation` - name of Instrumentation CR instance. + - `false` - do not inject + + The following annotation can be used for this: + ```yaml + instrumentation.opentelemetry.io/inject-java: "true" + ``` + + :::warning Ensure Correct Referencing + If the operator cannot find the instrumentation object, e.g. because none was created or the name was written incorrectly in the annotation, the containers will not be started! + ::: + +3. (Optional) Add environment variables to the containers to configure the agent. See the following section for using [environment variables to configure](configuration/configuration-sources.md#os-environment-variables) the inspectIT Ocelot agent. + + For example, to set a service-name for the agent and connect it to a specific configuration-server, you could set the `INSPECTIT_CONFIG_HTTP_URL` and `INSPECTIT_SERVICE_NAME` environment variable like in the following: + + ```yaml + containers: + - image: my-app-image + name: my-app + env: + - name: INSPECTIT_CONFIG_HTTP_URL + value: http://my-ocelot-config-server:8090/api/v1/agent/configuration + - name: INSPECTIT_SERVICE_NAME + value: my-service-name + ``` + + You can also take a look at the [deployment file](https://github.com/inspectIT/trading-demo-application/blob/main/k8s/deployment.yaml) of the [trading demo application](https://github.com/inspectIT/trading-demo-application) where exactly this is set up. + +4. Start or restart the containers to trigger the injection and attachment of the agent. + + Currently, the operator **will not automatically restart running containers** in case changes are made to the `Instrumentation` objects. However, there are plans to provide the ability to restart containers in order to roll out changes of the configurable `Instrumentation` objects automatically (see [issue #553](https://github.com/open-telemetry/opentelemetry-operator/issues/553)). diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/getting-started/quick-start.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/getting-started/quick-start.md new file mode 100644 index 0000000000..2dd40ef549 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.16.1/getting-started/quick-start.md @@ -0,0 +1,22 @@ +--- +id: version-1.16.1-quick-start +title: Quick Start +original_id: quick-start +--- + +You can find and download all released versions of inspectIT Ocelot in our [GitHub](https://github.com/inspectIT/inspectit-ocelot/releases) repository. +You can get the current version on the following link: + +```bash +$ wget https://github.com/inspectIT/inspectit-oce/releases/download/1.16.1/inspectit-ocelot-agent-1.16.1.jar +``` + +The best way to start using inspectIT Ocelot is to attach the Java agent when starting your Java program. +Use the `-javaagent` command-line option to reference the inspectIT Ocelot jar: + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-1.16.1.jar" -jar my-java-program.jar +``` + +The [Installation](installation.md) section further describes what options are available for installing the agent, as well as how you can attach the agent to an already started JVM. +In the [Configuration](configuration/configuration-sources.md) section you can find more details on how to configure the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/configuration-sources.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/configuration-sources.md new file mode 100644 index 0000000000..f1b1b69751 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/configuration-sources.md @@ -0,0 +1,97 @@ +--- +id: version-1.17.0-configuration-sources +title: Configuration Sources +original_id: configuration-sources +--- + +inspectIT Ocelot tries to implement the zero-configuration approach but lets you externalize the configuration and influence every bit of its configuration if this is required. +Internally it uses the Spring-based `PropertySource` order to allow overriding of configuration values. +Configuration properties are considered in inspectIT Ocelot in the following order: + +1. [Java Agent Arguments](#java-agent-arguments) +1. [Java System Properties](#java-system-properties) +1. [OS environment Variables](#os-environment-variables) +1. External Configuration Sources: + * [File-based Configuration](configuration/external-configuration-sources.md#file-based-configuration) +1. inspectIT Ocelot Defaults + +When an invalid configuration is given to inspectIT on startup, the agent will use a fallback configuration. +In this fallback configuration, the agent is inactive with the exception of listening for configuration updates. + +When giving an invalid configuration through a runtime update to the agent, the agent will simply retain the previous configuration. + +## Available Configuration Sources + +### Java Agent Arguments + +You can pass a JSON object as string to the agent via its command line arguments. +For example, to override the service name used to identify your application reporting the performance data, +you can change the `inspectit.service-name` property as follows: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-1.17.0.jar="{ \"inspectit\": { \"service-name\": \"My Custom Service\" }}" -jar my-java-program.jar +``` + +Note that you have to escape the quotes within your JSON string. On linux you can just use the more readable single quotes notation: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-1.17.0.jar='{ "inspectit": { "service-name": "My Custom Service" }}' -jar my-java-program.jar +``` + +### Java System Properties + +You can pass any configuration property as the Java System property to the Java command that you use to start your Java application. +Using this approach you can change the `inspectit.service-name` property as follows: + +```bash +$ java -Dinspectit.service-name="My Custom Service" -javaagent:/path/to/inspectit-ocelot-agent-1.17.0.jar -jar my-java-program.jar +``` + +### OS Environment Variables + +Similar to the Java System properties, inspectIT Ocelot will also consider all the available operating system environment variables. +Due to the relaxed bindings, you can use upper case format, which is recommended when using system environment variables. + +```bash +$ INSPECTIT_SERVICE_NAME="My Custom Service" java -javaagent:/path/to/inspectit-ocelot-agent-1.17.0.jar -jar my-java-program.jar +``` + +## Relaxed Bindings + +Note that due to the Spring-powered configuration approach, the inspectIT Ocelot agent uses Spring support for relaxed bindings. +This means that a property can be specified in different formats depending on the property source. +As suggested by Spring, the allowed formats are: + +| Property | Note | +| --- | --- | +| `inspectit.service-name` | Kebab-case, which is recommended for use in `.properties` and `.yml` files. | +| `inspectit.serviceName` | Standard camelCase syntax. | +| `inspectit.service_name` | Underscore notation (snake_case), which is an alternative format for use in `.properties` and `.yml` files. | +| `INSPECTIT_SERVICE_NAME` | UPPER_CASE format, which is recommended when using system environment variables. | + +The formats should be used in the following way, based on the type of property source: + +| Property Source | Format | +| --- | --- | +| System properties | Camel case, kebab case, or underscore notation. | +| Environment Variables | Upper case format with the underscore as the delimiter. | +| Property files (`.properties`) | Camel case, kebab case, or underscore notation. | +| YAML files (`.yaml`, `.yml`) | Camel case, kebab case, or underscore notation. | + +## Environment Information + +Each agent stores the following information about its runtime environment: + +| Property | Note | +| --- | --- | +| `inspectit.env.agent-dir` | Resolves to the path where the agent-jar is stored. | +| `inspectit.env.hostname` | The hostname where the agent is running. | +| `inspectit.env.pid` | The process id of the JVM process. | + +They are used to define the default behavior when writing the configuration persistence file and will be sent +as attributes to the configuration server when fetching the configuration. + +You can reference these properties within the configuration using e.g. `${inspectit.env.agent-dir}` +as shown in the default configuration for +[HTTP-based configuration](configuration/external-configuration-sources.md#http-based-configuration). +Referencing every other property follows the same schema. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/open-census-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/open-census-configuration.md new file mode 100644 index 0000000000..db9aae8dd7 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/open-census-configuration.md @@ -0,0 +1,35 @@ +--- +id: version-1.17.0-open-census-configuration +title: Using OpenCensus Library with inspectIT Ocelot +sidebar_label: OpenCensus Configuration +original_id: open-census-configuration +--- + +If you plan to use the OpenCensus library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenCensus instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenCensus as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 1.17.0 internally uses OpenCensus in version 0.28.3. Please adapt any OpenCensus dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opencensus + opencensus-api + 0.28.3 + + ``` + +2. Set the JVM property `inspectit.publishOpenCensusToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenCensusToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenCensus library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenCensus classes are then loaded by the bootstrap class loader. This ensures that OpenCensus implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenCensus classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenCensus classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenCensus instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/open-telemetry-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/open-telemetry-configuration.md new file mode 100644 index 0000000000..40de6f4f9b --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/configuration/open-telemetry-configuration.md @@ -0,0 +1,37 @@ +--- +id: version-1.17.0-open-telemetry-configuration +title: Using OpenTelemetry Library with inspectIT Ocelot +sidebar_label: OpenTelemetry Configuration +original_id: open-telemetry-configuration +--- + +> TODO: finish the configuration documentation when the migration to OTEL (with the OTEL bridge) is finished, i.e., when all exporters (including OTLP exporters) are supported + +If you plan to use the OpenTelemetry library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenTelemetry instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenTelemetry as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 1.17.0 internally uses OpenTelemetry in version {opentelemetry-version}. Please adapt any OpenTelemetry dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opentelemetry + opentelemetry-api + {opentelemetry-version} + + ``` + +2. Set the JVM property `inspectit.publishOpenTelemetryToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenTelemetryToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenTelemetry library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenTelemetry classes are then loaded by the bootstrap class loader. This ensures that OpenTelemetry implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenTelemetry classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenTelemetry classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenTelemetry instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/getting-started/installation.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/getting-started/installation.md new file mode 100644 index 0000000000..3702828969 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/getting-started/installation.md @@ -0,0 +1,157 @@ +--- +id: version-1.17.0-installation +title: Installation +original_id: installation +--- + +This section describes the installation details for the inspectIT Ocelot agent. + +## Supported Java Runtime Environments + +The inspectIT Ocelot supports Java Runtime Environments in version 1.8.0 and above. You will not be able to use the agent with the lower Java versions. +The agent works with different JRE distributions including Oracle, openJDK, Azul, etc. + +## Adding the Agent to a JVM + +The best option for using the inspectIT Ocelot is to include it to the start of the JVM by using the `-javaagent` command-line option. +This way the agent will be initialized before your application starts. + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-1.17.0.jar" -jar my-java-program.jar +``` + +> Some application servers have dedicated scripts that are used to launch the actual JVM that runs the application. In such cases, you must alter the start-up scripts in order to instrument the correct JVM. + +## Attaching the Agent to a Running JVM + +inspectIT Ocelot also supports attaching the agent to an already running JVM. +In such a scenario the collection of metrics and traces will start from the point of the attachment. + +The attaching can easily be done using the agent itself and executing the following command: + +```bash +$ java -jar inspectit-ocelot-agent-1.17.0.jar [] +``` + +In the following example, we are attaching the agent to the JVM process `1337` and passing some [additional arguments](configuration/configuration-sources.md#java-agent-arguments) to it: +```bash +$ java -jar inspectit-ocelot-agent-1.17.0.jar 1337 '{"inspectit":{"service-name":"my-agent"}}' +``` + +> The agent is internally using the utility [jattach](https://github.com/apangin/jattach) for attaching itself to a running JVM. + +In order to find the process ID of a running JVM, you can use the `jcmd` to list all the running Java processes on your machine: + +```bash +$ jcmd -l +``` + +### Attaching Using jattach + +Another way of attaching the agent to a running JVM is to use the utility [jattach](https://github.com/apangin/jattach): + +```bash +$ ./jattach.sh load instrument false /path/to/inspectit-ocelot-agent-1.17.0.jar='{"inspectit.service-name" : "MyService"}' +``` +In this example we're also passing [JSON arguments](configuration/configuration-sources.md#java-agent-arguments) to the agent in order to configure its service name. + +> Using the attach options has some limitations with respect to using the OpenCensus instrumentation library in combination with the inspectIT Ocelot agent. Please refer to [OpenCensus Configuration](configuration/open-census-configuration.md) section to understand these limitations. + +## Using the Agent With a Security Manager + +If a Java Security Manager is enabled, the agent needs to be granted additional permissions to work. +For this, add the following to your policy file: + +``` +grant codeBase "file:" { + permission java.security.AllPermission; +}; +``` + +The correct policy file location depends on different factors. +See the [official Java documentation](https://docs.oracle.com/en/java/javase/17/security/permissions-jdk1.html#GUID-789089CA-8557-4017-B8B0-6899AD3BA18D) for further information. + +## Using the Agent with Kubernetes + +There are several ways to use the agent in a Kubernetes cluster. +For example, you could integrate the agent directly into the application container images, but this requires customizing all images. + +Another possibility is that the agent is automatically injected into the application containers using an **operator** and attached to the JVM processes. +For this purpose, the [OpenTelemetry K8s Operator](https://github.com/open-telemetry/opentelemetry-operator) can be used, with which it is possible to automatically roll out the inspectIT Ocelot Java Agent. +It is still under development, so it is not feature-complete, but depending on your needs the current version could already provide everything needed. + +:::warning Up-to-dateness of the Documentation +Since the OpenTelemetry K8s operator is currently under heavy development, the installation steps described below **may be outdated**. +They may nevertheless be helpful in navigating the OpenTelemetry Operator installation documentation by showing you which parts you need. +::: + +### Installing the Operator + +Install the OpenTelemetry Operator as described in its [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). This includes the following steps: + +1. Install the [cert-manager](https://cert-manager.io/docs/installation/) in your cluster if you have not done it already. +2. Install the operator using the following command. Please note that this will install the latest version of it: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml + ``` + + By adjusting the URL to a different GitHub release, a specific version of the operator can be used: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/download/v{version}/opentelemetry-operator.yaml + ``` + +### Using the Operator + +1. Create an `Instrumentation` object as shown below. Set the `spec.java.image` to the inspectIT Ocelot agent container image you would like to use: + + :::note + Please note that only container images of the inspectIT Ocelot Agent starting from version `1.15.2` are compatible and work with the OpenTelemetry K8s Operator. + ::: + + ```yaml + apiVersion: opentelemetry.io/v1alpha1 + kind: Instrumentation + metadata: + name: my-instrumentation + spec: + java: + image: inspectit/inspectit-ocelot-agent:1.15.2 + ``` + +2. Annotate namespaces or containers that should receive the agent as described in the [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). The possible values for the annotation can be: + + - `true` - inject the `Instrumentation` resource from the namespace. + - `my-instrumentation` - name of Instrumentation CR instance. + - `false` - do not inject + + The following annotation can be used for this: + ```yaml + instrumentation.opentelemetry.io/inject-java: "true" + ``` + + :::warning Ensure Correct Referencing + If the operator cannot find the instrumentation object, e.g. because none was created or the name was written incorrectly in the annotation, the containers will not be started! + ::: + +3. (Optional) Add environment variables to the containers to configure the agent. See the following section for using [environment variables to configure](configuration/configuration-sources.md#os-environment-variables) the inspectIT Ocelot agent. + + For example, to set a service-name for the agent and connect it to a specific configuration-server, you could set the `INSPECTIT_CONFIG_HTTP_URL` and `INSPECTIT_SERVICE_NAME` environment variable like in the following: + + ```yaml + containers: + - image: my-app-image + name: my-app + env: + - name: INSPECTIT_CONFIG_HTTP_URL + value: http://my-ocelot-config-server:8090/api/v1/agent/configuration + - name: INSPECTIT_SERVICE_NAME + value: my-service-name + ``` + + You can also take a look at the [deployment file](https://github.com/inspectIT/trading-demo-application/blob/main/k8s/deployment.yaml) of the [trading demo application](https://github.com/inspectIT/trading-demo-application) where exactly this is set up. + +4. Start or restart the containers to trigger the injection and attachment of the agent. + + Currently, the operator **will not automatically restart running containers** in case changes are made to the `Instrumentation` objects. However, there are plans to provide the ability to restart containers in order to roll out changes of the configurable `Instrumentation` objects automatically (see [issue #553](https://github.com/open-telemetry/opentelemetry-operator/issues/553)). diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/getting-started/quick-start.md b/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/getting-started/quick-start.md new file mode 100644 index 0000000000..2458310f22 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-1.17.0/getting-started/quick-start.md @@ -0,0 +1,22 @@ +--- +id: version-1.17.0-quick-start +title: Quick Start +original_id: quick-start +--- + +You can find and download all released versions of inspectIT Ocelot in our [GitHub](https://github.com/inspectIT/inspectit-ocelot/releases) repository. +You can get the current version on the following link: + +```bash +$ wget https://github.com/inspectIT/inspectit-oce/releases/download/1.17.0/inspectit-ocelot-agent-1.17.0.jar +``` + +The best way to start using inspectIT Ocelot is to attach the Java agent when starting your Java program. +Use the `-javaagent` command-line option to reference the inspectIT Ocelot jar: + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-1.17.0.jar" -jar my-java-program.jar +``` + +The [Installation](installation.md) section further describes what options are available for installing the agent, as well as how you can attach the agent to an already started JVM. +In the [Configuration](configuration/configuration-sources.md) section you can find more details on how to configure the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.0/breaking-changes/breaking-changes.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.0/breaking-changes/breaking-changes.md index c0daf001f0..3e6a0d64c2 100644 --- a/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.0/breaking-changes/breaking-changes.md +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.0/breaking-changes/breaking-changes.md @@ -40,7 +40,7 @@ This release introduces the property `protocol` for the Jaeger and OpenTelemetry ### Configuration sources only accept valid `YAML`, `JSON` (keys must be wrapped in double quotes) or `properties` notation -As of version 1.16.0, the [configuration sources](/configuration/configuration-sources.md) only accept valid `YAML`, `JSON` or `properties` notation. The "mix and match" of JSON and YAML should be avoided. For JSON, all keys need to be wrapped in double quotes. +As of version 1.16.0, the [configuration sources](configuration/configuration-sources.md) only accept valid `YAML`, `JSON` or `properties` notation. The "mix and match" of JSON and YAML should be avoided. For JSON, all keys need to be wrapped in double quotes. Upgrading to version 1.16.0 may break your startup routines if the JSON passed as command line arguments is invalid. For example, the following code will **not** work anymore and cause an exception: ```bash diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/configuration-sources.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/configuration-sources.md new file mode 100644 index 0000000000..6b2fa455d4 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/configuration-sources.md @@ -0,0 +1,97 @@ +--- +id: version-2.0.3-configuration-sources +title: Configuration Sources +original_id: configuration-sources +--- + +inspectIT Ocelot tries to implement the zero-configuration approach but lets you externalize the configuration and influence every bit of its configuration if this is required. +Internally it uses the Spring-based `PropertySource` order to allow overriding of configuration values. +Configuration properties are considered in inspectIT Ocelot in the following order: + +1. [Java Agent Arguments](#java-agent-arguments) +1. [Java System Properties](#java-system-properties) +1. [OS environment Variables](#os-environment-variables) +1. External Configuration Sources: + * [File-based Configuration](configuration/external-configuration-sources.md#file-based-configuration) +1. inspectIT Ocelot Defaults + +When an invalid configuration is given to inspectIT on startup, the agent will use a fallback configuration. +In this fallback configuration, the agent is inactive with the exception of listening for configuration updates. + +When giving an invalid configuration through a runtime update to the agent, the agent will simply retain the previous configuration. + +## Available Configuration Sources + +### Java Agent Arguments + +You can pass a JSON object as string to the agent via its command line arguments. +For example, to override the service name used to identify your application reporting the performance data, +you can change the `inspectit.service-name` property as follows: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-2.0.3.jar="{ \"inspectit\": { \"service-name\": \"My Custom Service\" }}" -jar my-java-program.jar +``` + +Note that you have to escape the quotes within your JSON string. On linux you can just use the more readable single quotes notation: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-2.0.3.jar='{ "inspectit": { "service-name": "My Custom Service" }}' -jar my-java-program.jar +``` + +### Java System Properties + +You can pass any configuration property as the Java System property to the Java command that you use to start your Java application. +Using this approach you can change the `inspectit.service-name` property as follows: + +```bash +$ java -Dinspectit.service-name="My Custom Service" -javaagent:/path/to/inspectit-ocelot-agent-2.0.3.jar -jar my-java-program.jar +``` + +### OS Environment Variables + +Similar to the Java System properties, inspectIT Ocelot will also consider all the available operating system environment variables. +Due to the relaxed bindings, you can use upper case format, which is recommended when using system environment variables. + +```bash +$ INSPECTIT_SERVICE_NAME="My Custom Service" java -javaagent:/path/to/inspectit-ocelot-agent-2.0.3.jar -jar my-java-program.jar +``` + +## Relaxed Bindings + +Note that due to the Spring-powered configuration approach, the inspectIT Ocelot agent uses Spring support for relaxed bindings. +This means that a property can be specified in different formats depending on the property source. +As suggested by Spring, the allowed formats are: + +| Property | Note | +| --- | --- | +| `inspectit.service-name` | Kebab-case, which is recommended for use in `.properties` and `.yml` files. | +| `inspectit.serviceName` | Standard camelCase syntax. | +| `inspectit.service_name` | Underscore notation (snake_case), which is an alternative format for use in `.properties` and `.yml` files. | +| `INSPECTIT_SERVICE_NAME` | UPPER_CASE format, which is recommended when using system environment variables. | + +The formats should be used in the following way, based on the type of property source: + +| Property Source | Format | +| --- | --- | +| System properties | Camel case, kebab case, or underscore notation. | +| Environment Variables | Upper case format with the underscore as the delimiter. | +| Property files (`.properties`) | Camel case, kebab case, or underscore notation. | +| YAML files (`.yaml`, `.yml`) | Camel case, kebab case, or underscore notation. | + +## Environment Information + +Each agent stores the following information about its runtime environment: + +| Property | Note | +| --- | --- | +| `inspectit.env.agent-dir` | Resolves to the path where the agent-jar is stored. | +| `inspectit.env.hostname` | The hostname where the agent is running. | +| `inspectit.env.pid` | The process id of the JVM process. | + +They are used to define the default behavior when writing the configuration persistence file and will be sent +as attributes to the configuration server when fetching the configuration. + +You can reference these properties within the configuration using e.g. `${inspectit.env.agent-dir}` +as shown in the default configuration for +[HTTP-based configuration](configuration/external-configuration-sources.md#http-based-configuration). +Referencing every other property follows the same schema. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/open-census-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/open-census-configuration.md new file mode 100644 index 0000000000..2d7bc70ce8 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/open-census-configuration.md @@ -0,0 +1,35 @@ +--- +id: version-2.0.3-open-census-configuration +title: Using OpenCensus Library with inspectIT Ocelot +sidebar_label: OpenCensus Configuration +original_id: open-census-configuration +--- + +If you plan to use the OpenCensus library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenCensus instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenCensus as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 2.0.3 internally uses OpenCensus in version 0.28.3. Please adapt any OpenCensus dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opencensus + opencensus-api + 0.28.3 + + ``` + +2. Set the JVM property `inspectit.publishOpenCensusToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenCensusToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenCensus library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenCensus classes are then loaded by the bootstrap class loader. This ensures that OpenCensus implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenCensus classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenCensus classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenCensus instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/open-telemetry-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/open-telemetry-configuration.md new file mode 100644 index 0000000000..f6ab5436fc --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/configuration/open-telemetry-configuration.md @@ -0,0 +1,37 @@ +--- +id: version-2.0.3-open-telemetry-configuration +title: Using OpenTelemetry Library with inspectIT Ocelot +sidebar_label: OpenTelemetry Configuration +original_id: open-telemetry-configuration +--- + +> TODO: finish the configuration documentation when the migration to OTEL (with the OTEL bridge) is finished, i.e., when all exporters (including OTLP exporters) are supported + +If you plan to use the OpenTelemetry library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenTelemetry instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenTelemetry as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 2.0.3 internally uses OpenTelemetry in version {opentelemetry-version}. Please adapt any OpenTelemetry dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opentelemetry + opentelemetry-api + {opentelemetry-version} + + ``` + +2. Set the JVM property `inspectit.publishOpenTelemetryToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenTelemetryToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenTelemetry library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenTelemetry classes are then loaded by the bootstrap class loader. This ensures that OpenTelemetry implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenTelemetry classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenTelemetry classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenTelemetry instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/getting-started/installation.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/getting-started/installation.md new file mode 100644 index 0000000000..0e1dcfb462 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/getting-started/installation.md @@ -0,0 +1,157 @@ +--- +id: version-2.0.3-installation +title: Installation +original_id: installation +--- + +This section describes the installation details for the inspectIT Ocelot agent. + +## Supported Java Runtime Environments + +The inspectIT Ocelot supports Java Runtime Environments in version 1.8.0 and above. You will not be able to use the agent with the lower Java versions. +The agent works with different JRE distributions including Oracle, openJDK, Azul, etc. + +## Adding the Agent to a JVM + +The best option for using the inspectIT Ocelot is to include it to the start of the JVM by using the `-javaagent` command-line option. +This way the agent will be initialized before your application starts. + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-2.0.3.jar" -jar my-java-program.jar +``` + +> Some application servers have dedicated scripts that are used to launch the actual JVM that runs the application. In such cases, you must alter the start-up scripts in order to instrument the correct JVM. + +## Attaching the Agent to a Running JVM + +inspectIT Ocelot also supports attaching the agent to an already running JVM. +In such a scenario the collection of metrics and traces will start from the point of the attachment. + +The attaching can easily be done using the agent itself and executing the following command: + +```bash +$ java -jar inspectit-ocelot-agent-2.0.3.jar [] +``` + +In the following example, we are attaching the agent to the JVM process `1337` and passing some [additional arguments](configuration/configuration-sources.md#java-agent-arguments) to it: +```bash +$ java -jar inspectit-ocelot-agent-2.0.3.jar 1337 '{"inspectit":{"service-name":"my-agent"}}' +``` + +> The agent is internally using the utility [jattach](https://github.com/apangin/jattach) for attaching itself to a running JVM. + +In order to find the process ID of a running JVM, you can use the `jcmd` to list all the running Java processes on your machine: + +```bash +$ jcmd -l +``` + +### Attaching Using jattach + +Another way of attaching the agent to a running JVM is to use the utility [jattach](https://github.com/apangin/jattach): + +```bash +$ ./jattach.sh load instrument false /path/to/inspectit-ocelot-agent-2.0.3.jar='{"inspectit.service-name" : "MyService"}' +``` +In this example we're also passing [JSON arguments](configuration/configuration-sources.md#java-agent-arguments) to the agent in order to configure its service name. + +> Using the attach options has some limitations with respect to using the OpenCensus instrumentation library in combination with the inspectIT Ocelot agent. Please refer to [OpenCensus Configuration](configuration/open-census-configuration.md) section to understand these limitations. + +## Using the Agent With a Security Manager + +If a Java Security Manager is enabled, the agent needs to be granted additional permissions to work. +For this, add the following to your policy file: + +``` +grant codeBase "file:" { + permission java.security.AllPermission; +}; +``` + +The correct policy file location depends on different factors. +See the [official Java documentation](https://docs.oracle.com/en/java/javase/17/security/permissions-jdk1.html#GUID-789089CA-8557-4017-B8B0-6899AD3BA18D) for further information. + +## Using the Agent with Kubernetes + +There are several ways to use the agent in a Kubernetes cluster. +For example, you could integrate the agent directly into the application container images, but this requires customizing all images. + +Another possibility is that the agent is automatically injected into the application containers using an **operator** and attached to the JVM processes. +For this purpose, the [OpenTelemetry K8s Operator](https://github.com/open-telemetry/opentelemetry-operator) can be used, with which it is possible to automatically roll out the inspectIT Ocelot Java Agent. +It is still under development, so it is not feature-complete, but depending on your needs the current version could already provide everything needed. + +:::warning Up-to-dateness of the Documentation +Since the OpenTelemetry K8s operator is currently under heavy development, the installation steps described below **may be outdated**. +They may nevertheless be helpful in navigating the OpenTelemetry Operator installation documentation by showing you which parts you need. +::: + +### Installing the Operator + +Install the OpenTelemetry Operator as described in its [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). This includes the following steps: + +1. Install the [cert-manager](https://cert-manager.io/docs/installation/) in your cluster if you have not done it already. +2. Install the operator using the following command. Please note that this will install the latest version of it: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml + ``` + + By adjusting the URL to a different GitHub release, a specific version of the operator can be used: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/download/v{version}/opentelemetry-operator.yaml + ``` + +### Using the Operator + +1. Create an `Instrumentation` object as shown below. Set the `spec.java.image` to the inspectIT Ocelot agent container image you would like to use: + + :::note + Please note that only container images of the inspectIT Ocelot Agent starting from version `1.15.2` are compatible and work with the OpenTelemetry K8s Operator. + ::: + + ```yaml + apiVersion: opentelemetry.io/v1alpha1 + kind: Instrumentation + metadata: + name: my-instrumentation + spec: + java: + image: inspectit/inspectit-ocelot-agent:1.15.2 + ``` + +2. Annotate namespaces or containers that should receive the agent as described in the [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). The possible values for the annotation can be: + + - `true` - inject the `Instrumentation` resource from the namespace. + - `my-instrumentation` - name of Instrumentation CR instance. + - `false` - do not inject + + The following annotation can be used for this: + ```yaml + instrumentation.opentelemetry.io/inject-java: "true" + ``` + + :::warning Ensure Correct Referencing + If the operator cannot find the instrumentation object, e.g. because none was created or the name was written incorrectly in the annotation, the containers will not be started! + ::: + +3. (Optional) Add environment variables to the containers to configure the agent. See the following section for using [environment variables to configure](configuration/configuration-sources.md#os-environment-variables) the inspectIT Ocelot agent. + + For example, to set a service-name for the agent and connect it to a specific configuration-server, you could set the `INSPECTIT_CONFIG_HTTP_URL` and `INSPECTIT_SERVICE_NAME` environment variable like in the following: + + ```yaml + containers: + - image: my-app-image + name: my-app + env: + - name: INSPECTIT_CONFIG_HTTP_URL + value: http://my-ocelot-config-server:8090/api/v1/agent/configuration + - name: INSPECTIT_SERVICE_NAME + value: my-service-name + ``` + + You can also take a look at the [deployment file](https://github.com/inspectIT/trading-demo-application/blob/main/k8s/deployment.yaml) of the [trading demo application](https://github.com/inspectIT/trading-demo-application) where exactly this is set up. + +4. Start or restart the containers to trigger the injection and attachment of the agent. + + Currently, the operator **will not automatically restart running containers** in case changes are made to the `Instrumentation` objects. However, there are plans to provide the ability to restart containers in order to roll out changes of the configurable `Instrumentation` objects automatically (see [issue #553](https://github.com/open-telemetry/opentelemetry-operator/issues/553)). diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/getting-started/quick-start.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/getting-started/quick-start.md new file mode 100644 index 0000000000..5e0f3daa8c --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/getting-started/quick-start.md @@ -0,0 +1,22 @@ +--- +id: version-2.0.3-quick-start +title: Quick Start +original_id: quick-start +--- + +You can find and download all released versions of inspectIT Ocelot in our [GitHub](https://github.com/inspectIT/inspectit-ocelot/releases) repository. +You can get the current version on the following link: + +```bash +$ wget https://github.com/inspectIT/inspectit-oce/releases/download/2.0.3/inspectit-ocelot-agent-2.0.3.jar +``` + +The best way to start using inspectIT Ocelot is to attach the Java agent when starting your Java program. +Use the `-javaagent` command-line option to reference the inspectIT Ocelot jar: + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-2.0.3.jar" -jar my-java-program.jar +``` + +The [Installation](installation.md) section further describes what options are available for installing the agent, as well as how you can attach the agent to an already started JVM. +In the [Configuration](configuration/configuration-sources.md) section you can find more details on how to configure the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/tracing/trace-exporters.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/tracing/trace-exporters.md new file mode 100644 index 0000000000..44e47243f7 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.0.3/tracing/trace-exporters.md @@ -0,0 +1,99 @@ +--- +id: version-2.0.3-trace-exporters +title: Trace Exporters +original_id: trace-exporters +--- + +Tracing exporters are responsible for passing the recorded tracing data to a corresponding storage. + +inspectIT Ocelot currently supports the following trace exporters: + +* [Logging (Traces)](#logging-exporter-traces) [[Homepage](https://github.com/open-telemetry/opentelemetry-java/blob/main/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/LoggingSpanExporter.java)] +* [Zipkin](#zipkin-exporter) [[Homepage](https://zipkin.io/)] +* [Jaeger](#jaeger-exporter) [[Homepage](https://www.jaegertracing.io/)] +* [OTLP (Traces)](#otlp-exporter-traces) [[Homepage](https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/otlp/trace)] + +>**Important note**: Starting with version `2.0.0`, inspectIT Ocelot moved from OpenCensus to OpenTelemetry. As a result, the `OpenCensus Agent Exporter` is no longer supported and has been removed. +> Additionally, with OpenTelemetry, inspectIT Ocelot does not support the `service-name` property for individual exporter services anymore. Thus, we removed the `service-name` property from the Jaeger and Zipkin exporter. This property can now be set for all trace exporters in `inspectit.exporters.tracing.service-name`. + +## General Trace Exporter Settings + +These settings apply to all trace exporters and can set below the `inspectit.exporters.tracing` property. + +| Property | Default | Description | +|-----------------|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `.service-name` | `${inspectit.service-name}` | The value of this property will be used to identify the service a trace came from. Please note that changes of this property only take effect after restarting the agent. | + +## Logging Exporter (Traces) + +The Logging exporter exports traces to the system log. By default, the Logging exporter is disabled. +The following properties are nested properties below the `inspectit.exporters.tracing.logging` property: + +| Property | Default | Description | +| ---------- | ---------- | ------------------------------------------------------------ | +| `.enabled` | `DISABLED` | If `ENABLED` or `IF_CONFIGURED`, the agent will try to start the Logging trace exporter. | + +To make inspectIT Ocelot write the spans to the system log, the following JVM property can be used: + +`-Dinspectit.exporters.tracing.logging.enabled=ENABLED` + +## Zipkin Exporter + +The Zipkin exporter exports Traces in Zipkin v2 format to a Zipkin server or other compatible servers. + +By default, the Zipkin exporter is enabled but the URL needed for the exporter to actually start is set to `null`. + +The following properties are nested properties below the `inspectit.exporters.tracing.zipkin` property: + +|Property |Default| Description| +|---|---|---| +|`.enabled`|`IF_CONFIGURED`|If `ENABLED` or `IF_CONFIGURED`, the agent will try to start the Zipkin exporter. If the url is not set, it will log a warning if set to `ENABLED` but fail silently if set to `IF_CONFIGURED`.| +|`.endpoint`|`null`|v2 URL under which the ZipKin server can be accessed (e.g. http://127.0.0.1:9411/api/v2/spans).| + +To make inspectIT Ocelot push the spans to a Zipkin server running on the same machine as the agent, the following JVM property can be used: + +``` +-Dinspectit.exporters.tracing.zipkin.url=http://127.0.0.1:9411/api/v2/spans +``` + +## Jaeger Exporter + +The Jaeger exports works exactly the same way as the [Zipkin Exporter](#zipkin-exporter). InspectIT Ocelot supports thrift and gRPC Jaeger exporter. + +By default, the Jaeger exporters are enabled but the URL/gRPC endpoint needed for the exporter to actually start is set to `null`. + +### Jaeger Thrift Exporter + +The following properties are nested properties below the `inspectit.exporters.tracing.jaeger` property: + +|Property | Default | Description| +|---|-----------------|---| +|`.enabled`| `IF_CONFIGURED` |If `ENABLED` or `IF_CONFIGURED`, the agent will try to start the Jaeger exporter. If the url is not set, it will log a warning if set to `ENABLED` but fail silently if set to `IF_CONFIGURED`.| +|`.endpoint`| `null` |URL endpoint under which the Jaeger server can be accessed (e.g. http://127.0.0.1:14268/api/traces).| +|`.protocol`| `null` |The transport protocol. Supported protocols are `grpc` and `http/thrift`.| + +To make inspectIT Ocelot push the spans to a Jaeger server running on the same machine as the agent, the following JVM property can be used: + +``` +-Dinspectit.exporters.tracing.jaeger.endpoint=http://127.0.0.1:14268/api/traces +``` + +## OTLP Exporter (Traces) + +The OpenTelemetry Protocol (OTLP) exporters export the Traces in OTLP to the desired endpoint at a specified interval. +By default, the OTLP exporters are enabled but the URL endpoint needed for the exporter to actually start is set to `null`. + +The following properties are nested properties below the `inspectit.exporters.tracing.otlp` property: + +| Property | Default | Description | +| ----------- |------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `.enabled` | `IF_CONFIGURED` | If `ENABLED` or `IF_CONFIGURED`, the inspectIT Ocelot agent will try to start the OTLP gRPC trace exporter. | +| `.endpoint` | `null` | Target to which the exporter is going to send traces, e.g. `http://localhost:4317` | +| `.protocol` | `null` | The transport protocol, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported protocols are `grpc` and `http/protobuf`. | + +To make inspectIT Ocelot push the spans via OTLP to, e.g. an OpenTelemetry Collector running on the same machine as the agent, the following JVM property can be used: + +``` +-Dinspectit.exporters.tracing.otlp.endpoint=http://127.0.0.1:4317 +-Dinspectit.exporters.tracing.otlp.protocol=grpc +``` diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/configuration-sources.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/configuration-sources.md new file mode 100644 index 0000000000..4a8e0cb586 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/configuration-sources.md @@ -0,0 +1,97 @@ +--- +id: version-2.1.0-configuration-sources +title: Configuration Sources +original_id: configuration-sources +--- + +inspectIT Ocelot tries to implement the zero-configuration approach but lets you externalize the configuration and influence every bit of its configuration if this is required. +Internally it uses the Spring-based `PropertySource` order to allow overriding of configuration values. +Configuration properties are considered in inspectIT Ocelot in the following order: + +1. [Java Agent Arguments](#java-agent-arguments) +1. [Java System Properties](#java-system-properties) +1. [OS environment Variables](#os-environment-variables) +1. External Configuration Sources: + * [File-based Configuration](configuration/external-configuration-sources.md#file-based-configuration) +1. inspectIT Ocelot Defaults + +When an invalid configuration is given to inspectIT on startup, the agent will use a fallback configuration. +In this fallback configuration, the agent is inactive with the exception of listening for configuration updates. + +When giving an invalid configuration through a runtime update to the agent, the agent will simply retain the previous configuration. + +## Available Configuration Sources + +### Java Agent Arguments + +You can pass a JSON object as string to the agent via its command line arguments. +For example, to override the service name used to identify your application reporting the performance data, +you can change the `inspectit.service-name` property as follows: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-2.1.0.jar="{ \"inspectit\": { \"service-name\": \"My Custom Service\" }}" -jar my-java-program.jar +``` + +Note that you have to escape the quotes within your JSON string. On linux you can just use the more readable single quotes notation: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-2.1.0.jar='{ "inspectit": { "service-name": "My Custom Service" }}' -jar my-java-program.jar +``` + +### Java System Properties + +You can pass any configuration property as the Java System property to the Java command that you use to start your Java application. +Using this approach you can change the `inspectit.service-name` property as follows: + +```bash +$ java -Dinspectit.service-name="My Custom Service" -javaagent:/path/to/inspectit-ocelot-agent-2.1.0.jar -jar my-java-program.jar +``` + +### OS Environment Variables + +Similar to the Java System properties, inspectIT Ocelot will also consider all the available operating system environment variables. +Due to the relaxed bindings, you can use upper case format, which is recommended when using system environment variables. + +```bash +$ INSPECTIT_SERVICE_NAME="My Custom Service" java -javaagent:/path/to/inspectit-ocelot-agent-2.1.0.jar -jar my-java-program.jar +``` + +## Relaxed Bindings + +Note that due to the Spring-powered configuration approach, the inspectIT Ocelot agent uses Spring support for relaxed bindings. +This means that a property can be specified in different formats depending on the property source. +As suggested by Spring, the allowed formats are: + +| Property | Note | +| --- | --- | +| `inspectit.service-name` | Kebab-case, which is recommended for use in `.properties` and `.yml` files. | +| `inspectit.serviceName` | Standard camelCase syntax. | +| `inspectit.service_name` | Underscore notation (snake_case), which is an alternative format for use in `.properties` and `.yml` files. | +| `INSPECTIT_SERVICE_NAME` | UPPER_CASE format, which is recommended when using system environment variables. | + +The formats should be used in the following way, based on the type of property source: + +| Property Source | Format | +| --- | --- | +| System properties | Camel case, kebab case, or underscore notation. | +| Environment Variables | Upper case format with the underscore as the delimiter. | +| Property files (`.properties`) | Camel case, kebab case, or underscore notation. | +| YAML files (`.yaml`, `.yml`) | Camel case, kebab case, or underscore notation. | + +## Environment Information + +Each agent stores the following information about its runtime environment: + +| Property | Note | +| --- | --- | +| `inspectit.env.agent-dir` | Resolves to the path where the agent-jar is stored. | +| `inspectit.env.hostname` | The hostname where the agent is running. | +| `inspectit.env.pid` | The process id of the JVM process. | + +They are used to define the default behavior when writing the configuration persistence file and will be sent +as attributes to the configuration server when fetching the configuration. + +You can reference these properties within the configuration using e.g. `${inspectit.env.agent-dir}` +as shown in the default configuration for +[HTTP-based configuration](configuration/external-configuration-sources.md#http-based-configuration). +Referencing every other property follows the same schema. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/open-census-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/open-census-configuration.md new file mode 100644 index 0000000000..004216fa5d --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/open-census-configuration.md @@ -0,0 +1,35 @@ +--- +id: version-2.1.0-open-census-configuration +title: Using OpenCensus Library with inspectIT Ocelot +sidebar_label: OpenCensus Configuration +original_id: open-census-configuration +--- + +If you plan to use the OpenCensus library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenCensus instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenCensus as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 2.1.0 internally uses OpenCensus in version 0.28.3. Please adapt any OpenCensus dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opencensus + opencensus-api + 0.28.3 + + ``` + +2. Set the JVM property `inspectit.publishOpenCensusToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenCensusToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenCensus library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenCensus classes are then loaded by the bootstrap class loader. This ensures that OpenCensus implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenCensus classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenCensus classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenCensus instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/open-telemetry-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/open-telemetry-configuration.md new file mode 100644 index 0000000000..cd21f04ccd --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/configuration/open-telemetry-configuration.md @@ -0,0 +1,37 @@ +--- +id: version-2.1.0-open-telemetry-configuration +title: Using OpenTelemetry Library with inspectIT Ocelot +sidebar_label: OpenTelemetry Configuration +original_id: open-telemetry-configuration +--- + +> TODO: finish the configuration documentation when the migration to OTEL (with the OTEL bridge) is finished, i.e., when all exporters (including OTLP exporters) are supported + +If you plan to use the OpenTelemetry library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenTelemetry instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenTelemetry as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 2.1.0 internally uses OpenTelemetry in version {opentelemetry-version}. Please adapt any OpenTelemetry dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opentelemetry + opentelemetry-api + {opentelemetry-version} + + ``` + +2. Set the JVM property `inspectit.publishOpenTelemetryToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenTelemetryToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenTelemetry library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenTelemetry classes are then loaded by the bootstrap class loader. This ensures that OpenTelemetry implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenTelemetry classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenTelemetry classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenTelemetry instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/getting-started/installation.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/getting-started/installation.md new file mode 100644 index 0000000000..821ecb1895 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/getting-started/installation.md @@ -0,0 +1,157 @@ +--- +id: version-2.1.0-installation +title: Installation +original_id: installation +--- + +This section describes the installation details for the inspectIT Ocelot agent. + +## Supported Java Runtime Environments + +The inspectIT Ocelot supports Java Runtime Environments in version 1.8.0 and above. You will not be able to use the agent with the lower Java versions. +The agent works with different JRE distributions including Oracle, openJDK, Azul, etc. + +## Adding the Agent to a JVM + +The best option for using the inspectIT Ocelot is to include it to the start of the JVM by using the `-javaagent` command-line option. +This way the agent will be initialized before your application starts. + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-2.1.0.jar" -jar my-java-program.jar +``` + +> Some application servers have dedicated scripts that are used to launch the actual JVM that runs the application. In such cases, you must alter the start-up scripts in order to instrument the correct JVM. + +## Attaching the Agent to a Running JVM + +inspectIT Ocelot also supports attaching the agent to an already running JVM. +In such a scenario the collection of metrics and traces will start from the point of the attachment. + +The attaching can easily be done using the agent itself and executing the following command: + +```bash +$ java -jar inspectit-ocelot-agent-2.1.0.jar [] +``` + +In the following example, we are attaching the agent to the JVM process `1337` and passing some [additional arguments](configuration/configuration-sources.md#java-agent-arguments) to it: +```bash +$ java -jar inspectit-ocelot-agent-2.1.0.jar 1337 '{"inspectit":{"service-name":"my-agent"}}' +``` + +> The agent is internally using the utility [jattach](https://github.com/apangin/jattach) for attaching itself to a running JVM. + +In order to find the process ID of a running JVM, you can use the `jcmd` to list all the running Java processes on your machine: + +```bash +$ jcmd -l +``` + +### Attaching Using jattach + +Another way of attaching the agent to a running JVM is to use the utility [jattach](https://github.com/apangin/jattach): + +```bash +$ ./jattach.sh load instrument false /path/to/inspectit-ocelot-agent-2.1.0.jar='{"inspectit.service-name" : "MyService"}' +``` +In this example we're also passing [JSON arguments](configuration/configuration-sources.md#java-agent-arguments) to the agent in order to configure its service name. + +> Using the attach options has some limitations with respect to using the OpenCensus instrumentation library in combination with the inspectIT Ocelot agent. Please refer to [OpenCensus Configuration](configuration/open-census-configuration.md) section to understand these limitations. + +## Using the Agent With a Security Manager + +If a Java Security Manager is enabled, the agent needs to be granted additional permissions to work. +For this, add the following to your policy file: + +``` +grant codeBase "file:" { + permission java.security.AllPermission; +}; +``` + +The correct policy file location depends on different factors. +See the [official Java documentation](https://docs.oracle.com/en/java/javase/17/security/permissions-jdk1.html#GUID-789089CA-8557-4017-B8B0-6899AD3BA18D) for further information. + +## Using the Agent with Kubernetes + +There are several ways to use the agent in a Kubernetes cluster. +For example, you could integrate the agent directly into the application container images, but this requires customizing all images. + +Another possibility is that the agent is automatically injected into the application containers using an **operator** and attached to the JVM processes. +For this purpose, the [OpenTelemetry K8s Operator](https://github.com/open-telemetry/opentelemetry-operator) can be used, with which it is possible to automatically roll out the inspectIT Ocelot Java Agent. +It is still under development, so it is not feature-complete, but depending on your needs the current version could already provide everything needed. + +:::warning Up-to-dateness of the Documentation +Since the OpenTelemetry K8s operator is currently under heavy development, the installation steps described below **may be outdated**. +They may nevertheless be helpful in navigating the OpenTelemetry Operator installation documentation by showing you which parts you need. +::: + +### Installing the Operator + +Install the OpenTelemetry Operator as described in its [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). This includes the following steps: + +1. Install the [cert-manager](https://cert-manager.io/docs/installation/) in your cluster if you have not done it already. +2. Install the operator using the following command. Please note that this will install the latest version of it: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml + ``` + + By adjusting the URL to a different GitHub release, a specific version of the operator can be used: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/download/v{version}/opentelemetry-operator.yaml + ``` + +### Using the Operator + +1. Create an `Instrumentation` object as shown below. Set the `spec.java.image` to the inspectIT Ocelot agent container image you would like to use: + + :::note + Please note that only container images of the inspectIT Ocelot Agent starting from version `1.15.2` are compatible and work with the OpenTelemetry K8s Operator. + ::: + + ```yaml + apiVersion: opentelemetry.io/v1alpha1 + kind: Instrumentation + metadata: + name: my-instrumentation + spec: + java: + image: inspectit/inspectit-ocelot-agent:1.15.2 + ``` + +2. Annotate namespaces or containers that should receive the agent as described in the [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). The possible values for the annotation can be: + + - `true` - inject the `Instrumentation` resource from the namespace. + - `my-instrumentation` - name of Instrumentation CR instance. + - `false` - do not inject + + The following annotation can be used for this: + ```yaml + instrumentation.opentelemetry.io/inject-java: "true" + ``` + + :::warning Ensure Correct Referencing + If the operator cannot find the instrumentation object, e.g. because none was created or the name was written incorrectly in the annotation, the containers will not be started! + ::: + +3. (Optional) Add environment variables to the containers to configure the agent. See the following section for using [environment variables to configure](configuration/configuration-sources.md#os-environment-variables) the inspectIT Ocelot agent. + + For example, to set a service-name for the agent and connect it to a specific configuration-server, you could set the `INSPECTIT_CONFIG_HTTP_URL` and `INSPECTIT_SERVICE_NAME` environment variable like in the following: + + ```yaml + containers: + - image: my-app-image + name: my-app + env: + - name: INSPECTIT_CONFIG_HTTP_URL + value: http://my-ocelot-config-server:8090/api/v1/agent/configuration + - name: INSPECTIT_SERVICE_NAME + value: my-service-name + ``` + + You can also take a look at the [deployment file](https://github.com/inspectIT/trading-demo-application/blob/main/k8s/deployment.yaml) of the [trading demo application](https://github.com/inspectIT/trading-demo-application) where exactly this is set up. + +4. Start or restart the containers to trigger the injection and attachment of the agent. + + Currently, the operator **will not automatically restart running containers** in case changes are made to the `Instrumentation` objects. However, there are plans to provide the ability to restart containers in order to roll out changes of the configurable `Instrumentation` objects automatically (see [issue #553](https://github.com/open-telemetry/opentelemetry-operator/issues/553)). diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/getting-started/quick-start.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/getting-started/quick-start.md new file mode 100644 index 0000000000..30d0a21273 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/getting-started/quick-start.md @@ -0,0 +1,22 @@ +--- +id: version-2.1.0-quick-start +title: Quick Start +original_id: quick-start +--- + +You can find and download all released versions of inspectIT Ocelot in our [GitHub](https://github.com/inspectIT/inspectit-ocelot/releases) repository. +You can get the current version on the following link: + +```bash +$ wget https://github.com/inspectIT/inspectit-oce/releases/download/2.1.0/inspectit-ocelot-agent-2.1.0.jar +``` + +The best way to start using inspectIT Ocelot is to attach the Java agent when starting your Java program. +Use the `-javaagent` command-line option to reference the inspectIT Ocelot jar: + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-2.1.0.jar" -jar my-java-program.jar +``` + +The [Installation](installation.md) section further describes what options are available for installing the agent, as well as how you can attach the agent to an already started JVM. +In the [Configuration](configuration/configuration-sources.md) section you can find more details on how to configure the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/tracing/self-monitoring.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/tracing/self-monitoring.md new file mode 100644 index 0000000000..900f27928c --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.0/tracing/self-monitoring.md @@ -0,0 +1,49 @@ +--- +id: version-2.1.0-tracing-self-monitoring +title: Self-Monitoring +original_id: tracing-self-monitoring +--- + +The inspectIT Ocelot Agent allows to trace itself to get detailed information about what the agent is doing (e.g. execution of method hooks and actions). + +## Action Tracing + +:::warning +Please note that this feature is intended **only for debug purposes** or to help you create configuration. +Depending on the size of the configuration used, this can result in a large amount of data being collected, so this feature **should not be used in production environments or during performance testing**. +::: + +Using the *action tracing* feature, the agent will record method hooks and action calls including detailed information about the execution context where they are executed in. +These data are, for example, the arguments of an action, the return value of an action and the existing context data/variables. + +![Trace with enabled action tracing](assets/action-tracing.png) + +Action tracing can be configured using the `inspectit.self-monitoring.action-tracing` property. + +```YAML +inspectit: + self-monitoring: + action-tracing: ONLY_ENABLED +``` + +The default value of this setting is `ONLY_ENABLED` and accepts the following options: + +- `OFF` - Action tracing is disabled and no spans are created. +- `ONLY_ENABLED` - Only actions and method hooks of rules for which action tracing has been explicitly enabled are traced. +- `ALL_WITHOUT_DEFAULT` - Only actions and method hooks of rules which are not fagged as default rules are traced. +- `ALL_WITH_DEFAULT` - All method hooks and actions are traced. + +### Enabling Action Tracing for Specific Rules + +By default, action tracing is not enabled for any rule. +To trace the method hooks and actions of a specific rule, action tracing can be enabled for a rule by using their `enable-action-tracing` attribute. + +```YAML +inspectit: + instrumentation: + rules: + 'r_example_rule': + enable-action-tracing: true +``` + +Note that this setting **only has an effect** if the action tracing mode is set to `ONLY_ENABLED`.! \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/configuration-sources.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/configuration-sources.md new file mode 100644 index 0000000000..b4d6a90e47 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/configuration-sources.md @@ -0,0 +1,97 @@ +--- +id: version-2.1.1-configuration-sources +title: Configuration Sources +original_id: configuration-sources +--- + +inspectIT Ocelot tries to implement the zero-configuration approach but lets you externalize the configuration and influence every bit of its configuration if this is required. +Internally it uses the Spring-based `PropertySource` order to allow overriding of configuration values. +Configuration properties are considered in inspectIT Ocelot in the following order: + +1. [Java Agent Arguments](#java-agent-arguments) +1. [Java System Properties](#java-system-properties) +1. [OS environment Variables](#os-environment-variables) +1. External Configuration Sources: + * [File-based Configuration](configuration/external-configuration-sources.md#file-based-configuration) +1. inspectIT Ocelot Defaults + +When an invalid configuration is given to inspectIT on startup, the agent will use a fallback configuration. +In this fallback configuration, the agent is inactive with the exception of listening for configuration updates. + +When giving an invalid configuration through a runtime update to the agent, the agent will simply retain the previous configuration. + +## Available Configuration Sources + +### Java Agent Arguments + +You can pass a JSON object as string to the agent via its command line arguments. +For example, to override the service name used to identify your application reporting the performance data, +you can change the `inspectit.service-name` property as follows: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-2.1.1.jar="{ \"inspectit\": { \"service-name\": \"My Custom Service\" }}" -jar my-java-program.jar +``` + +Note that you have to escape the quotes within your JSON string. On linux you can just use the more readable single quotes notation: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-2.1.1.jar='{ "inspectit": { "service-name": "My Custom Service" }}' -jar my-java-program.jar +``` + +### Java System Properties + +You can pass any configuration property as the Java System property to the Java command that you use to start your Java application. +Using this approach you can change the `inspectit.service-name` property as follows: + +```bash +$ java -Dinspectit.service-name="My Custom Service" -javaagent:/path/to/inspectit-ocelot-agent-2.1.1.jar -jar my-java-program.jar +``` + +### OS Environment Variables + +Similar to the Java System properties, inspectIT Ocelot will also consider all the available operating system environment variables. +Due to the relaxed bindings, you can use upper case format, which is recommended when using system environment variables. + +```bash +$ INSPECTIT_SERVICE_NAME="My Custom Service" java -javaagent:/path/to/inspectit-ocelot-agent-2.1.1.jar -jar my-java-program.jar +``` + +## Relaxed Bindings + +Note that due to the Spring-powered configuration approach, the inspectIT Ocelot agent uses Spring support for relaxed bindings. +This means that a property can be specified in different formats depending on the property source. +As suggested by Spring, the allowed formats are: + +| Property | Note | +| --- | --- | +| `inspectit.service-name` | Kebab-case, which is recommended for use in `.properties` and `.yml` files. | +| `inspectit.serviceName` | Standard camelCase syntax. | +| `inspectit.service_name` | Underscore notation (snake_case), which is an alternative format for use in `.properties` and `.yml` files. | +| `INSPECTIT_SERVICE_NAME` | UPPER_CASE format, which is recommended when using system environment variables. | + +The formats should be used in the following way, based on the type of property source: + +| Property Source | Format | +| --- | --- | +| System properties | Camel case, kebab case, or underscore notation. | +| Environment Variables | Upper case format with the underscore as the delimiter. | +| Property files (`.properties`) | Camel case, kebab case, or underscore notation. | +| YAML files (`.yaml`, `.yml`) | Camel case, kebab case, or underscore notation. | + +## Environment Information + +Each agent stores the following information about its runtime environment: + +| Property | Note | +| --- | --- | +| `inspectit.env.agent-dir` | Resolves to the path where the agent-jar is stored. | +| `inspectit.env.hostname` | The hostname where the agent is running. | +| `inspectit.env.pid` | The process id of the JVM process. | + +They are used to define the default behavior when writing the configuration persistence file and will be sent +as attributes to the configuration server when fetching the configuration. + +You can reference these properties within the configuration using e.g. `${inspectit.env.agent-dir}` +as shown in the default configuration for +[HTTP-based configuration](configuration/external-configuration-sources.md#http-based-configuration). +Referencing every other property follows the same schema. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/open-census-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/open-census-configuration.md new file mode 100644 index 0000000000..2dfe7793cc --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/open-census-configuration.md @@ -0,0 +1,35 @@ +--- +id: version-2.1.1-open-census-configuration +title: Using OpenCensus Library with inspectIT Ocelot +sidebar_label: OpenCensus Configuration +original_id: open-census-configuration +--- + +If you plan to use the OpenCensus library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenCensus instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenCensus as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 2.1.1 internally uses OpenCensus in version 0.28.3. Please adapt any OpenCensus dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opencensus + opencensus-api + 0.28.3 + + ``` + +2. Set the JVM property `inspectit.publishOpenCensusToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenCensusToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenCensus library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenCensus classes are then loaded by the bootstrap class loader. This ensures that OpenCensus implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenCensus classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenCensus classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenCensus instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/open-telemetry-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/open-telemetry-configuration.md new file mode 100644 index 0000000000..9ee398e212 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/configuration/open-telemetry-configuration.md @@ -0,0 +1,37 @@ +--- +id: version-2.1.1-open-telemetry-configuration +title: Using OpenTelemetry Library with inspectIT Ocelot +sidebar_label: OpenTelemetry Configuration +original_id: open-telemetry-configuration +--- + +> TODO: finish the configuration documentation when the migration to OTEL (with the OTEL bridge) is finished, i.e., when all exporters (including OTLP exporters) are supported + +If you plan to use the OpenTelemetry library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenTelemetry instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenTelemetry as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 2.1.1 internally uses OpenTelemetry in version {opentelemetry-version}. Please adapt any OpenTelemetry dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opentelemetry + opentelemetry-api + {opentelemetry-version} + + ``` + +2. Set the JVM property `inspectit.publishOpenTelemetryToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenTelemetryToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenTelemetry library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenTelemetry classes are then loaded by the bootstrap class loader. This ensures that OpenTelemetry implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenTelemetry classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenTelemetry classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenTelemetry instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/getting-started/installation.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/getting-started/installation.md new file mode 100644 index 0000000000..f21ed71cc3 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/getting-started/installation.md @@ -0,0 +1,157 @@ +--- +id: version-2.1.1-installation +title: Installation +original_id: installation +--- + +This section describes the installation details for the inspectIT Ocelot agent. + +## Supported Java Runtime Environments + +The inspectIT Ocelot supports Java Runtime Environments in version 1.8.0 and above. You will not be able to use the agent with the lower Java versions. +The agent works with different JRE distributions including Oracle, openJDK, Azul, etc. + +## Adding the Agent to a JVM + +The best option for using the inspectIT Ocelot is to include it to the start of the JVM by using the `-javaagent` command-line option. +This way the agent will be initialized before your application starts. + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-2.1.1.jar" -jar my-java-program.jar +``` + +> Some application servers have dedicated scripts that are used to launch the actual JVM that runs the application. In such cases, you must alter the start-up scripts in order to instrument the correct JVM. + +## Attaching the Agent to a Running JVM + +inspectIT Ocelot also supports attaching the agent to an already running JVM. +In such a scenario the collection of metrics and traces will start from the point of the attachment. + +The attaching can easily be done using the agent itself and executing the following command: + +```bash +$ java -jar inspectit-ocelot-agent-2.1.1.jar [] +``` + +In the following example, we are attaching the agent to the JVM process `1337` and passing some [additional arguments](configuration/configuration-sources.md#java-agent-arguments) to it: +```bash +$ java -jar inspectit-ocelot-agent-2.1.1.jar 1337 '{"inspectit":{"service-name":"my-agent"}}' +``` + +> The agent is internally using the utility [jattach](https://github.com/apangin/jattach) for attaching itself to a running JVM. + +In order to find the process ID of a running JVM, you can use the `jcmd` to list all the running Java processes on your machine: + +```bash +$ jcmd -l +``` + +### Attaching Using jattach + +Another way of attaching the agent to a running JVM is to use the utility [jattach](https://github.com/apangin/jattach): + +```bash +$ ./jattach.sh load instrument false /path/to/inspectit-ocelot-agent-2.1.1.jar='{"inspectit.service-name" : "MyService"}' +``` +In this example we're also passing [JSON arguments](configuration/configuration-sources.md#java-agent-arguments) to the agent in order to configure its service name. + +> Using the attach options has some limitations with respect to using the OpenCensus instrumentation library in combination with the inspectIT Ocelot agent. Please refer to [OpenCensus Configuration](configuration/open-census-configuration.md) section to understand these limitations. + +## Using the Agent With a Security Manager + +If a Java Security Manager is enabled, the agent needs to be granted additional permissions to work. +For this, add the following to your policy file: + +``` +grant codeBase "file:" { + permission java.security.AllPermission; +}; +``` + +The correct policy file location depends on different factors. +See the [official Java documentation](https://docs.oracle.com/en/java/javase/17/security/permissions-jdk1.html#GUID-789089CA-8557-4017-B8B0-6899AD3BA18D) for further information. + +## Using the Agent with Kubernetes + +There are several ways to use the agent in a Kubernetes cluster. +For example, you could integrate the agent directly into the application container images, but this requires customizing all images. + +Another possibility is that the agent is automatically injected into the application containers using an **operator** and attached to the JVM processes. +For this purpose, the [OpenTelemetry K8s Operator](https://github.com/open-telemetry/opentelemetry-operator) can be used, with which it is possible to automatically roll out the inspectIT Ocelot Java Agent. +It is still under development, so it is not feature-complete, but depending on your needs the current version could already provide everything needed. + +:::warning Up-to-dateness of the Documentation +Since the OpenTelemetry K8s operator is currently under heavy development, the installation steps described below **may be outdated**. +They may nevertheless be helpful in navigating the OpenTelemetry Operator installation documentation by showing you which parts you need. +::: + +### Installing the Operator + +Install the OpenTelemetry Operator as described in its [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). This includes the following steps: + +1. Install the [cert-manager](https://cert-manager.io/docs/installation/) in your cluster if you have not done it already. +2. Install the operator using the following command. Please note that this will install the latest version of it: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml + ``` + + By adjusting the URL to a different GitHub release, a specific version of the operator can be used: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/download/v{version}/opentelemetry-operator.yaml + ``` + +### Using the Operator + +1. Create an `Instrumentation` object as shown below. Set the `spec.java.image` to the inspectIT Ocelot agent container image you would like to use: + + :::note + Please note that only container images of the inspectIT Ocelot Agent starting from version `1.15.2` are compatible and work with the OpenTelemetry K8s Operator. + ::: + + ```yaml + apiVersion: opentelemetry.io/v1alpha1 + kind: Instrumentation + metadata: + name: my-instrumentation + spec: + java: + image: inspectit/inspectit-ocelot-agent:1.15.2 + ``` + +2. Annotate namespaces or containers that should receive the agent as described in the [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). The possible values for the annotation can be: + + - `true` - inject the `Instrumentation` resource from the namespace. + - `my-instrumentation` - name of Instrumentation CR instance. + - `false` - do not inject + + The following annotation can be used for this: + ```yaml + instrumentation.opentelemetry.io/inject-java: "true" + ``` + + :::warning Ensure Correct Referencing + If the operator cannot find the instrumentation object, e.g. because none was created or the name was written incorrectly in the annotation, the containers will not be started! + ::: + +3. (Optional) Add environment variables to the containers to configure the agent. See the following section for using [environment variables to configure](configuration/configuration-sources.md#os-environment-variables) the inspectIT Ocelot agent. + + For example, to set a service-name for the agent and connect it to a specific configuration-server, you could set the `INSPECTIT_CONFIG_HTTP_URL` and `INSPECTIT_SERVICE_NAME` environment variable like in the following: + + ```yaml + containers: + - image: my-app-image + name: my-app + env: + - name: INSPECTIT_CONFIG_HTTP_URL + value: http://my-ocelot-config-server:8090/api/v1/agent/configuration + - name: INSPECTIT_SERVICE_NAME + value: my-service-name + ``` + + You can also take a look at the [deployment file](https://github.com/inspectIT/trading-demo-application/blob/main/k8s/deployment.yaml) of the [trading demo application](https://github.com/inspectIT/trading-demo-application) where exactly this is set up. + +4. Start or restart the containers to trigger the injection and attachment of the agent. + + Currently, the operator **will not automatically restart running containers** in case changes are made to the `Instrumentation` objects. However, there are plans to provide the ability to restart containers in order to roll out changes of the configurable `Instrumentation` objects automatically (see [issue #553](https://github.com/open-telemetry/opentelemetry-operator/issues/553)). diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/getting-started/quick-start.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/getting-started/quick-start.md new file mode 100644 index 0000000000..f35ab9b1da --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.1.1/getting-started/quick-start.md @@ -0,0 +1,22 @@ +--- +id: version-2.1.1-quick-start +title: Quick Start +original_id: quick-start +--- + +You can find and download all released versions of inspectIT Ocelot in our [GitHub](https://github.com/inspectIT/inspectit-ocelot/releases) repository. +You can get the current version on the following link: + +```bash +$ wget https://github.com/inspectIT/inspectit-oce/releases/download/2.1.1/inspectit-ocelot-agent-2.1.1.jar +``` + +The best way to start using inspectIT Ocelot is to attach the Java agent when starting your Java program. +Use the `-javaagent` command-line option to reference the inspectIT Ocelot jar: + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-2.1.1.jar" -jar my-java-program.jar +``` + +The [Installation](installation.md) section further describes what options are available for installing the agent, as well as how you can attach the agent to an already started JVM. +In the [Configuration](configuration/configuration-sources.md) section you can find more details on how to configure the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/config-server/status-table-view.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/config-server/status-table-view.md new file mode 100644 index 0000000000..7e96c48a2f --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/config-server/status-table-view.md @@ -0,0 +1,20 @@ +--- +id: version-2.2.0-status-table-view +title: Status Table View Guide +sidebar_label: Agent Status Table View +original_id: status-table-view +--- + +The Status Table in the Agent Status page offers, in addition to displaying the most important agent information in the table, the possibility to retrieve additional information via different buttons. +Here is a short guide to help you navigate around the status table. + +![Status Table View](assets/status-table-view-ui.png) + +## Explanation of Highlighted Buttons + +| Button | Function | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| ![Status Table View](assets/service-states-btn.png)
**Service States** | Displays the services (e.g. Prometheus, Jaeger, Influx, Log-Preloading, Agent Command Service, ...) and their current state (`enabled`/`disabled`).
In the future, we plan to implement the functionality to enable/disable the services in this view. | +| ![Status Table View](assets/logs-btn.png)
**Agent Logs** | Displays the logs of the service if agent commands and log preloading are enabled. | +| ![Status Table View](assets/config-btn.png)
**Current Config** | Displays the current config in `yaml` format when the agent commands are enabled. | +| ![Status Table View](assets/download-archive-btn.png)
**Support Archive** | Downloads a support archive as a `.zip` file if the agent commands are enabled. The support archive contains logs (if log preloading is enabled), the current config, and environment details. | \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/configuration-sources.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/configuration-sources.md new file mode 100644 index 0000000000..1fbdec5d8e --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/configuration-sources.md @@ -0,0 +1,97 @@ +--- +id: version-2.2.0-configuration-sources +title: Configuration Sources +original_id: configuration-sources +--- + +inspectIT Ocelot tries to implement the zero-configuration approach but lets you externalize the configuration and influence every bit of its configuration if this is required. +Internally it uses the Spring-based `PropertySource` order to allow overriding of configuration values. +Configuration properties are considered in inspectIT Ocelot in the following order: + +1. [Java Agent Arguments](#java-agent-arguments) +1. [Java System Properties](#java-system-properties) +1. [OS environment Variables](#os-environment-variables) +1. External Configuration Sources: + * [File-based Configuration](configuration/external-configuration-sources.md#file-based-configuration) +1. inspectIT Ocelot Defaults + +When an invalid configuration is given to inspectIT on startup, the agent will use a fallback configuration. +In this fallback configuration, the agent is inactive with the exception of listening for configuration updates. + +When giving an invalid configuration through a runtime update to the agent, the agent will simply retain the previous configuration. + +## Available Configuration Sources + +### Java Agent Arguments + +You can pass a JSON object as string to the agent via its command line arguments. +For example, to override the service name used to identify your application reporting the performance data, +you can change the `inspectit.service-name` property as follows: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-2.2.0.jar="{ \"inspectit\": { \"service-name\": \"My Custom Service\" }}" -jar my-java-program.jar +``` + +Note that you have to escape the quotes within your JSON string. On linux you can just use the more readable single quotes notation: + +```bash +$ java -javaagent:/path/to/inspectit-ocelot-agent-2.2.0.jar='{ "inspectit": { "service-name": "My Custom Service" }}' -jar my-java-program.jar +``` + +### Java System Properties + +You can pass any configuration property as the Java System property to the Java command that you use to start your Java application. +Using this approach you can change the `inspectit.service-name` property as follows: + +```bash +$ java -Dinspectit.service-name="My Custom Service" -javaagent:/path/to/inspectit-ocelot-agent-2.2.0.jar -jar my-java-program.jar +``` + +### OS Environment Variables + +Similar to the Java System properties, inspectIT Ocelot will also consider all the available operating system environment variables. +Due to the relaxed bindings, you can use upper case format, which is recommended when using system environment variables. + +```bash +$ INSPECTIT_SERVICE_NAME="My Custom Service" java -javaagent:/path/to/inspectit-ocelot-agent-2.2.0.jar -jar my-java-program.jar +``` + +## Relaxed Bindings + +Note that due to the Spring-powered configuration approach, the inspectIT Ocelot agent uses Spring support for relaxed bindings. +This means that a property can be specified in different formats depending on the property source. +As suggested by Spring, the allowed formats are: + +| Property | Note | +| --- | --- | +| `inspectit.service-name` | Kebab-case, which is recommended for use in `.properties` and `.yml` files. | +| `inspectit.serviceName` | Standard camelCase syntax. | +| `inspectit.service_name` | Underscore notation (snake_case), which is an alternative format for use in `.properties` and `.yml` files. | +| `INSPECTIT_SERVICE_NAME` | UPPER_CASE format, which is recommended when using system environment variables. | + +The formats should be used in the following way, based on the type of property source: + +| Property Source | Format | +| --- | --- | +| System properties | Camel case, kebab case, or underscore notation. | +| Environment Variables | Upper case format with the underscore as the delimiter. | +| Property files (`.properties`) | Camel case, kebab case, or underscore notation. | +| YAML files (`.yaml`, `.yml`) | Camel case, kebab case, or underscore notation. | + +## Environment Information + +Each agent stores the following information about its runtime environment: + +| Property | Note | +| --- | --- | +| `inspectit.env.agent-dir` | Resolves to the path where the agent-jar is stored. | +| `inspectit.env.hostname` | The hostname where the agent is running. | +| `inspectit.env.pid` | The process id of the JVM process. | + +They are used to define the default behavior when writing the configuration persistence file and will be sent +as attributes to the configuration server when fetching the configuration. + +You can reference these properties within the configuration using e.g. `${inspectit.env.agent-dir}` +as shown in the default configuration for +[HTTP-based configuration](configuration/external-configuration-sources.md#http-based-configuration). +Referencing every other property follows the same schema. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/open-census-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/open-census-configuration.md new file mode 100644 index 0000000000..11e27815ae --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/open-census-configuration.md @@ -0,0 +1,35 @@ +--- +id: version-2.2.0-open-census-configuration +title: Using OpenCensus Library with inspectIT Ocelot +sidebar_label: OpenCensus Configuration +original_id: open-census-configuration +--- + +If you plan to use the OpenCensus library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenCensus instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenCensus as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 2.2.0 internally uses OpenCensus in version 0.28.3. Please adapt any OpenCensus dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opencensus + opencensus-api + 0.28.3 + + ``` + +2. Set the JVM property `inspectit.publishOpenCensusToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenCensusToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenCensus library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenCensus classes are then loaded by the bootstrap class loader. This ensures that OpenCensus implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenCensus classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenCensus classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenCensus instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/open-telemetry-configuration.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/open-telemetry-configuration.md new file mode 100644 index 0000000000..64312e7211 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/configuration/open-telemetry-configuration.md @@ -0,0 +1,37 @@ +--- +id: version-2.2.0-open-telemetry-configuration +title: Using OpenTelemetry Library with inspectIT Ocelot +sidebar_label: OpenTelemetry Configuration +original_id: open-telemetry-configuration +--- + +> TODO: finish the configuration documentation when the migration to OTEL (with the OTEL bridge) is finished, i.e., when all exporters (including OTLP exporters) are supported + +If you plan to use the OpenTelemetry library in an application which will be instrumented later on with inspectIT Ocelot, some special rules do apply. +Following these rules will make sure that there are no run-time problems in your application. +Furthermore, a correct configuration will make it possible to combine metrics and traces that you manually collect using the OpenTelemetry instrumentation library with the ones collected by the inspectIT Ocelot agent. + +1. Make sure you are using the same version of OpenTelemetry as inspectIT Ocelot. + + The inspectIT Ocelot agent in version 2.2.0 internally uses OpenTelemetry in version {opentelemetry-version}. Please adapt any OpenTelemetry dependency in your application to this version to avoid run-time conflicts. + ```XML + + io.opentelemetry + opentelemetry-api + {opentelemetry-version} + + ``` + +2. Set the JVM property `inspectit.publishOpenTelemetryToBootstrap` to `true`. + + ``` + -Dinspectit.publishOpenTelemetryToBootstrap=true + ``` + + Setting the above property to `true` tells inspectIT Ocelot that you plan to use the OpenTelemetry library in combination with the agent. Note that this property must be specified with this exact name. The flexibility offered for all other config options does not apply here. The inspectIT Ocelot agent will make sure that all OpenTelemetry classes are then loaded by the bootstrap class loader. This ensures that OpenTelemetry implementation is shared between your manual instrumentation and the agent instrumentation, making the combination of data possible. + +3. Add the agent to the start of a JVM + + In this scenario, it is required that you add the agent via [the `javaagent` JVM argument](getting-started/installation.md#adding-the-agent-to-a-jvm). If the agent is successfully added to the JVM, it will log that the OpenTelemetry classes pushed to the bootstrap classloader will be used. + + It is important to state that the agent will *not* publish the OpenTelemetry classes to the bootstrap classloader if it is attached during runtime – even if the previously mentioned JVM argument is set! In this case, metrics and traces of *manual OpenTelemetry instrumentations* will *not* be collected by the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/getting-started/installation.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/getting-started/installation.md new file mode 100644 index 0000000000..7b5ecb708b --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/getting-started/installation.md @@ -0,0 +1,157 @@ +--- +id: version-2.2.0-installation +title: Installation +original_id: installation +--- + +This section describes the installation details for the inspectIT Ocelot agent. + +## Supported Java Runtime Environments + +The inspectIT Ocelot supports Java Runtime Environments in version 1.8.0 and above. You will not be able to use the agent with the lower Java versions. +The agent works with different JRE distributions including Oracle, openJDK, Azul, etc. + +## Adding the Agent to a JVM + +The best option for using the inspectIT Ocelot is to include it to the start of the JVM by using the `-javaagent` command-line option. +This way the agent will be initialized before your application starts. + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-2.2.0.jar" -jar my-java-program.jar +``` + +> Some application servers have dedicated scripts that are used to launch the actual JVM that runs the application. In such cases, you must alter the start-up scripts in order to instrument the correct JVM. + +## Attaching the Agent to a Running JVM + +inspectIT Ocelot also supports attaching the agent to an already running JVM. +In such a scenario the collection of metrics and traces will start from the point of the attachment. + +The attaching can easily be done using the agent itself and executing the following command: + +```bash +$ java -jar inspectit-ocelot-agent-2.2.0.jar [] +``` + +In the following example, we are attaching the agent to the JVM process `1337` and passing some [additional arguments](configuration/configuration-sources.md#java-agent-arguments) to it: +```bash +$ java -jar inspectit-ocelot-agent-2.2.0.jar 1337 '{"inspectit":{"service-name":"my-agent"}}' +``` + +> The agent is internally using the utility [jattach](https://github.com/apangin/jattach) for attaching itself to a running JVM. + +In order to find the process ID of a running JVM, you can use the `jcmd` to list all the running Java processes on your machine: + +```bash +$ jcmd -l +``` + +### Attaching Using jattach + +Another way of attaching the agent to a running JVM is to use the utility [jattach](https://github.com/apangin/jattach): + +```bash +$ ./jattach.sh load instrument false /path/to/inspectit-ocelot-agent-2.2.0.jar='{"inspectit.service-name" : "MyService"}' +``` +In this example we're also passing [JSON arguments](configuration/configuration-sources.md#java-agent-arguments) to the agent in order to configure its service name. + +> Using the attach options has some limitations with respect to using the OpenCensus instrumentation library in combination with the inspectIT Ocelot agent. Please refer to [OpenCensus Configuration](configuration/open-census-configuration.md) section to understand these limitations. + +## Using the Agent With a Security Manager + +If a Java Security Manager is enabled, the agent needs to be granted additional permissions to work. +For this, add the following to your policy file: + +``` +grant codeBase "file:" { + permission java.security.AllPermission; +}; +``` + +The correct policy file location depends on different factors. +See the [official Java documentation](https://docs.oracle.com/en/java/javase/17/security/permissions-jdk1.html#GUID-789089CA-8557-4017-B8B0-6899AD3BA18D) for further information. + +## Using the Agent with Kubernetes + +There are several ways to use the agent in a Kubernetes cluster. +For example, you could integrate the agent directly into the application container images, but this requires customizing all images. + +Another possibility is that the agent is automatically injected into the application containers using an **operator** and attached to the JVM processes. +For this purpose, the [OpenTelemetry K8s Operator](https://github.com/open-telemetry/opentelemetry-operator) can be used, with which it is possible to automatically roll out the inspectIT Ocelot Java Agent. +It is still under development, so it is not feature-complete, but depending on your needs the current version could already provide everything needed. + +:::warning Up-to-dateness of the Documentation +Since the OpenTelemetry K8s operator is currently under heavy development, the installation steps described below **may be outdated**. +They may nevertheless be helpful in navigating the OpenTelemetry Operator installation documentation by showing you which parts you need. +::: + +### Installing the Operator + +Install the OpenTelemetry Operator as described in its [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). This includes the following steps: + +1. Install the [cert-manager](https://cert-manager.io/docs/installation/) in your cluster if you have not done it already. +2. Install the operator using the following command. Please note that this will install the latest version of it: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml + ``` + + By adjusting the URL to a different GitHub release, a specific version of the operator can be used: + + ```shell + kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/download/v{version}/opentelemetry-operator.yaml + ``` + +### Using the Operator + +1. Create an `Instrumentation` object as shown below. Set the `spec.java.image` to the inspectIT Ocelot agent container image you would like to use: + + :::note + Please note that only container images of the inspectIT Ocelot Agent starting from version `1.15.2` are compatible and work with the OpenTelemetry K8s Operator. + ::: + + ```yaml + apiVersion: opentelemetry.io/v1alpha1 + kind: Instrumentation + metadata: + name: my-instrumentation + spec: + java: + image: inspectit/inspectit-ocelot-agent:1.15.2 + ``` + +2. Annotate namespaces or containers that should receive the agent as described in the [official readme file](https://github.com/open-telemetry/opentelemetry-operator#getting-started). The possible values for the annotation can be: + + - `true` - inject the `Instrumentation` resource from the namespace. + - `my-instrumentation` - name of Instrumentation CR instance. + - `false` - do not inject + + The following annotation can be used for this: + ```yaml + instrumentation.opentelemetry.io/inject-java: "true" + ``` + + :::warning Ensure Correct Referencing + If the operator cannot find the instrumentation object, e.g. because none was created or the name was written incorrectly in the annotation, the containers will not be started! + ::: + +3. (Optional) Add environment variables to the containers to configure the agent. See the following section for using [environment variables to configure](configuration/configuration-sources.md#os-environment-variables) the inspectIT Ocelot agent. + + For example, to set a service-name for the agent and connect it to a specific configuration-server, you could set the `INSPECTIT_CONFIG_HTTP_URL` and `INSPECTIT_SERVICE_NAME` environment variable like in the following: + + ```yaml + containers: + - image: my-app-image + name: my-app + env: + - name: INSPECTIT_CONFIG_HTTP_URL + value: http://my-ocelot-config-server:8090/api/v1/agent/configuration + - name: INSPECTIT_SERVICE_NAME + value: my-service-name + ``` + + You can also take a look at the [deployment file](https://github.com/inspectIT/trading-demo-application/blob/main/k8s/deployment.yaml) of the [trading demo application](https://github.com/inspectIT/trading-demo-application) where exactly this is set up. + +4. Start or restart the containers to trigger the injection and attachment of the agent. + + Currently, the operator **will not automatically restart running containers** in case changes are made to the `Instrumentation` objects. However, there are plans to provide the ability to restart containers in order to roll out changes of the configurable `Instrumentation` objects automatically (see [issue #553](https://github.com/open-telemetry/opentelemetry-operator/issues/553)). diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/getting-started/quick-start.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/getting-started/quick-start.md new file mode 100644 index 0000000000..98e6438b7f --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/getting-started/quick-start.md @@ -0,0 +1,22 @@ +--- +id: version-2.2.0-quick-start +title: Quick Start +original_id: quick-start +--- + +You can find and download all released versions of inspectIT Ocelot in our [GitHub](https://github.com/inspectIT/inspectit-ocelot/releases) repository. +You can get the current version on the following link: + +```bash +$ wget https://github.com/inspectIT/inspectit-oce/releases/download/2.2.0/inspectit-ocelot-agent-2.2.0.jar +``` + +The best way to start using inspectIT Ocelot is to attach the Java agent when starting your Java program. +Use the `-javaagent` command-line option to reference the inspectIT Ocelot jar: + +```bash +$ java -javaagent:"/path/to/inspectit-ocelot-agent-2.2.0.jar" -jar my-java-program.jar +``` + +The [Installation](installation.md) section further describes what options are available for installing the agent, as well as how you can attach the agent to an already started JVM. +In the [Configuration](configuration/configuration-sources.md) section you can find more details on how to configure the inspectIT Ocelot agent. \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/instrumentation/process.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/instrumentation/process.md new file mode 100644 index 0000000000..b3cc22696b --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/instrumentation/process.md @@ -0,0 +1,65 @@ +--- +id: version-2.2.0-process +title: Instrumentation Process +original_id: process +--- + +The approach inspectIT Ocelot takes for instrumenting is fundamentally different from the approach of most other JVM instrumentation agents. +InspectIT Ocelot does *not* instrument classes when they are loaded, the instrumentation is performed purely asynchronous in the background. + +In this background task inspectIT Ocelot essentially looks at every loaded class and performs an instrumentation if required by the active configuration. Hereby, the agent manages the classes he has to analyze in a queue. This queue is processed in batches to ensure that no CPU resources are blocked if they are required by the instrumented application. The batching is configurable using the `internal` settings: + +```yaml +inspectit: + instrumentation: + # settings for fine-tuning the instrumentation process + internal: + # the time to pause between executing batches of class instrumentation updates + inter-batch-delay: 50ms + # defines how many classes are checked at once for updates of their configuration per batch + class-configuration-check-batch-size: 1000 + # defines the maximum number of classes which are instrumented per batch + class-retransform-batch-size: 10 + + # defines how often the agent should check if new classes have been defined. + new-class-discovery-interval: 10s + # defines how often the new class discovery is performed after a new class has been loaded + num-class-discovery-trials: 2 + + # defines whether orphan action classes are recycled or new classes should be injected instead + recyclingOldActionClasses: true +``` + +In addition, the size of the instrumentation queue can be used as an indicator for the instrumentation progress. +It is accessible via the [self-monitoring](metrics/self-monitoring.md) of the agent. + +InspectIT allows you to perform instrumentation by injecting custom code into your application. +If your JVM has a `SecurityManager` enabled, you might also want to control the `ProtectionDomain` of these injected classes. + +By default, inspectIT will use its own `ProtectionDomain` for injected classes. +Alternatively, you can make inspectIT to use the `ProtectionDomain` for which the action is being created using the following configuration: + +```yaml +inspectit: + instrumentation: + internal: + use-inspectit-protection-domain: false +``` + +## Synchronous instrumentation (BETA!) +:::caution +Enabling synchronous instrumentation in Java 8 environments will result in significant boot time performance degradation! +See See: JDK-7018422 +::: + +By default, all instrumentation is performed purely asynchronously in the background. There may be situations where this is not appropriate and a class must be instrumented directly at the first load, +e.g. in batch processes. + +InspectIT can be configured to instrumented classes on first class load by updating the following configuration: +```yaml +inspectit: + instrumentation: + internal: + async: false +``` + diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/metrics/metric-exporters.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/metrics/metric-exporters.md new file mode 100644 index 0000000000..ad35c90f68 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/metrics/metric-exporters.md @@ -0,0 +1,101 @@ +--- +id: version-2.2.0-metric-exporters +title: Metrics Exporters +original_id: metric-exporters +--- + +Metrics exporters are responsible for passing the recorded metrics to a metric storage. +They can implement a push approach where metrics are sent to a collector or a pull approach where metrics are scraped by an external system. + +If an exporter supports run-time updates it means that it can be enabled/disabled during the run-time or that any property related to the exporter can be changed. +This way you can, for example, change the endpoint where exporter pushes the metrics without a need to restart the application. +In order to use run-time updates, you must enable one of the [externalized configuration methods](configuration/external-configuration-sources) that support dynamic updates. + +inspectIT Ocelot currently supports the following metrics exporters: + +|Exporter |Supports run-time updates| Push / Pull |Enabled by default| +|---|---|---|---| +|[Logging Exporter (Metrics)](#logging-exporter-metrics) [[Homepage](https://github.com/open-telemetry/opentelemetry-java/blob/main/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/LoggingMetricExporter.java)]|Yes|Push|No| +|[Prometheus Exporter](#prometheus-exporter)|Yes|Pull|No| +|[InfluxDB Exporter](#influxdb-exporter)|Yes|Push|No| +|[OTLP Exporter (Metrics)](#otlp-exporter-metrics) [[Homepage](https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/otlp/metrics)]|Yes|Push|No| + +>**Important note**: Starting with version `2.0.0`, inspectIT Ocelot moved from OpenCensus to OpenTelemetry. As a result, the `OpenCensus Agent Exporter` is no longer supported. + +## Logging Exporter (Metrics) + +The Logging exporter exports the metrics to the system log. By default, the exporter is disabled. +The following properties are nested properties below the `inspectit.exporters.metrics.logging`: + +|Property |Default| Description +|---|---|---| +|`.enabled`| `DISABLED` |If `ENABLED` or `IF_CONFIGURED`, the inspectIT Ocelot agent will try to start the Logging metrics exporter. +|`.export-interval`|refers to `inspectit.metrics.frequency`|The export interval of the metrics. + +## Prometheus Exporter + +Prometheus exporter exposes the metrics in Prometheus format and is the default metrics exporter set up by inspectIT Ocelot. +When enabled, inspectIT starts a Prometheus HTTP server in parallel with your application. +The server is by default started on the port `8888` and metrics can then be accessed by visiting http://localhost:8888/metrics. + +The following properties are nested properties below the `inspectit.exporters.metrics.prometheus` property: + +|Property | Default | Description +|---|------------|---| +|`.enabled`| `DISABLED` |If `ENABLED` or `IF_CONFIGURED`, the inspectIT Ocelot agent will try to start the Prometheus metrics exporter and Prometheus HTTP server. +|`.host`| `0.0.0.0` |The hostname or network address to which the Prometheus HTTP server should bind. +|`.port`| `8888` |The port the Prometheus HTTP server should use. + + +> Don't forget to check [the official OpenTelemetry Prometheus exporter documentation](https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/prometheus). + +## InfluxDB Exporter +If enabled, metrics are pushed at a specified interval directly to a given InfluxDB v1.x instance. +To enable the InfluxDB Exporters, it is only required to specify the `url`. + +The InfluxDB exporter provides a special handling for counter and sum metrics which is enabled by default and can be disabled using the `counters-as-differences` option. +Usually, the absolute value of such counters is irrelevant when querying the data, instead you want to have the increase of it over a certain period of time. +With the `counters-as-differences` option enabled, counters are preprocessed before being exported. + +Instead of writing the absolute value of each counter into the InfluxDB, only the increase since the last export will be written. +In addition no value will be exported, if the counter has not changed since the last export. +This can greatly reduce the amount of data written into the InfluxDB, especially if the metrics are quite constant and won't change much. + +The following properties are nested properties below the `inspectit.exporters.metrics.influx` property: + +|Property | Default | Description| +|---|-----------------------------------------|---| +|`.enabled`| `IF_CONFIGURED` |If `ENABLED` or `IF_CONFIGURED`, the agent will try to start the Influx exporter. If the url is not set, it will log a warning if set to `ENABLED` but fail silently if set to `IF_CONFIGURED`.| +|`.endpoint`| `null` |The HTTP endpoint of the InfluxDB, e.g. `http://localhost:8086`.| +|`.user`| `null` | The user to use for connecting to the InfluxDB, can not be empty.| +|`.password`| `null` |The password to use for connecting to the InfluxDB, can be not be empty.| +|`.database`| `inspectit` | The InfluxDB database to which the metrics are pushed.| +|`.retention-policy`| `autogen` | The retention policy of the database to use for writing metrics.| +|`.create-database`| `true` | If enabled, the database defined by the `database` property is automatically created on startup with an `autogen` retention policy if it does not exist yet.| +|`.export-interval`| refers to `inspectit.metrics.frequency` |Defines how often metrics are pushed to the InfluxDB.| +|`.counters-as-differences`| `true` |Defines whether counters are exported using their absolute value or as the increase between exports| +|`buffer-size`| `40` | In case the InfluxDB is not reachable, failed writes will be buffered and written on the next export. This value defines the maximum number of batches to buffer.| + +## OTLP Exporter (Metrics) + +The OpenTelemetry Protocol (OTLP) exporters export the metrics to the desired endpoint at a specified interval. +To enable the OTLP exporters, it is only required to specify the `url`. + +The following properties are nested properties below the `inspectit.exporters.metrics.otlp-grpc` property: + +| Property | Default | Description | +|-------------------------|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `.enabled` | `IF_CONFIGURED` | If `ENABLED` or `IF_CONFIGURED`, the inspectIT Ocelot agent will try to start the OTLP gRPC metrics exporter. | +| `.endpoint` | `null` | Target to which the exporter is going to send metrics, e.g. `http://localhost:4317` | +| `.protocol` | `null` | The transport protocol, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported protocols are `grpc` and `http/protobuf`. | +| `.preferredTemporality` | `CUMULATIVE` | The preferred output aggregation temporality, see [OTEL documentation](https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure/README.md). Supported values are `CUMULATIVE` and `DELTA`.| +| `.headers` | `null` | Key-value pairs to be used as headers associated with gRPC or HTTP requests, see [OTEL documentation](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md).| +| `.compression` | `NONE` | The compression method, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported compression methods are `gzip` and `none`. | +| `.timeout` | `10s` | Maximum time the OTLP exporter will wait for each batch export, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). | + +To make inspectIT Ocelot push the metris via OTLP to, e.g. an OpenTelemetry Collector running on the same machine as the agent, the following JVM property can be used: + +``` +-Dinspectit.exporters.metrics.otlp.endpoint=http://127.0.0.1:4317 +-Dinspectit.exporters.metrics.otlp.protocol=grpc +``` \ No newline at end of file diff --git a/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/tracing/trace-exporters.md b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/tracing/trace-exporters.md new file mode 100644 index 0000000000..eb78743d21 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_docs/version-2.2.0/tracing/trace-exporters.md @@ -0,0 +1,102 @@ +--- +id: version-2.2.0-trace-exporters +title: Trace Exporters +original_id: trace-exporters +--- + +Tracing exporters are responsible for passing the recorded tracing data to a corresponding storage. + +inspectIT Ocelot currently supports the following trace exporters: + +* [Logging (Traces)](#logging-exporter-traces) [[Homepage](https://github.com/open-telemetry/opentelemetry-java/blob/main/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/LoggingSpanExporter.java)] +* [Zipkin](#zipkin-exporter) [[Homepage](https://zipkin.io/)] +* [Jaeger](#jaeger-exporter) [[Homepage](https://www.jaegertracing.io/)] +* [OTLP (Traces)](#otlp-exporter-traces) [[Homepage](https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/otlp/trace)] + +>**Important note**: Starting with version `2.0.0`, inspectIT Ocelot moved from OpenCensus to OpenTelemetry. As a result, the `OpenCensus Agent Exporter` is no longer supported and has been removed. +> Additionally, with OpenTelemetry, inspectIT Ocelot does not support the `service-name` property for individual exporter services anymore. Thus, we removed the `service-name` property from the Jaeger and Zipkin exporter. This property can now be set for all trace exporters in `inspectit.exporters.tracing.service-name`. + +## General Trace Exporter Settings + +These settings apply to all trace exporters and can set below the `inspectit.exporters.tracing` property. + +| Property | Default | Description | +|-----------------|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `.service-name` | `${inspectit.service-name}` | The value of this property will be used to identify the service a trace came from. Please note that changes of this property only take effect after restarting the agent. | + +## Logging Exporter (Traces) + +The Logging exporter exports traces to the system log. By default, the Logging exporter is disabled. +The following properties are nested properties below the `inspectit.exporters.tracing.logging` property: + +| Property | Default | Description | +| ---------- | ---------- | ------------------------------------------------------------ | +| `.enabled` | `DISABLED` | If `ENABLED` or `IF_CONFIGURED`, the agent will try to start the Logging trace exporter. | + +To make inspectIT Ocelot write the spans to the system log, the following JVM property can be used: + +`-Dinspectit.exporters.tracing.logging.enabled=ENABLED` + +## Zipkin Exporter + +The Zipkin exporter exports Traces in Zipkin v2 format to a Zipkin server or other compatible servers. + +By default, the Zipkin exporter is enabled but the URL needed for the exporter to actually start is set to `null`. + +The following properties are nested properties below the `inspectit.exporters.tracing.zipkin` property: + +|Property |Default| Description| +|---|---|---| +|`.enabled`|`IF_CONFIGURED`|If `ENABLED` or `IF_CONFIGURED`, the agent will try to start the Zipkin exporter. If the url is not set, it will log a warning if set to `ENABLED` but fail silently if set to `IF_CONFIGURED`.| +|`.endpoint`|`null`|v2 URL under which the ZipKin server can be accessed (e.g. http://127.0.0.1:9411/api/v2/spans).| + +To make inspectIT Ocelot push the spans to a Zipkin server running on the same machine as the agent, the following JVM property can be used: + +``` +-Dinspectit.exporters.tracing.zipkin.url=http://127.0.0.1:9411/api/v2/spans +``` + +## Jaeger Exporter + +The Jaeger exports works exactly the same way as the [Zipkin Exporter](#zipkin-exporter). InspectIT Ocelot supports thrift and gRPC Jaeger exporter. + +By default, the Jaeger exporters are enabled but the URL/gRPC endpoint needed for the exporter to actually start is set to `null`. + +### Jaeger Thrift Exporter + +The following properties are nested properties below the `inspectit.exporters.tracing.jaeger` property: + +|Property | Default | Description| +|---|-----------------|---| +|`.enabled`| `IF_CONFIGURED` |If `ENABLED` or `IF_CONFIGURED`, the agent will try to start the Jaeger exporter. If the url is not set, it will log a warning if set to `ENABLED` but fail silently if set to `IF_CONFIGURED`.| +|`.endpoint`| `null` |URL endpoint under which the Jaeger server can be accessed (e.g. http://127.0.0.1:14268/api/traces).| +|`.protocol`| `null` |The transport protocol. Supported protocols are `grpc` and `http/thrift`.| + +To make inspectIT Ocelot push the spans to a Jaeger server running on the same machine as the agent, the following JVM property can be used: + +``` +-Dinspectit.exporters.tracing.jaeger.endpoint=http://127.0.0.1:14268/api/traces +``` + +## OTLP Exporter (Traces) + +The OpenTelemetry Protocol (OTLP) exporters export the Traces in OTLP to the desired endpoint at a specified interval. +By default, the OTLP exporters are enabled but the URL endpoint needed for the exporter to actually start is set to `null`. + +The following properties are nested properties below the `inspectit.exporters.tracing.otlp` property: + +| Property | Default | Description | +|----------------|-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `.enabled` | `IF_CONFIGURED` | If `ENABLED` or `IF_CONFIGURED`, the inspectIT Ocelot agent will try to start the OTLP gRPC trace exporter. | +| `.endpoint` | `null` | Target to which the exporter is going to send traces, e.g. `http://localhost:4317` | +| `.protocol` | `null` | The transport protocol, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported protocols are `grpc` and `http/protobuf`. | +| `.headers` | `null` | Key-value pairs to be used as headers associated with gRPC or HTTP requests, see [OTEL documentation](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md). | +| `.compression` | `NONE` | The compression method, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). Supported compression methods are `gzip` and `none`. | +| `.timeout` | `10s` | Maximum time the OTLP exporter will wait for each batch export, see [OTEL documentation](https://opentelemetry.io/docs/reference/specification/protocol/exporter/). | + +To make inspectIT Ocelot push the spans via OTLP to, e.g. an OpenTelemetry Collector running on the same machine as the agent, the following JVM property can be used: + +``` +-Dinspectit.exporters.tracing.otlp.endpoint=http://127.0.0.1:4317 +-Dinspectit.exporters.tracing.otlp.protocol=grpc +``` diff --git a/inspectit-ocelot-documentation/website/versioned_sidebars/version-2.1.0-sidebars.json b/inspectit-ocelot-documentation/website/versioned_sidebars/version-2.1.0-sidebars.json new file mode 100644 index 0000000000..1ef5059ed5 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_sidebars/version-2.1.0-sidebars.json @@ -0,0 +1,63 @@ +{ + "version-2.1.0-docs": { + "Getting Started": [ + "version-2.1.0-doc1", + "version-2.1.0-getting-started/quick-start", + "version-2.1.0-getting-started/docker-examples", + "version-2.1.0-getting-started/installation" + ], + "Configuration": [ + "version-2.1.0-configuration/configuration-sources", + "version-2.1.0-configuration/external-configuration-sources", + "version-2.1.0-configuration/logging-configuration", + "version-2.1.0-configuration/open-census-configuration", + "version-2.1.0-configuration/plugin-configuration", + "version-2.1.0-configuration/agent-command-configuration" + ], + "Metrics": [ + "version-2.1.0-metrics/metrics", + "version-2.1.0-metrics/metric-recorders", + "version-2.1.0-metrics/metric-exporters", + "version-2.1.0-metrics/common-tags", + "version-2.1.0-metrics/custom-metrics", + "version-2.1.0-metrics/self-monitoring" + ], + "Tracing": [ + "version-2.1.0-tracing/tracing", + "version-2.1.0-tracing/trace-exporters", + "version-2.1.0-tracing/log-correlation", + "version-2.1.0-tracing/privacy", + "version-2.1.0-tracing/tracing-self-monitoring" + ], + "Instrumentation": [ + "version-2.1.0-instrumentation/instrumentation", + "version-2.1.0-instrumentation/scopes", + "version-2.1.0-instrumentation/rules", + "version-2.1.0-instrumentation/code-style", + "version-2.1.0-instrumentation/special-sensors", + "version-2.1.0-instrumentation/process" + ], + "End User Monitoring": [ + "version-2.1.0-enduser-monitoring/enduser-monitoring-server", + "version-2.1.0-enduser-monitoring/eum-server-setup", + "version-2.1.0-enduser-monitoring/eum-server-configuration", + "version-2.1.0-enduser-monitoring/install-eum-agent" + ], + "Configuration Server": [ + "version-2.1.0-config-server/overview", + "version-2.1.0-config-server/cs-configuration", + "version-2.1.0-config-server/managing-configurations", + "version-2.1.0-config-server/configuration-files-staging", + "version-2.1.0-config-server/agent-mappings", + "version-2.1.0-config-server/scope-wizard", + "version-2.1.0-config-server/class-browser", + "version-2.1.0-config-server/user-authentication", + "version-2.1.0-config-server/config-docs", + "version-2.1.0-config-server/log-config", + "version-2.1.0-config-server/syntax-highlighting" + ], + "Breaking Changes": [ + "version-2.1.0-breaking-changes/Breaking Changes" + ] + } +} diff --git a/inspectit-ocelot-documentation/website/versioned_sidebars/version-2.2.0-sidebars.json b/inspectit-ocelot-documentation/website/versioned_sidebars/version-2.2.0-sidebars.json new file mode 100644 index 0000000000..122799bbc3 --- /dev/null +++ b/inspectit-ocelot-documentation/website/versioned_sidebars/version-2.2.0-sidebars.json @@ -0,0 +1,64 @@ +{ + "version-2.2.0-docs": { + "Getting Started": [ + "version-2.2.0-doc1", + "version-2.2.0-getting-started/quick-start", + "version-2.2.0-getting-started/docker-examples", + "version-2.2.0-getting-started/installation" + ], + "Configuration": [ + "version-2.2.0-configuration/configuration-sources", + "version-2.2.0-configuration/external-configuration-sources", + "version-2.2.0-configuration/logging-configuration", + "version-2.2.0-configuration/open-census-configuration", + "version-2.2.0-configuration/plugin-configuration", + "version-2.2.0-configuration/agent-command-configuration" + ], + "Metrics": [ + "version-2.2.0-metrics/metrics", + "version-2.2.0-metrics/metric-recorders", + "version-2.2.0-metrics/metric-exporters", + "version-2.2.0-metrics/common-tags", + "version-2.2.0-metrics/custom-metrics", + "version-2.2.0-metrics/self-monitoring" + ], + "Tracing": [ + "version-2.2.0-tracing/tracing", + "version-2.2.0-tracing/trace-exporters", + "version-2.2.0-tracing/log-correlation", + "version-2.2.0-tracing/privacy", + "version-2.2.0-tracing/tracing-self-monitoring" + ], + "Instrumentation": [ + "version-2.2.0-instrumentation/instrumentation", + "version-2.2.0-instrumentation/scopes", + "version-2.2.0-instrumentation/rules", + "version-2.2.0-instrumentation/code-style", + "version-2.2.0-instrumentation/special-sensors", + "version-2.2.0-instrumentation/process" + ], + "End User Monitoring": [ + "version-2.2.0-enduser-monitoring/enduser-monitoring-server", + "version-2.2.0-enduser-monitoring/eum-server-setup", + "version-2.2.0-enduser-monitoring/eum-server-configuration", + "version-2.2.0-enduser-monitoring/install-eum-agent" + ], + "Configuration Server": [ + "version-2.2.0-config-server/overview", + "version-2.2.0-config-server/cs-configuration", + "version-2.2.0-config-server/managing-configurations", + "version-2.2.0-config-server/configuration-files-staging", + "version-2.2.0-config-server/agent-mappings", + "version-2.2.0-config-server/scope-wizard", + "version-2.2.0-config-server/class-browser", + "version-2.2.0-config-server/user-authentication", + "version-2.2.0-config-server/config-docs", + "version-2.2.0-config-server/log-config", + "version-2.2.0-config-server/syntax-highlighting", + "version-2.2.0-config-server/status-table-view" + ], + "Breaking Changes": [ + "version-2.2.0-breaking-changes/Breaking Changes" + ] + } +} diff --git a/inspectit-ocelot-documentation/website/versions.json b/inspectit-ocelot-documentation/website/versions.json index 16823e30ea..2aac903b8c 100644 --- a/inspectit-ocelot-documentation/website/versions.json +++ b/inspectit-ocelot-documentation/website/versions.json @@ -1,4 +1,10 @@ [ + "1.17.0", + "2.2.0", + "2.1.1", + "1.16.1", + "2.1.0", + "2.0.3", "2.0.2", "2.0.1", "2.0.0", diff --git a/inspectit-ocelot-sdk/build.gradle b/inspectit-ocelot-sdk/build.gradle index f7186d0810..df29d91f2c 100644 --- a/inspectit-ocelot-sdk/build.gradle +++ b/inspectit-ocelot-sdk/build.gradle @@ -7,8 +7,8 @@ repositories { } group = 'rocks.inspectit.ocelot' -sourceCompatibility = 1.8 - +sourceCompatibility = 1.8 // Java version compatibility to use when compiling Java source. +targetCompatibility = 1.8 // Java version to generate classes for. dependencies { implementation project(':inspectit-ocelot-config') implementation 'org.slf4j:slf4j-api:1.7.25' From 10db494e6735f85a645af75219f2a90ba9b16685 Mon Sep 17 00:00:00 2001 From: Dimi-Ma Date: Mon, 13 Feb 2023 08:14:25 +0100 Subject: [PATCH 04/21] Refactored TagGuard, Refactored HealthStateMonitoring, Write Tests, Fixed Bugs, improved UI for HeathState, Added Documentation --- .../views/dialogs/DownloadDialogue.js | 15 +- .../components/views/status/StatusTable.js | 8 +- .../src/components/views/status/StatusView.js | 23 ++- .../dialogs/AgentHealthStateDialogue.js | 5 +- .../src/lib/axios-api.js | 2 +- .../agentstatus/AgentStatusManager.java | 6 +- .../src/main/resources/application.yml | 1 + .../model/metrics/TagGuardSettings.java | 20 +++ .../definition/MetricDefinitionSettings.java | 4 +- .../ocelot/config/default/basics.yml | 2 + .../core/metrics/MeasureTagValueGuard.java | 86 ++++++--- .../selfmonitoring/AgentHealthManager.java | 83 ++------- .../selfmonitoring/logs/LogHealthMonitor.java | 14 +- .../metrics/MeasureTagValueGuardTest.java | 97 +++++++++-- .../AgentHealthManagerTest.java | 163 ------------------ .../MetricWritingHealthEventListenerTest.java | 58 +++++++ .../logs/LogHealthMonitorTest.java | 150 +++------------- 17 files changed, 307 insertions(+), 430 deletions(-) delete mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListenerTest.java diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/views/dialogs/DownloadDialogue.js b/components/inspectit-ocelot-configurationserver-ui/src/components/views/dialogs/DownloadDialogue.js index ca90528d67..6713315e6b 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/views/dialogs/DownloadDialogue.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/views/dialogs/DownloadDialogue.js @@ -10,7 +10,7 @@ import { ContentTypeMapper } from '../mappings/ContentTypeMapper'; /** * Dialog that shows the given content, applying syntax highlighting if available, and offering a download option */ -const DownloadDialogue = ({ visible, onHide, error, loading, contentValue, contentType, contextName }) => { +const DownloadDialogue = ({ visible, onHide, error, loading, contentValue, contentType, contextName, isDownloadDialogFooterHidden, onCancel }) => { const dialogueSettings = ContentTypeMapper(contentType, contextName); const downloadFilename = @@ -37,6 +37,11 @@ const DownloadDialogue = ({ visible, onHide, error, loading, contentValue, conte return ( <> +

+
} > @@ -86,6 +91,10 @@ DownloadDialogue.propTypes = { contentType: PropTypes.string, /** The name of the data's context. E.g. the agent whose logs are being shown.*/ contextName: PropTypes.string, + /** Whether the cancel Button is disabled */ + disableDownloadCancelButton: PropTypes.bool, + /** Callback on dialog cancel */ + onCancel: PropTypes.func, }; DownloadDialogue.defaultProps = { diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusTable.js b/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusTable.js index 40e3be76fe..79db3562b8 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusTable.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/views/status/StatusTable.js @@ -351,9 +351,11 @@ class StatusTable extends React.Component { `} {health ? ( -
onShowHealthStateDialog(agentId, healthState)}> - - {healthInfo} +
+
onShowHealthStateDialog(agentId, healthState)}> + + {healthInfo} +
- {source}: {message} + {source}: {message}
diff --git a/components/inspectit-ocelot-configurationserver-ui/src/lib/axios-api.js b/components/inspectit-ocelot-configurationserver-ui/src/lib/axios-api.js index 0bff230596..3b4830d162 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/lib/axios-api.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/lib/axios-api.js @@ -18,7 +18,7 @@ const axiosBearer = axios.create(commonConfiguration); // Request Interceptors /** - * Ensures requres are authenticated using the bearer token. + * Ensures requests are authenticated using the bearer token. */ axiosBearer.interceptors.request.use( function (config) { diff --git a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatusManager.java b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatusManager.java index 4314ccc470..259ffeea81 100644 --- a/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatusManager.java +++ b/components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/agentstatus/AgentStatusManager.java @@ -100,11 +100,11 @@ public void notifyAgentConfigurationFetched(Map agentAttributes, attributesToAgentStatusCache.put(statusKey, agentStatus); } - private void logHealthIfChanged(Object statusKey, AgentHealthState agentHealth) { + private void logHealthIfChanged(Object statusKey, AgentHealthState agentHealthState) { AgentStatus lastStatus = attributesToAgentStatusCache.getIfPresent(statusKey); - if (lastStatus == null || lastStatus.getHealthState().getHealth() != agentHealth.getHealth()) { - log.info("Health of agent {} changed to {}.", statusKey, agentHealth); + if (lastStatus == null || lastStatus.getHealthState().getHealth() != agentHealthState.getHealth()) { + log.info("Health of agent {} changed to {}.", statusKey, agentHealthState); } } diff --git a/components/inspectit-ocelot-configurationserver/src/main/resources/application.yml b/components/inspectit-ocelot-configurationserver/src/main/resources/application.yml index 7e0846f247..6d6c3e463f 100644 --- a/components/inspectit-ocelot-configurationserver/src/main/resources/application.yml +++ b/components/inspectit-ocelot-configurationserver/src/main/resources/application.yml @@ -22,6 +22,7 @@ spring: # server properties - see https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#server-properties server: port: 8090 + max-http-header-size: 1MB inspectit-config-server: # the directory which is used as working directory diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java index e0ce32cce6..a5eed279f2 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java @@ -4,7 +4,11 @@ import lombok.NoArgsConstructor; import rocks.inspectit.ocelot.config.validation.AdditionalValidations; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; import java.time.Duration; +import java.util.Collections; +import java.util.Map; @Data @NoArgsConstructor @@ -24,4 +28,20 @@ public class TagGuardSettings { private String overflowReplacement; + private boolean enabled; + + /** + * Default max values per tag for all measures that are not specified in {@link #maxValuesPerTagByMeasure} or {@link rocks.inspectit.ocelot.config.model.metrics.definition.MetricDefinitionSettings#maxValuesPerTag}. + */ + private int maxValuesPerTag; + + /** + * Map containing max values per tag by Measure, e.g., {{'method_duration': 1337}} + *
max-values-per-tag-by-measure: + * - method_duration: 1337
+ * - http_in_responestime: 2000 + */ + @NotNull + private Map maxValuesPerTagByMeasure = Collections.emptyMap(); + } diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java index 7f740bbf85..e7e27d0129 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/definition/MetricDefinitionSettings.java @@ -36,10 +36,8 @@ public enum MeasureType { @NotBlank private String unit; - //TODO Make this defaultvalue higher - @Min(1) @Builder.Default - private int tagValueLimit = 1; + private int maxValuesPerTag = -1; @NotNull @Builder.Default diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml index 708f1da881..6d958afb04 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml @@ -77,6 +77,8 @@ inspectit: enabled: true tag-guard: + enabled: true + max-values-per-tag: 1000 schedule-delay: 30s database-file : ${inspectit.env.agent-dir}/${inspectit.service-name}/tag-guard-database.json overflow-replacement: "TAG_LIMIT_EXCEEDED" diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java index 7ad93f40dc..b6d3e1721a 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Maps; import io.opencensus.tags.TagContext; import io.opencensus.tags.TagContextBuilder; @@ -16,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.config.model.InspectitConfig; +import rocks.inspectit.ocelot.config.model.metrics.TagGuardSettings; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction; @@ -62,7 +65,7 @@ public class MeasureTagValueGuard { private volatile boolean isShuttingDown = false; - private Map> blockedTagKeysByMeasure = Maps.newHashMap(); + private final Map> blockedTagKeysByMeasure = Maps.newHashMap(); private Set latestTags = Collections.synchronizedSet(new HashSet<>()); @@ -70,13 +73,16 @@ public class MeasureTagValueGuard { @PostConstruct protected void init() { - fileReaderWriter = new PersistedTagsReaderWriter(env.getCurrentConfig() - .getMetrics() - .getTagGuard() - .getDatabaseFile(), new ObjectMapper()); + TagGuardSettings tagGuardSettings = env.getCurrentConfig().getMetrics().getTagGuard(); + if (!tagGuardSettings.isEnabled()) { + return; + } + fileReaderWriter = new PersistedTagsReaderWriter(tagGuardSettings.getDatabaseFile(), new ObjectMapper()); blockTagValuesTask.run(); scheduleTagGuardJob(); + + log.info(String.format("TagValueGuard started with scheduleDelay %s and database file %s", tagGuardSettings.getScheduleDelay(), tagGuardSettings.getDatabaseFile())); } private void scheduleTagGuardJob() { @@ -86,12 +92,19 @@ private void scheduleTagGuardJob() { @PreDestroy protected void stop() { + if (!env.getCurrentConfig().getMetrics().getTagGuard().isEnabled()) { + return; + } + isShuttingDown = true; blockTagValuesFuture.cancel(true); } Runnable blockTagValuesTask = () -> { + if (!env.getCurrentConfig().getMetrics().getTagGuard().isEnabled()) { + return; + } Set copy = latestTags; latestTags = Collections.synchronizedSet(new HashSet<>()); @@ -101,16 +114,13 @@ protected void stop() { copy.forEach(t -> { String measureName = t.getMeasureName(); Map newTags = t.getTags(); - int tagValueLimit = env.getCurrentConfig() - .getMetrics() - .getDefinitions() - .get(measureName) - .getTagValueLimit(); + + int maxValuesPerTag = getMaxValuesPerTag(measureName, env.getCurrentConfig()); Map> tagValuesByTagKey = availableTagsByMeasure.computeIfAbsent(measureName, k -> Maps.newHashMap()); newTags.forEach((tagKey, tagValue) -> { Set tagValues = tagValuesByTagKey.computeIfAbsent(tagKey, (x) -> new HashSet<>()); - if (tagValues.size() > tagValueLimit) { + if (tagValues.size() > maxValuesPerTag) { blockedTagKeysByMeasure.computeIfAbsent(tagKey, blocked -> Maps.newHashMap()) .putIfAbsent(tagKey, true); agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, tagKey)); @@ -129,11 +139,35 @@ protected void stop() { }; + /** + * Gets the max value per tag for the given measure by hierarchically extracting {@link rocks.inspectit.ocelot.config.model.metrics.definition.MetricDefinitionSettings#maxValuesPerTag} (prio 1), {@link TagGuardSettings#maxValuesPerTagByMeasure} (prio 2) and {@link TagGuardSettings#maxValuesPerTag} (default). + * + * @param measureName + * + * @return + */ + @VisibleForTesting + int getMaxValuesPerTag(String measureName, InspectitConfig config) { + int maxValuesPerTag = config.getMetrics().getDefinitions().get(measureName).getMaxValuesPerTag(); + + if (maxValuesPerTag > 0) { + return maxValuesPerTag; + } + + Map maxValuesPerTagPerMeasuresMap = config.getMetrics() + .getTagGuard() + .getMaxValuesPerTagByMeasure(); + return maxValuesPerTagPerMeasuresMap.getOrDefault(measureName, config.getMetrics() + .getTagGuard() + .getMaxValuesPerTag()); + } + public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAccessor metricAccessor) { Map tags = Maps.newHashMap(); String measureName = metricAccessor.getName(); InspectitContextImpl inspectitContext = context.getInspectitContext(); - Map blockedTageKeys = blockedTagKeysByMeasure.getOrDefault(measureName, Maps.newHashMap()); + Map blockedTagKeys = blockedTagKeysByMeasure.getOrDefault(measureName, Maps.newHashMap()); + TagGuardSettings tagGuardSettings = env.getCurrentConfig().getMetrics().getTagGuard(); // first common tags to allow to overwrite by constant or data tags commonTagsManager.getCommonTagKeys().forEach(commonTagKey -> { @@ -143,25 +177,24 @@ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAcce // then constant tags to allow to overwrite by data metricAccessor.getConstantTags().forEach((key, value) -> { - if (!blockedTageKeys.containsKey(key)) { - tags.put(key, TagUtils.createTagValueAsString(key, value)); - } else { + if (tagGuardSettings.isEnabled() && blockedTagKeys.containsKey(key)) { String overflowReplacement = env.getCurrentConfig().getMetrics().getTagGuard().getOverflowReplacement(); tags.put(key, TagUtils.createTagValueAsString(key, overflowReplacement)); - + } else { + tags.put(key, TagUtils.createTagValueAsString(key, value)); } }); // go over data tags and match the value to the key from the contextTags (if available) - metricAccessor.getDataTagAccessors().forEach((key, accessor) -> { - if (!blockedTageKeys.containsKey(key)) { - Optional.ofNullable(accessor.get(context)) - .ifPresent(tagValue -> tags.put(key, TagUtils.createTagValueAsString(key, tagValue.toString()))); - } else { - String overflowReplacement = env.getCurrentConfig().getMetrics().getTagGuard().getOverflowReplacement(); - tags.put(key, TagUtils.createTagValueAsString(key, overflowReplacement)); - } - }); + metricAccessor.getDataTagAccessors().forEach((key, accessor) -> { + if (tagGuardSettings.isEnabled() && blockedTagKeys.containsKey(key)) { + String overflowReplacement = env.getCurrentConfig().getMetrics().getTagGuard().getOverflowReplacement(); + tags.put(key, TagUtils.createTagValueAsString(key, overflowReplacement)); + } else { + Optional.ofNullable(accessor.get(context)) + .ifPresent(tagValue -> tags.put(key, TagUtils.createTagValueAsString(key, tagValue.toString()))); + } + }); TagContextBuilder tagContextBuilder = Tags.getTagger().emptyBuilder(); tags.forEach((key, value) -> tagContextBuilder.putLocal(TagKey.create(key), TagUtils.createTagValue(key, value))); @@ -198,7 +231,8 @@ public Map>> read() { if (Files.exists(path)) { try { byte[] content = Files.readAllBytes(path); - @SuppressWarnings("unchecked") Map>> tags = mapper.readValue(content, new TypeReference>>>() {}); + @SuppressWarnings("unchecked") Map>> tags = mapper.readValue(content, new TypeReference>>>() { + }); return tags; } catch (Exception e) { log.error("Error loading tag value database from persistence file '{}'", fileName, e); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java index c133290405..ebae45667b 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java @@ -1,6 +1,5 @@ package rocks.inspectit.ocelot.core.selfmonitoring; -import com.google.common.annotations.VisibleForTesting; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; @@ -11,15 +10,12 @@ import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; import rocks.inspectit.ocelot.core.utils.RingBuffer; -import javax.annotation.PostConstruct; import java.time.Duration; import java.time.LocalDateTime; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; /** * Manages the {@link AgentHealth} and publishes {@link AgentHealthChangedEvent}s when it changes. @@ -31,8 +27,6 @@ public class AgentHealthManager { private final ApplicationContext ctx; - private final ScheduledExecutorService executor; - /** * Map of {@code eventClass -> agentHealth}, whereas the {@code agentHealth} is reset whenever an event of type * {@code eventClass} occurs (see {@link #onInvalidationEvent(Object)}. @@ -52,45 +46,38 @@ public class AgentHealthManager { private final RingBuffer healthIncidentBuffer = new RingBuffer<>(10); //TODO make this configurable - @PostConstruct - @VisibleForTesting - void startHealthCheckScheduler() { - checkHealthAndSchedule(); - } - public List getHistory() { return this.healthIncidentBuffer.asList(); } - public void update(AgentHealth eventHealth, Class invalidator, String message) { + public void notifyAgentHealth(AgentHealth eventHealth, Class invalidator, String loggerName, String message) { //TODO test to check if the healthstate changes. + if (invalidator == null) { - handleTimeoutHealth(eventHealth); + handleTimeoutHealth(eventHealth, loggerName, message); } else { handleInvalidatableHealth(eventHealth, invalidator, message); } - - triggerEvent(invalidator, message); - } public void handleInvalidatableHealth(AgentHealth eventHealth, Class invalidator, String eventMessage) { invalidatableHealth.merge(invalidator, eventHealth, AgentHealth::mostSevere); - triggerEvent(invalidator, eventMessage); + triggerEvent(invalidator.getTypeName(), eventMessage); } - private void handleTimeoutHealth(AgentHealth eventHealth) { + private void handleTimeoutHealth(AgentHealth eventHealth, String loggerName, String eventMassage) { Duration validityPeriod = env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getValidityPeriod(); if (eventHealth.isMoreSevereOrEqualTo(AgentHealth.WARNING)) { generalHealthTimeouts.put(eventHealth, LocalDateTime.now().plus(validityPeriod)); } + triggerEvent(loggerName, eventMassage + " This status is valid for " + validityPeriod); } public void invalidateIncident(Class eventClass, String eventMessage) { invalidatableHealth.remove(eventClass); } - private void triggerEvent( Class invalidator, String message) { + private void triggerEvent( String incidentSource, String message) { synchronized (this) { boolean changedHealth = false; AgentHealth currHealth = getCurrentHealth(); @@ -98,23 +85,22 @@ private void triggerEvent( Class invalidator, String message) { if(healthChanged()) { changedHealth = true; lastNotifiedHealth = currHealth; + AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, lastHealth, currHealth, message); + ctx.publishEvent(event); } - AgentHealthIncident incident = new AgentHealthIncident(LocalDateTime.now().toString(), currHealth, invalidator.getTypeName() , message, changedHealth); + AgentHealthIncident incident = new AgentHealthIncident(LocalDateTime.now().toString(), currHealth, incidentSource, message, changedHealth); healthIncidentBuffer.put(incident); - - AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, lastHealth, currHealth, message); - ctx.publishEvent(event); } - } + /** + * Checks whether the current health has changed since last check. + * + * @return true if the health state changed + */ private boolean healthChanged() { - if (getCurrentHealth() != lastNotifiedHealth) { - AgentHealth currHealth = getCurrentHealth(); - return currHealth != lastNotifiedHealth; - } - return false; + return getCurrentHealth() != lastNotifiedHealth; } /** @@ -136,41 +122,4 @@ public AgentHealth getCurrentHealth() { .orElse(AgentHealth.OK); return AgentHealth.mostSevere(generalHealth, invHealth); } - - /** - * Checks whether the current health has changed since last check and schedules another check. - * The next check will run dependent on the earliest status timeout in the future: - *
    - *
  • does not exist -> run again after validity period
  • - *
  • exists -> run until that timeout is over
  • - *
validityPeriod - */ - private void checkHealthAndSchedule() { - Duration delay = getNextHealthTimeoutDuration(); - - if (log.isDebugEnabled()) { - log.debug("Schedule health check in {} minutes", delay.toMinutes()); - } - - executor.schedule(this::checkHealthAndSchedule, delay.toMillis(), TimeUnit.MILLISECONDS); - } - - - public Duration getNextHealthTimeoutDuration() { - Duration validityPeriod = env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getValidityPeriod(); - Duration delay = generalHealthTimeouts.values() - .stream() - .filter(d -> d.isAfter(LocalDateTime.now())) - .max(Comparator.naturalOrder()) - .map(d -> Duration.between(d, LocalDateTime.now()).abs()) - .orElse(validityPeriod); - - delay = Duration.ofMillis(Math.max(delay.toMillis(), env.getCurrentConfig() - .getSelfMonitoring() - .getAgentHealth() - .getMinHealthCheckDelay() - .toMillis())); - return delay; - } - } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java index b5dbeebd13..4e529ad281 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java @@ -5,19 +5,13 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; -import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.logging.logback.InternalProcessingAppender; import rocks.inspectit.ocelot.core.selfmonitoring.AgentHealthManager; -import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import java.time.Duration; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; @Component @Slf4j @@ -25,10 +19,7 @@ public class LogHealthMonitor implements InternalProcessingAppender.LogEventConsumer { @Autowired - AgentHealthManager agentHealthManager; - - public LogHealthMonitor(ApplicationContext applicationContext, ScheduledExecutorService scheduledExecutorService, InspectitEnvironment inspectitEnvironment, SelfMonitoringService selfMonitoringService) { - } + final AgentHealthManager agentHealthManager; @Override public void onLoggingEvent(ILoggingEvent event, Class invalidator) { @@ -37,7 +28,7 @@ public void onLoggingEvent(ILoggingEvent event, Class invalidator) { return; } AgentHealth eventHealth = AgentHealth.fromLogLevel(event.getLevel()); - agentHealthManager.handleInvalidatableHealth(eventHealth, invalidator, event.getMessage()); + agentHealthManager.notifyAgentHealth(eventHealth, invalidator,event.getLoggerName(), event.getMessage()); } @Override @@ -57,5 +48,4 @@ void unregisterFromAppender() { InternalProcessingAppender.unregister(this); } - } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java index c6be65330b..ebd540928c 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java @@ -2,22 +2,23 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Maps; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import rocks.inspectit.ocelot.config.model.InspectitConfig; import rocks.inspectit.ocelot.config.model.metrics.MetricsSettings; +import rocks.inspectit.ocelot.config.model.metrics.TagGuardSettings; +import rocks.inspectit.ocelot.config.model.metrics.definition.MetricDefinitionSettings; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.time.Duration; -import java.time.temporal.ChronoUnit; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -28,7 +29,7 @@ @ExtendWith(MockitoExtension.class) class MeasureTagValueGuardTest { - @Mock + @Mock(answer = Answers.RETURNS_DEEP_STUBS) private InspectitEnvironment environment; @Mock @@ -57,8 +58,17 @@ private static Map>> createTagValues() { return measure2TagKeys; } - - + private static String generateTempFilePath() { + try { + Path tempFile = Files.createTempFile("inspectit", ""); + System.out.println(tempFile); + Files.delete(tempFile); + tempFile.toFile().deleteOnExit(); + return tempFile.toString(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } @Nested public class ReaderWrite { @@ -84,18 +94,73 @@ public void testReadWriteTagsFromDisk() { .containsExactlyInAnyOrder("value1", "value2", "value3"); } - } - private static String generateTempFilePath() { - try { - Path tempFile = Files.createTempFile("inspectit", ""); - System.out.println(tempFile); - Files.delete(tempFile); - tempFile.toFile().deleteOnExit(); - return tempFile.toString(); - } catch (IOException e) { - throw new RuntimeException(e); + @Nested + public class getMaxValuesPerTag { + + final private static int defaultMaxValuePerTag = 42; + + private void setupTagGuard(Map maxValuesPerTagByMeasure, MetricDefinitionSettings settings) { + TagGuardSettings tagGuardSettings = new TagGuardSettings(); + tagGuardSettings.setEnabled(true); + tagGuardSettings.setMaxValuesPerTag(defaultMaxValuePerTag); + if (maxValuesPerTagByMeasure != null) { + tagGuardSettings.setMaxValuesPerTagByMeasure(maxValuesPerTagByMeasure); + } + + when(environment.getCurrentConfig().getMetrics().getTagGuard()).thenReturn(tagGuardSettings); + if (settings != null) { + when(environment.getCurrentConfig() + .getMetrics() + .getDefinitions() + .get("measure")).thenReturn(settings); + } + } + + @Test + public void getMaxValuesPerTagByDefault() { + setupTagGuard(null, null); + + assertThat(guard.getMaxValuesPerTag("measure", environment.getCurrentConfig())).isEqualTo(defaultMaxValuePerTag); + } + + @Test + public void getMaxValuesPerTagByMeasure() { + Map maxValuesPerTagByMeasure = new HashMap<>(); + maxValuesPerTagByMeasure.put("measure", 43); + setupTagGuard(maxValuesPerTagByMeasure, null); + + assertThat(guard.getMaxValuesPerTag("measure", environment.getCurrentConfig())).isEqualTo(43); + assertThat(guard.getMaxValuesPerTag("measure1", environment.getCurrentConfig())).isEqualTo(defaultMaxValuePerTag); + } + + @Test + public void getMaxValuesPerTagByMetricDefinitionSettings() { + MetricDefinitionSettings settings = new MetricDefinitionSettings(); + settings.setMaxValuesPerTag(43); + setupTagGuard(null, settings); + + assertThat(guard.getMaxValuesPerTag("measure", environment.getCurrentConfig())).isEqualTo(43); + assertThat(guard.getMaxValuesPerTag("measure1", environment.getCurrentConfig())).isEqualTo(defaultMaxValuePerTag); } + + @Test + public void getMaxValuesPerTagWhenAllSettingsAreSet() { + Map maxValuesPerTagByMeasure = new HashMap<>(); + maxValuesPerTagByMeasure.put("measure", 43); + maxValuesPerTagByMeasure.put("measure2", 48); + + MetricDefinitionSettings settings = new MetricDefinitionSettings(); + settings.setMaxValuesPerTag(44); + + setupTagGuard(maxValuesPerTagByMeasure, settings); + + assertThat(guard.getMaxValuesPerTag("measure", environment.getCurrentConfig())).isEqualTo(44); + assertThat(guard.getMaxValuesPerTag("measure2", environment.getCurrentConfig())).isEqualTo(48); + assertThat(guard.getMaxValuesPerTag("measure3", environment.getCurrentConfig())).isEqualTo(defaultMaxValuePerTag); + } + } + } \ No newline at end of file diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java deleted file mode 100644 index c0f9552be8..0000000000 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java +++ /dev/null @@ -1,163 +0,0 @@ -/* -package rocks.inspectit.ocelot.core.selfmonitoring; - -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.classic.spi.LoggingEvent; -import org.junit.jupiter.api.*; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.junit.jupiter.MockitoExtension; -import org.slf4j.LoggerFactory; -import org.springframework.context.ApplicationContext; -import rocks.inspectit.ocelot.commons.models.health.AgentHealth; -import rocks.inspectit.ocelot.config.model.InspectitConfig; -import rocks.inspectit.ocelot.config.model.selfmonitoring.AgentHealthSettings; -import rocks.inspectit.ocelot.config.model.selfmonitoring.SelfMonitoringSettings; -import rocks.inspectit.ocelot.core.config.InspectitEnvironment; -import rocks.inspectit.ocelot.core.instrumentation.config.event.InstrumentationConfigurationChangedEvent; -import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; - -import java.time.Duration; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; -import static org.mockito.Mockito.*; - -*/ -/** - * Tests {@link AgentHealthManager} - *//* - - //TODO check what is still needed in this test - -@ExtendWith(MockitoExtension.class) -public class AgentHealthManagerTest { - - private static final long VALIDITY_PERIOD_MILLIS = 500; - - private static InspectitConfig config; - - private ScheduledExecutorService executorService; - - private InspectitEnvironment environment; - - private ApplicationContext context; - - private AgentHealthManager healthManager; - - @BeforeAll - static void createInspectitConfig() { - config = new InspectitConfig(); - AgentHealthSettings agentHealth = new AgentHealthSettings(); - agentHealth.setValidityPeriod(Duration.ofMillis(VALIDITY_PERIOD_MILLIS)); - SelfMonitoringSettings selfMonitoring = new SelfMonitoringSettings(); - selfMonitoring.setAgentHealth(agentHealth); - config.setSelfMonitoring(selfMonitoring); - } - - @BeforeEach - void setupStatusManager() { - executorService = new ScheduledThreadPoolExecutor(1); - - environment = mock(InspectitEnvironment.class); - when(environment.getCurrentConfig()).thenReturn(config); - - context = mock(ApplicationContext.class); - - healthManager = new AgentHealthManager(context, executorService, environment); - healthManager.startHealthCheckScheduler(); - } - - @AfterEach - void shutdownExecutorService() { - executorService.shutdown(); - } - - private ILoggingEvent createLoggingEvent(Level level) { - return new LoggingEvent("com.dummy.Method", (Logger) LoggerFactory.getLogger(AgentHealthManagerTest.class), level, "Dummy Info", new Throwable(), new String[]{}); - } - - private void verifyExactlyOneEventWasPublished(AgentHealth status) { - ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(AgentHealthChangedEvent.class); - verify(context).publishEvent(statusCaptor.capture()); - assertThat(statusCaptor.getValue().getNewHealth()).isEqualTo(status); - verifyNoMoreInteractions(context); - } - - @Nested - class OnLogEvent { - - @Test - void logInstrumentationEvents() { - assertThat(healthManager.getCurrentHealth()).withFailMessage("Initial status shall be OK") - .isEqualTo(AgentHealth.OK); - - healthManager.onLoggingEvent(createLoggingEvent(Level.INFO), InstrumentationConfigurationChangedEvent.class); - healthManager.onLoggingEvent(createLoggingEvent(Level.DEBUG), InstrumentationConfigurationChangedEvent.class); - assertThat(healthManager.getCurrentHealth()).withFailMessage("INFO and DEBUG messages shall not change the status") - .isEqualTo(AgentHealth.OK); - - verifyNoInteractions(context); - - healthManager.onLoggingEvent(createLoggingEvent(Level.WARN), InstrumentationConfigurationChangedEvent.class); - assertThat(healthManager.getCurrentHealth()).withFailMessage("Status after WARN message shall be WARNING") - .isEqualTo(AgentHealth.WARNING); - verifyExactlyOneEventWasPublished(AgentHealth.WARNING); - - clearInvocations(context); - - healthManager.onLoggingEvent(createLoggingEvent(Level.ERROR), InstrumentationConfigurationChangedEvent.class); - assertThat(healthManager.getCurrentHealth()).withFailMessage("Status after ERROR message shall be ERROR") - .isEqualTo(AgentHealth.ERROR); - verifyExactlyOneEventWasPublished(AgentHealth.ERROR); - - clearInvocations(context); - - healthManager.onLoggingEvent(createLoggingEvent(Level.INFO), InstrumentationConfigurationChangedEvent.class); - assertThat(healthManager.getCurrentHealth()).withFailMessage("INFO messages shall not change the status") - .isEqualTo(AgentHealth.ERROR); - verifyNoMoreInteractions(context); - - clearInvocations(context); - - healthManager.onInvalidationEvent(new InstrumentationConfigurationChangedEvent(this, null, null)); - assertThat(healthManager.getCurrentHealth()).withFailMessage("When new instrumentation was triggered, status shall be OK") - .isEqualTo(AgentHealth.OK); - verifyExactlyOneEventWasPublished(AgentHealth.OK); - } - - @Test - void logGeneralEvents() { - assertThat(healthManager.getCurrentHealth()).withFailMessage("Initial status shall be OK") - .isEqualTo(AgentHealth.OK); - - healthManager.onLoggingEvent(createLoggingEvent(Level.INFO), null); - healthManager.onLoggingEvent(createLoggingEvent(Level.DEBUG), null); - assertThat(healthManager.getCurrentHealth()).withFailMessage("INFO and DEBUG messages shall not change the status") - .isEqualTo(AgentHealth.OK); - - verifyNoInteractions(context); - - healthManager.onLoggingEvent(createLoggingEvent(Level.ERROR), null); - assertThat(healthManager.getCurrentHealth()).withFailMessage("Status after ERROR message shall be ERROR") - .isEqualTo(AgentHealth.ERROR); - verifyExactlyOneEventWasPublished(AgentHealth.ERROR); - - clearInvocations(context); - - await().atMost(VALIDITY_PERIOD_MILLIS * 2, TimeUnit.MILLISECONDS) - .untilAsserted(() -> assertThat(healthManager.getCurrentHealth()).withFailMessage("ERROR status should jump back to OK after timeout") - .isEqualTo(AgentHealth.OK)); - - await().atMost(VALIDITY_PERIOD_MILLIS * 2, TimeUnit.MILLISECONDS) - .untilAsserted(() -> verifyExactlyOneEventWasPublished(AgentHealth.OK)); - } - - } - -}*/ diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListenerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListenerTest.java new file mode 100644 index 0000000000..84a287f80e --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListenerTest.java @@ -0,0 +1,58 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; + +import java.util.HashMap; + +import static org.mockito.Mockito.verify; + +@ExtendWith(MockitoExtension.class) +public class MetricWritingHealthEventListenerTest { + + private static final String INITIAL_METRIC_MESSAGE = "Initial health metric sent"; + + @InjectMocks + private MetricWritingHealthEventListener metricWritingHealthEventListener; + + @Mock + private SelfMonitoringService selfMonitoringService; + + @Nested + class SendInitialHealthMetric { + + @Test + void successfulDelegationVerification() { + HashMap tags = new HashMap<>(); + tags.put("message", INITIAL_METRIC_MESSAGE); + + metricWritingHealthEventListener.sendInitialHealthMetric(); + + verify(selfMonitoringService).recordMeasurement("health", AgentHealth.OK.ordinal(), tags); + } + } + + @Nested + class OnAgentHealthEvent { + + @Test + void recordNewHealthMeasurement() { + AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, AgentHealth.OK, AgentHealth.WARNING, "Mock Message"); + HashMap tags = new HashMap<>(); + tags.put("message", event.getMessage()); + tags.put("source", event.getSource().getClass().getName()); + + metricWritingHealthEventListener.onAgentHealthEvent(event); + + verify(selfMonitoringService).recordMeasurement("health", event.getNewHealth().ordinal(), tags); + } + } + +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java index 97e180ac1a..915205551a 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java @@ -4,159 +4,57 @@ import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.classic.spi.LoggingEvent; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.LoggerFactory; -import org.springframework.context.ApplicationContext; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; -import rocks.inspectit.ocelot.config.model.InspectitConfig; -import rocks.inspectit.ocelot.config.model.selfmonitoring.AgentHealthSettings; -import rocks.inspectit.ocelot.config.model.selfmonitoring.SelfMonitoringSettings; -import rocks.inspectit.ocelot.core.config.InspectitEnvironment; -import rocks.inspectit.ocelot.core.instrumentation.config.event.InstrumentationConfigurationChangedEvent; +import rocks.inspectit.ocelot.core.config.PropertySourcesReloadEvent; import rocks.inspectit.ocelot.core.selfmonitoring.AgentHealthManager; -import rocks.inspectit.ocelot.core.selfmonitoring.SelfMonitoringService; -import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; -import java.time.Duration; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; /** * Tests {@link AgentHealthManager} */ @ExtendWith(MockitoExtension.class) public class LogHealthMonitorTest { - //TODO check tests what they need - - private static final long VALIDITY_PERIOD_MILLIS = 500; - - private static InspectitConfig config; - - private ScheduledExecutorService executorService; - - private InspectitEnvironment environment; - - private ApplicationContext context; + @InjectMocks private LogHealthMonitor healthMonitor; - @BeforeAll - static void createInspectitConfig() { - config = new InspectitConfig(); - AgentHealthSettings agentHealth = new AgentHealthSettings(); - agentHealth.setValidityPeriod(Duration.ofMillis(VALIDITY_PERIOD_MILLIS)); - SelfMonitoringSettings selfMonitoring = new SelfMonitoringSettings(); - selfMonitoring.setAgentHealth(agentHealth); - config.setSelfMonitoring(selfMonitoring); - } - - @BeforeEach - void setupStatusManager() { - executorService = new ScheduledThreadPoolExecutor(1); - - environment = mock(InspectitEnvironment.class); - when(environment.getCurrentConfig()).thenReturn(config); - - context = mock(ApplicationContext.class); - - healthMonitor = new LogHealthMonitor(context, executorService, environment, mock(SelfMonitoringService.class)); - healthMonitor.startHealthCheckScheduler(); - } - - @AfterEach - void shutdownExecutorService() { - executorService.shutdown(); - } - - private ILoggingEvent createLoggingEvent(Level level) { - return new LoggingEvent("com.dummy.Method", (Logger) LoggerFactory.getLogger(LogHealthMonitor.class), level, "Dummy Info", new Throwable(), new String[]{}); - } + @Mock + private AgentHealthManager healthManager; - private void verifyExactlyOneEventWasPublished(AgentHealth status) { - ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(AgentHealthChangedEvent.class); - verify(context).publishEvent(statusCaptor.capture()); - assertThat(statusCaptor.getValue().getNewHealth()).isEqualTo(status); - verifyNoMoreInteractions(context); + private ILoggingEvent createLoggingEvent(Class loggedClass) { + return new LoggingEvent("com.dummy.Method", (Logger) LoggerFactory.getLogger(loggedClass), Level.INFO, "Dummy Info", new Throwable(), new String[]{}); } - + //TODO testen mit allen Levels (WARN, ERROR, OK, INFO, DEBUG) @Nested - class OnLogEvent { + class OnLoggingEvent { @Test - void logInstrumentationEvents() { - Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("Initial status shall be OK") - .isEqualTo(AgentHealth.OK); - - healthMonitor.onLoggingEvent(createLoggingEvent(Level.INFO), InstrumentationConfigurationChangedEvent.class); - healthMonitor.onLoggingEvent(createLoggingEvent(Level.DEBUG), InstrumentationConfigurationChangedEvent.class); - Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("INFO and DEBUG messages shall not change the status") - .isEqualTo(AgentHealth.OK); - - verifyNoInteractions(context); - - healthMonitor.onLoggingEvent(createLoggingEvent(Level.WARN), InstrumentationConfigurationChangedEvent.class); - Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("Status after WARN message shall be WARNING") - .isEqualTo(AgentHealth.WARNING); - verifyExactlyOneEventWasPublished(AgentHealth.WARNING); - - clearInvocations(context); - - healthMonitor.onLoggingEvent(createLoggingEvent(Level.ERROR), InstrumentationConfigurationChangedEvent.class); - Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("Status after ERROR message shall be ERROR") - .isEqualTo(AgentHealth.ERROR); - verifyExactlyOneEventWasPublished(AgentHealth.ERROR); - - clearInvocations(context); + void ignoreLogsFromAgentHealthManagerClass() { + ILoggingEvent loggingEvent = createLoggingEvent(AgentHealthManager.class); - healthMonitor.onLoggingEvent(createLoggingEvent(Level.INFO), InstrumentationConfigurationChangedEvent.class); - Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("INFO messages shall not change the status") - .isEqualTo(AgentHealth.ERROR); - verifyNoMoreInteractions(context); + healthMonitor.onLoggingEvent(loggingEvent, null); - clearInvocations(context); - - healthMonitor.onInvalidationEvent(new InstrumentationConfigurationChangedEvent(this, null, null)); - Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("When new instrumentation was triggered, status shall be OK") - .isEqualTo(AgentHealth.OK); - verifyExactlyOneEventWasPublished(AgentHealth.OK); + verifyNoMoreInteractions(healthManager); } @Test - void logGeneralEvents() { - Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("Initial status shall be OK") - .isEqualTo(AgentHealth.OK); - - healthMonitor.onLoggingEvent(createLoggingEvent(Level.INFO), null); - healthMonitor.onLoggingEvent(createLoggingEvent(Level.DEBUG), null); - Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("INFO and DEBUG messages shall not change the status") - .isEqualTo(AgentHealth.OK); - - verifyNoInteractions(context); - - healthMonitor.onLoggingEvent(createLoggingEvent(Level.ERROR), null); - Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("Status after ERROR message shall be ERROR") - .isEqualTo(AgentHealth.ERROR); - verifyExactlyOneEventWasPublished(AgentHealth.ERROR); + void triggerAgentHealthManagerNotifyAgentHealthEvent() { + ILoggingEvent loggingEvent = createLoggingEvent(LogHealthMonitor.class); + Class invalidatorMock = PropertySourcesReloadEvent.class; + AgentHealth eventHealth = AgentHealth.fromLogLevel(loggingEvent.getLevel()); - clearInvocations(context); + healthMonitor.onLoggingEvent(loggingEvent, invalidatorMock); - await().atMost(VALIDITY_PERIOD_MILLIS * 2, TimeUnit.MILLISECONDS) - .untilAsserted(() -> Assertions.assertThat(healthMonitor.getCurrentHealth()).withFailMessage("ERROR status should jump back to OK after timeout") - .isEqualTo(AgentHealth.OK)); - - await().atMost(VALIDITY_PERIOD_MILLIS * 2, TimeUnit.MILLISECONDS) - .untilAsserted(() -> verifyExactlyOneEventWasPublished(AgentHealth.OK)); + verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, invalidatorMock.getCanonicalName(), loggingEvent.getMessage()); } - } - } From 9abb2ba43f4e4d315c1da9caae8b0be4a1e4ccf6 Mon Sep 17 00:00:00 2001 From: Dimi-Ma Date: Mon, 13 Feb 2023 11:48:33 +0100 Subject: [PATCH 05/21] writing int Test for TagValueGuard --- .../model/metrics/TagGuardSettings.java | 2 +- .../ExporterServiceIntegrationTestBase.java | 21 +++-- .../metrics/MeasureTagValueGuardIntTest.java | 76 +++++++++++++++++++ .../metrics/MeasureTagValueGuardTest.java | 1 - 4 files changed, 92 insertions(+), 8 deletions(-) create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java index a5eed279f2..783a6af541 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java @@ -16,7 +16,7 @@ public class TagGuardSettings { /** - * + * The schedule delay of the {@code TagValueGuard} */ private Duration scheduleDelay; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java index 1eae9b1c9b..02453307c9 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java @@ -23,6 +23,7 @@ import io.opentelemetry.proto.common.v1.KeyValue; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; +import jdk.nashorn.internal.objects.annotations.Getter; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -55,13 +56,13 @@ * This class is based on the {@link io.opentelemetry.integrationtest.OtlpExporterIntegrationTest} */ @Testcontainers(disabledWithoutDocker = true) -abstract class ExporterServiceIntegrationTestBase extends SpringTestBase { +public abstract class ExporterServiceIntegrationTestBase extends SpringTestBase { static final String COLLECTOR_TAG = "0.58.0"; static final String COLLECTOR_IMAGE = "otel/opentelemetry-collector-contrib:" + COLLECTOR_TAG; - static final Integer COLLECTOR_OTLP_GRPC_PORT = 4317; + protected static final Integer COLLECTOR_OTLP_GRPC_PORT = 4317; static final Integer COLLECTOR_OTLP_HTTP_PORT = 4318; @@ -171,7 +172,7 @@ static String getEndpoint(Integer originalPort, String path) { * * @return the constructed endpoint for the {@link #collector} */ - static String getEndpoint(Integer originalPort) { + protected static String getEndpoint(Integer originalPort) { return String.format("http://%s:%d", collector.getHost(), collector.getMappedPort(originalPort)); } @@ -213,7 +214,7 @@ void recordMetricsAndFlush() { * @param tagKey the key of the tag * @param tagVal the value of the tag */ - void recordMetricsAndFlush(int value, String tagKey, String tagVal) { + protected void recordMetricsAndFlush(int value, String tagKey, String tagVal) { // get the meter and create a counter Meter meter = GlobalOpenTelemetry.getMeterProvider() .meterBuilder("rocks.inspectit.ocelot") @@ -235,7 +236,7 @@ void recordMetricsAndFlush(int value, String tagKey, String tagVal) { * @param tagKey * @param tagVal */ - void awaitMetricsExported(int value, String tagKey, String tagVal) { + protected void awaitMetricsExported(int value, String tagKey, String tagVal) { // create the attribute that we will use to verify that the metric has been written KeyValue attribute = KeyValue.newBuilder() .setKey(tagKey) @@ -295,7 +296,7 @@ void awaitSpansExported(String parentSpanName, String childSpanName) { /** * OpenTelemetry Protocol gRPC Server */ - static class OtlpGrpcServer extends ServerExtension { + public static class OtlpGrpcServer extends ServerExtension { final List traceRequests = new ArrayList<>(); @@ -309,6 +310,10 @@ private void reset() { logRequests.clear(); } + public List getMetricRequests() { + return metricRequests; + } + @Override protected void configure(ServerBuilder sb) { sb.service("/opentelemetry.proto.collector.trace.v1.TraceService/Export", new AbstractUnaryGrpcService() { @@ -348,4 +353,8 @@ protected CompletionStage handleMessage(ServiceRequestContext ctx, byte[ } } + public OtlpGrpcServer getGrpcServer() { + return grpcServer; + } + } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java new file mode 100644 index 0000000000..a9fcfb1638 --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java @@ -0,0 +1,76 @@ +package rocks.inspectit.ocelot.core.metrics; + +import io.github.netmikey.logunit.api.LogCapturer; +import io.opentelemetry.proto.common.v1.AnyValue; +import io.opentelemetry.proto.common.v1.KeyValue; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import rocks.inspectit.ocelot.config.model.exporters.ExporterEnabledState; +import rocks.inspectit.ocelot.config.model.exporters.TransportProtocol; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.exporter.ExporterServiceIntegrationTestBase; +import rocks.inspectit.ocelot.core.exporter.OtlpMetricsExporterService; + +import java.time.Duration; +import java.util.concurrent.TimeUnit; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; + +/** + * Integration Test Class for {@link MeasureTagValueGuard} + */ +public class MeasureTagValueGuardIntTest extends ExporterServiceIntegrationTestBase { + public static final String OTLP_METRICS_PATH = "/v1/metrics"; + + + @RegisterExtension + LogCapturer warnLogs = LogCapturer.create() + .captureForType(OtlpMetricsExporterService.class, org.slf4j.event.Level.WARN); + + @Autowired + OtlpMetricsExporterService service; + + @Autowired + InspectitEnvironment environment; + + static final String TAG_KEY = "tag-value-guard-test-tag-key"; + + @BeforeEach + void clearRequests() { + getGrpcServer().getMetricRequests().clear(); + } + + @DirtiesContext + @Test + void testValueGuardLimitExceed() throws InterruptedException { + updateProperties(mps -> { + mps.setProperty("inspectit.exporters.metrics.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT)); + mps.setProperty("inspectit.exporters.metrics.otlp.export-interval", "500ms"); + mps.setProperty("inspectit.exporters.metrics.otlp.enabled", ExporterEnabledState.ENABLED); + mps.setProperty("inspectit.exporters.metrics.otlp.protocol", TransportProtocol.GRPC); + mps.setProperty("inspectit.metrics.tag-guard.tag-values-per-tag", 2); + mps.setProperty("inspectit.metrics.tag-guard.schedule-delay", Duration.ofMillis(500)); + }); + + await().atMost(5, TimeUnit.SECONDS) + .pollInterval(500, TimeUnit.MILLISECONDS) + .untilAsserted(() -> assertThat(service.isEnabled()).isTrue()); + + recordMetricsAndFlush(1, TAG_KEY, "1"); + recordMetricsAndFlush(2, TAG_KEY, "2"); + + awaitMetricsExported(1, TAG_KEY, "1"); + awaitMetricsExported(2, TAG_KEY, "2"); + + Thread.sleep(1000); + recordMetricsAndFlush(3, TAG_KEY, "3"); + awaitMetricsExported(3, TAG_KEY, "TAG_LIMIT_EXCEEDED"); + + } + + +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java index ebd540928c..5827055e56 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java @@ -160,7 +160,6 @@ public void getMaxValuesPerTagWhenAllSettingsAreSet() { assertThat(guard.getMaxValuesPerTag("measure2", environment.getCurrentConfig())).isEqualTo(48); assertThat(guard.getMaxValuesPerTag("measure3", environment.getCurrentConfig())).isEqualTo(defaultMaxValuePerTag); } - } } \ No newline at end of file From d3ca882a78f6d666e4f1e3320b440003bfaf064a Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Wed, 8 Nov 2023 13:38:51 +0100 Subject: [PATCH 06/21] fix test --- .../selfmonitoring/AgentHealthManagerDeadlockGh1597IntTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerDeadlockGh1597IntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerDeadlockGh1597IntTest.java index 6395640231..039e83e55c 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerDeadlockGh1597IntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerDeadlockGh1597IntTest.java @@ -53,7 +53,7 @@ void testLogging() throws Exception { Thread invalidationThread = new Thread(() -> { long start = System.currentTimeMillis(); while (System.currentTimeMillis() - start < millisToRun) { - cut.onInvalidationEvent(cut.getClass()); + cut.invalidateIncident(cut.getClass(), "Invalidation due to invalidator event"); } isInvalidationThreadDone.getAndSet(true); }); From 78c3655b1b0d3e5714bcd230a3e9f0c9513e2328 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Wed, 8 Nov 2023 15:16:00 +0100 Subject: [PATCH 07/21] fix MetricsRecorderTest --- .../hook/actions/MetricsRecorderTest.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorderTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorderTest.java index ce1979d10a..c67ff2dbd5 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorderTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/MetricsRecorderTest.java @@ -10,6 +10,8 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.*; import org.mockito.junit.jupiter.MockitoExtension; +import rocks.inspectit.ocelot.core.SpringTestBase; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; import rocks.inspectit.ocelot.core.instrumentation.hook.VariableAccessor; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.model.MetricAccessor; @@ -25,7 +27,7 @@ import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -public class MetricsRecorderTest { +public class MetricsRecorderTest extends SpringTestBase { @Mock CommonTagsManager commonTagsManager; @@ -43,12 +45,13 @@ public class MetricsRecorderTest { @Mock InspectitContextImpl inspectitContext; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private InspectitEnvironment environment; + @BeforeEach void setupMock() { when(commonTagsManager.getCommonTagKeys()).thenReturn(Collections.emptyList()); when(executionContext.getInspectitContext()).thenReturn(inspectitContext); - - } @Nested From d219748abd41d17c21f6381979ea804eb3faa8df Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Wed, 8 Nov 2023 16:24:24 +0100 Subject: [PATCH 08/21] fix LogHealthMonitorTest and disable MeasureTagValueGuardIntTest for now --- .../ocelot/core/selfmonitoring/AgentHealthManager.java | 1 + .../core/selfmonitoring/logs/LogHealthMonitor.java | 2 +- .../ocelot/core/metrics/MeasureTagValueGuardIntTest.java | 9 ++++++++- .../core/selfmonitoring/logs/LogHealthMonitorTest.java | 7 ++++--- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java index ebae45667b..ae5461fe68 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java @@ -75,6 +75,7 @@ private void handleTimeoutHealth(AgentHealth eventHealth, String loggerName, Str public void invalidateIncident(Class eventClass, String eventMessage) { invalidatableHealth.remove(eventClass); + triggerEvent(eventClass.getTypeName(), eventMessage); } private void triggerEvent( String incidentSource, String message) { diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java index 4e529ad281..03809cb45c 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java @@ -28,7 +28,7 @@ public void onLoggingEvent(ILoggingEvent event, Class invalidator) { return; } AgentHealth eventHealth = AgentHealth.fromLogLevel(event.getLevel()); - agentHealthManager.notifyAgentHealth(eventHealth, invalidator,event.getLoggerName(), event.getMessage()); + agentHealthManager.notifyAgentHealth(eventHealth, invalidator, event.getLoggerName(), event.getMessage()); } @Override diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java index a9fcfb1638..063e121a0a 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java @@ -4,6 +4,7 @@ import io.opentelemetry.proto.common.v1.AnyValue; import io.opentelemetry.proto.common.v1.KeyValue; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.springframework.beans.factory.annotation.Autowired; @@ -44,15 +45,21 @@ void clearRequests() { getGrpcServer().getMetricRequests().clear(); } + /** + * TODO: Update test + * Since recordMetricsAndFlush() creates metrics directly in OpenTelemetry, MeasureTagValueGuard cannot be applied + * Thus to test MeasureTagValueGuard, metrics have to be created with InspectIT + */ @DirtiesContext @Test + @Disabled("Metrics need to be created with InspectIT") void testValueGuardLimitExceed() throws InterruptedException { updateProperties(mps -> { mps.setProperty("inspectit.exporters.metrics.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT)); mps.setProperty("inspectit.exporters.metrics.otlp.export-interval", "500ms"); mps.setProperty("inspectit.exporters.metrics.otlp.enabled", ExporterEnabledState.ENABLED); mps.setProperty("inspectit.exporters.metrics.otlp.protocol", TransportProtocol.GRPC); - mps.setProperty("inspectit.metrics.tag-guard.tag-values-per-tag", 2); + mps.setProperty("inspectit.metrics.tag-guard.max-tag-values-per-tag", 2); mps.setProperty("inspectit.metrics.tag-guard.schedule-delay", Duration.ofMillis(500)); }); diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java index 915205551a..ff07e1f592 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java @@ -33,7 +33,7 @@ public class LogHealthMonitorTest { private ILoggingEvent createLoggingEvent(Class loggedClass) { return new LoggingEvent("com.dummy.Method", (Logger) LoggerFactory.getLogger(loggedClass), Level.INFO, "Dummy Info", new Throwable(), new String[]{}); } - //TODO testen mit allen Levels (WARN, ERROR, OK, INFO, DEBUG) + //TODO testen mit allen Levels (WARN, ERROR, OK, INFO, DEBUG) @Nested class OnLoggingEvent { @@ -48,13 +48,14 @@ void ignoreLogsFromAgentHealthManagerClass() { @Test void triggerAgentHealthManagerNotifyAgentHealthEvent() { - ILoggingEvent loggingEvent = createLoggingEvent(LogHealthMonitor.class); + Class loggerClass = LogHealthMonitor.class; + ILoggingEvent loggingEvent = createLoggingEvent(loggerClass); Class invalidatorMock = PropertySourcesReloadEvent.class; AgentHealth eventHealth = AgentHealth.fromLogLevel(loggingEvent.getLevel()); healthMonitor.onLoggingEvent(loggingEvent, invalidatorMock); - verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, invalidatorMock.getCanonicalName(), loggingEvent.getMessage()); + verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, loggerClass.getCanonicalName(), loggingEvent.getMessage()); } } } From 26f3ee167f276d43ddf784450af63c4154e32d26 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Thu, 9 Nov 2023 15:57:09 +0100 Subject: [PATCH 09/21] update workflow --- .github/workflows/agent_test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/agent_test.yml b/.github/workflows/agent_test.yml index 20e886a922..99b40fc877 100644 --- a/.github/workflows/agent_test.yml +++ b/.github/workflows/agent_test.yml @@ -80,10 +80,10 @@ jobs: - name: jmhCompile run: ./gradlew jmhCompile - attach-alpine-jdk8: + attach-jdk8: name: 'Runtime Attachment' runs-on: ubuntu-latest - container: eclipse-temurin:8-jdk-alpine + container: eclipse-temurin:8-jdk steps: - uses: actions/checkout@v3 - name: Grant execute permission for gradlew From bf49b6550ad2022f158ca119e9b13d008086b8ef Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Thu, 9 Nov 2023 16:10:03 +0100 Subject: [PATCH 10/21] update build.gradle --- inspectit-ocelot-config/build.gradle | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/inspectit-ocelot-config/build.gradle b/inspectit-ocelot-config/build.gradle index 5a86670ed5..7b3508ea94 100644 --- a/inspectit-ocelot-config/build.gradle +++ b/inspectit-ocelot-config/build.gradle @@ -33,12 +33,11 @@ dependencies { testRuntimeOnly libs.orgJunitJupiterJunitJupiterEngine implementation( - "org.springframework.boot:spring-boot", - "org.hibernate.validator:hibernate-validator", - "org.apache.commons:commons-lang3", - "commons-io:commons-io:${commonsIoVersion}", - "com.fasterxml.jackson.core:jackson-databind", - 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.0', + libs.orgSpringframeworkBootSpringBoot, + libs.orgHibernateValidatorHibernateValidator, + libs.orgApacheCommonsCommonsLang3, + libs.commonsIo, + libs.comFasterxmlJacksonCoreJacksonDatabind, // logging libs.chQosLogbackLogbackClassic, ) From ddd0dfdbb4c1345158bbbe149ba1490cd5ec1121 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Thu, 23 Nov 2023 11:12:22 +0100 Subject: [PATCH 11/21] refactor TagValueGuard and AgentHealth tracking --- .../src/components/layout/Menubar.js | 3 - .../models/health/AgentHealthIncident.java | 6 +- .../config/model/metrics/MetricsSettings.java | 3 + .../model/metrics/TagGuardSettings.java | 12 ++- .../selfmonitoring/AgentHealthSettings.java | 15 ++- .../ocelot/config/default/self-monitoring.yml | 3 + .../http/HttpConfigurationPoller.java | 2 +- .../core/metrics/MeasureTagValueGuard.java | 41 +++++++-- .../selfmonitoring/AgentHealthManager.java | 92 ++++++++++++++----- .../event/listener/HealthEventListener.java | 1 - .../PollerWritingHealthEventListener.java | 6 +- .../event/models/AgentHealthChangedEvent.java | 5 - .../selfmonitoring/logs/LogHealthMonitor.java | 2 +- .../core/utils/AgentHealthIncidentBuffer.java | 49 ++++++++++ .../ocelot/core/utils/RingBuffer.java | 45 --------- .../logs/LogHealthMonitorTest.java | 2 +- 16 files changed, 178 insertions(+), 109 deletions(-) create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java delete mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/RingBuffer.java diff --git a/components/inspectit-ocelot-configurationserver-ui/src/components/layout/Menubar.js b/components/inspectit-ocelot-configurationserver-ui/src/components/layout/Menubar.js index c3f88045f6..1be253ed25 100644 --- a/components/inspectit-ocelot-configurationserver-ui/src/components/layout/Menubar.js +++ b/components/inspectit-ocelot-configurationserver-ui/src/components/layout/Menubar.js @@ -72,9 +72,6 @@ class Menubar extends React.Component { } right={
- diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthIncident.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthIncident.java index 610476f4ad..2a55d81948 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthIncident.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/commons/models/health/AgentHealthIncident.java @@ -9,7 +9,7 @@ @Data @AllArgsConstructor @NoArgsConstructor -public class AgentHealthIncident implements Comparable{ +public class AgentHealthIncident implements Comparable { private String time; private AgentHealth health; @@ -17,10 +17,6 @@ public class AgentHealthIncident implements Comparable{ private String message; private boolean changedHealth; - public static AgentHealthIncident getNoneIncident() { - return new AgentHealthIncident(LocalDateTime.now().toString(), AgentHealth.OK, "", "", false); - } - @Override public int compareTo(Object o) { if(!(o instanceof AgentHealthIncident)) { diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java index dc5bc11856..c9aa327d6d 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/MetricsSettings.java @@ -38,6 +38,9 @@ public class MetricsSettings { */ private Duration frequency; + /** + * Settings for controlling the amount of unique tag values + */ private TagGuardSettings tagGuard; @NotNull diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java index 783a6af541..d382368815 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java @@ -15,21 +15,23 @@ @AdditionalValidations public class TagGuardSettings { + private boolean enabled; + /** - * The schedule delay of the {@code TagValueGuard} + * The schedule delay for the blocking task of the {@code MeasureTagValueGuard} */ private Duration scheduleDelay; /** - * + * File, which contains metrics with their particular recorded tags and their tag values */ private String databaseFile; - + /** + * String, which should be used as tag value, if the defined limit of tag values is exceeded + */ private String overflowReplacement; - private boolean enabled; - /** * Default max values per tag for all measures that are not specified in {@link #maxValuesPerTagByMeasure} or {@link rocks.inspectit.ocelot.config.model.metrics.definition.MetricDefinitionSettings#maxValuesPerTag}. */ diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/AgentHealthSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/AgentHealthSettings.java index 3751782af1..4449bff9ca 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/AgentHealthSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/selfmonitoring/AgentHealthSettings.java @@ -22,18 +22,29 @@ public class AgentHealthSettings { @NonNull private Duration validityPeriod; + /** + * The amount of AgentHealthIncidents, which should be buffered. + */ + @NonNull + private Integer incidentBufferSize; + /** * The minimum delay how often the AgentHealthManager checks for invalid agent health events to clear health status. */ @NonNull private Duration minHealthCheckDelay; - @AssertTrue(message = "minHealthCheckDelay must be at least 60 seconds") + @AssertTrue(message = "validityPeriod must be greater than minHealthCheckDelay!") + public boolean validityPeriodIsGreaterThanMinDelay() { + return validityPeriod.compareTo(minHealthCheckDelay) > 0; + } + + @AssertTrue(message = "minHealthCheckDelay must be at least 60 seconds!") public boolean isMin60SecondsDelay() { return minHealthCheckDelay.toMinutes() >= 1; } - @AssertFalse(message = "The specified period should not be negative!") + @AssertFalse(message = "The specified period must not be negative!") public boolean isNegativeDuration() { return validityPeriod != null && validityPeriod.isNegative(); } diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/self-monitoring.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/self-monitoring.yml index 05a914cfb9..a4d448bc8e 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/self-monitoring.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/self-monitoring.yml @@ -15,6 +15,9 @@ inspectit: # health changes due to instrumentation errors are valid until the next re-instrumentation validity-period: 1h + # The amount of agent health incidents, which should be buffered + incident-buffer-size: 10 + # The minimum delay how often the AgentHealthManager checks for invalid agent health events to clear health status # By default the delay is calculated based on the last agent health event # Minimum value is 1m diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java index 59491fc19b..ceffb66652 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java @@ -14,7 +14,7 @@ import java.util.concurrent.TimeUnit; /** - * Service for continuously triggering the updated of a agent configuration via HTTP. + * Service for continuously triggering the updating of an agent configuration via HTTP. */ @Service @Slf4j diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java index b6d3e1721a..3c717b2d0c 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import io.opencensus.tags.TagContext; import io.opencensus.tags.TagContextBuilder; import io.opencensus.tags.TagKey; @@ -46,6 +47,8 @@ public class MeasureTagValueGuard { private static final String tagOverFlowMessageTemplate = "Overflow for tag %s"; + private static final String tagOverFlowResolvedMessageTemplate = "Overflow resolved for tag %s"; + @Autowired private InspectitEnvironment env; @@ -65,7 +68,10 @@ public class MeasureTagValueGuard { private volatile boolean isShuttingDown = false; - private final Map> blockedTagKeysByMeasure = Maps.newHashMap(); + /** + * Map of measure names and their related set of tag keys, which should be blocked. + */ + private final Map> blockedTagKeysByMeasure = Maps.newHashMap(); private Set latestTags = Collections.synchronizedSet(new HashSet<>()); @@ -100,6 +106,11 @@ protected void stop() { blockTagValuesFuture.cancel(true); } + /** + * Task, which reads the persisted tag values to determine, which tags should be blocked, because of exceeding + * the specific tag value limit. + * If new tags values have been created, they will be persisted. + */ Runnable blockTagValuesTask = () -> { if (!env.getCurrentConfig().getMetrics().getTagGuard().isEnabled()) { @@ -111,20 +122,24 @@ protected void stop() { Map>> availableTagsByMeasure = fileReaderWriter.read(); - copy.forEach(t -> { - String measureName = t.getMeasureName(); - Map newTags = t.getTags(); + copy.forEach(tagsHolder -> { + String measureName = tagsHolder.getMeasureName(); + Map newTags = tagsHolder.getTags(); int maxValuesPerTag = getMaxValuesPerTag(measureName, env.getCurrentConfig()); Map> tagValuesByTagKey = availableTagsByMeasure.computeIfAbsent(measureName, k -> Maps.newHashMap()); newTags.forEach((tagKey, tagValue) -> { Set tagValues = tagValuesByTagKey.computeIfAbsent(tagKey, (x) -> new HashSet<>()); - if (tagValues.size() > maxValuesPerTag) { - blockedTagKeysByMeasure.computeIfAbsent(tagKey, blocked -> Maps.newHashMap()) - .putIfAbsent(tagKey, true); + // if tag value is new AND max values per tag is already reached + if (!tagValues.contains(tagValue) && tagValues.size() >= maxValuesPerTag) { + blockedTagKeysByMeasure.computeIfAbsent(measureName, blocked -> Sets.newHashSet()) + .add(tagKey); agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, tagKey)); } else { + Set blockedTagKeys = blockedTagKeysByMeasure.computeIfAbsent(measureName, blocked -> Sets.newHashSet()); + if(blockedTagKeys.remove(tagKey)) + agentHealthManager.invalidateIncident(this.getClass(), String.format(tagOverFlowResolvedMessageTemplate, tagKey)); tagValues.add(tagValue); } }); @@ -162,11 +177,17 @@ int getMaxValuesPerTag(String measureName, InspectitConfig config) { .getMaxValuesPerTag()); } + /** + * + * @param context + * @param metricAccessor + * @return + */ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAccessor metricAccessor) { Map tags = Maps.newHashMap(); String measureName = metricAccessor.getName(); InspectitContextImpl inspectitContext = context.getInspectitContext(); - Map blockedTagKeys = blockedTagKeysByMeasure.getOrDefault(measureName, Maps.newHashMap()); + Set blockedTagKeys = blockedTagKeysByMeasure.getOrDefault(measureName, Sets.newHashSet()); TagGuardSettings tagGuardSettings = env.getCurrentConfig().getMetrics().getTagGuard(); // first common tags to allow to overwrite by constant or data tags @@ -177,7 +198,7 @@ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAcce // then constant tags to allow to overwrite by data metricAccessor.getConstantTags().forEach((key, value) -> { - if (tagGuardSettings.isEnabled() && blockedTagKeys.containsKey(key)) { + if (tagGuardSettings.isEnabled() && blockedTagKeys.contains(key)) { String overflowReplacement = env.getCurrentConfig().getMetrics().getTagGuard().getOverflowReplacement(); tags.put(key, TagUtils.createTagValueAsString(key, overflowReplacement)); } else { @@ -187,7 +208,7 @@ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAcce // go over data tags and match the value to the key from the contextTags (if available) metricAccessor.getDataTagAccessors().forEach((key, accessor) -> { - if (tagGuardSettings.isEnabled() && blockedTagKeys.containsKey(key)) { + if (tagGuardSettings.isEnabled() && blockedTagKeys.contains(key)) { String overflowReplacement = env.getCurrentConfig().getMetrics().getTagGuard().getOverflowReplacement(); tags.put(key, TagUtils.createTagValueAsString(key, overflowReplacement)); } else { diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java index ae5461fe68..4b527f7d0c 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java @@ -1,5 +1,6 @@ package rocks.inspectit.ocelot.core.selfmonitoring; +import com.google.common.annotations.VisibleForTesting; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; @@ -8,14 +9,17 @@ import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; -import rocks.inspectit.ocelot.core.utils.RingBuffer; +import rocks.inspectit.ocelot.core.utils.AgentHealthIncidentBuffer; +import javax.annotation.PostConstruct; import java.time.Duration; import java.time.LocalDateTime; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; /** * Manages the {@link AgentHealth} and publishes {@link AgentHealthChangedEvent}s when it changes. @@ -27,9 +31,11 @@ public class AgentHealthManager { private final ApplicationContext ctx; + private final ScheduledExecutorService executor; + /** * Map of {@code eventClass -> agentHealth}, whereas the {@code agentHealth} is reset whenever an event of type - * {@code eventClass} occurs (see {@link #onInvalidationEvent(Object)}. + * {@code eventClass} occurs (see {@link #onInvalidationEvent(Object)}). * The resulting agent health is the most severe value in the map. */ private final Map, AgentHealth> invalidatableHealth = new ConcurrentHashMap<>(); @@ -44,24 +50,28 @@ public class AgentHealthManager { private final InspectitEnvironment env; - private final RingBuffer healthIncidentBuffer = new RingBuffer<>(10); //TODO make this configurable + private final AgentHealthIncidentBuffer healthIncidentBuffer; - public List getHistory() { - return this.healthIncidentBuffer.asList(); + @PostConstruct + @VisibleForTesting + void startHealthCheckScheduler() { + checkHealthAndSchedule(); } - public void notifyAgentHealth(AgentHealth eventHealth, Class invalidator, String loggerName, String message) { //TODO test to check if the healthstate changes. + public List getHistory() { + return healthIncidentBuffer.asList(); + } - if (invalidator == null) { + public void notifyAgentHealth(AgentHealth eventHealth, Class invalidator, String loggerName, String message) { + if (invalidator == null) handleTimeoutHealth(eventHealth, loggerName, message); - } else { + else handleInvalidatableHealth(eventHealth, invalidator, message); - } } public void handleInvalidatableHealth(AgentHealth eventHealth, Class invalidator, String eventMessage) { invalidatableHealth.merge(invalidator, eventHealth, AgentHealth::mostSevere); - triggerEvent(invalidator.getTypeName(), eventMessage); + triggerAgentHealthChangedEvent(invalidator.getTypeName(), eventMessage); } private void handleTimeoutHealth(AgentHealth eventHealth, String loggerName, String eventMassage) { @@ -70,28 +80,60 @@ private void handleTimeoutHealth(AgentHealth eventHealth, String loggerName, Str if (eventHealth.isMoreSevereOrEqualTo(AgentHealth.WARNING)) { generalHealthTimeouts.put(eventHealth, LocalDateTime.now().plus(validityPeriod)); } - triggerEvent(loggerName, eventMassage + " This status is valid for " + validityPeriod); + triggerAgentHealthChangedEvent(loggerName, eventMassage + ". This status is valid for " + validityPeriod); } - public void invalidateIncident(Class eventClass, String eventMessage) { + public void invalidateIncident(Class eventClass, String eventMessage) { invalidatableHealth.remove(eventClass); - triggerEvent(eventClass.getTypeName(), eventMessage); + triggerAgentHealthChangedEvent(eventClass.getTypeName(), eventMessage); + } + + /** + * Checks whether the current health has changed since last check and schedules another check. + * The next check will run dependent on the earliest status timeout in the future: + *
    + *
  • does not exist -> run again after validity period
  • + *
  • exists -> run until that timeout is over
  • + *
+ */ + private void checkHealthAndSchedule() { + triggerAgentHealthChangedEvent(AgentHealthManager.class.getCanonicalName(), "Checking timed out agent healths"); + + Duration validityPeriod = env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getValidityPeriod(); + Duration minDelay = env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getMinHealthCheckDelay(); + Duration delay = generalHealthTimeouts.values() + .stream() + .filter(dateTime -> dateTime.isAfter(LocalDateTime.now())) + .max(Comparator.naturalOrder()) + .map(dateTime -> { + Duration dif = Duration.between(dateTime, LocalDateTime.now()); + if (minDelay.compareTo(dif) > 0) return minDelay; + else return dif; + }) + .orElse(validityPeriod); + + executor.schedule(this::checkHealthAndSchedule, delay.toMillis(), TimeUnit.MILLISECONDS); } - private void triggerEvent( String incidentSource, String message) { + /** + * Creates a new AgentHealthIncident and also triggers an AgentHealthChangedEvent, if the agent health has changed + * @param incidentSource class, which caused the incident + * @param message message, describing the incident + */ + private void triggerAgentHealthChangedEvent(String incidentSource, String message) { synchronized (this) { - boolean changedHealth = false; - AgentHealth currHealth = getCurrentHealth(); - AgentHealth lastHealth = lastNotifiedHealth; - if(healthChanged()) { - changedHealth = true; - lastNotifiedHealth = currHealth; - AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, lastHealth, currHealth, message); - ctx.publishEvent(event); - } + boolean changedHealth = healthHasChanged(); + AgentHealth currentHealth = getCurrentHealth(); - AgentHealthIncident incident = new AgentHealthIncident(LocalDateTime.now().toString(), currHealth, incidentSource, message, changedHealth); + AgentHealthIncident incident = new AgentHealthIncident(LocalDateTime.now().toString(), currentHealth, incidentSource, message, changedHealth); healthIncidentBuffer.put(incident); + + if(changedHealth) { + AgentHealth lastHealth = lastNotifiedHealth; + lastNotifiedHealth = currentHealth; + AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, lastHealth, currentHealth, message); + ctx.publishEvent(event); + } } } @@ -100,7 +142,7 @@ private void triggerEvent( String incidentSource, String message) { * * @return true if the health state changed */ - private boolean healthChanged() { + private boolean healthHasChanged() { return getCurrentHealth() != lastNotifiedHealth; } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/HealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/HealthEventListener.java index af4f01ca5e..20832ab049 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/HealthEventListener.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/HealthEventListener.java @@ -2,7 +2,6 @@ import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; -import rocks.inspectit.ocelot.core.instrumentation.config.event.InstrumentationConfigurationChangedEvent; import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; public interface HealthEventListener { diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java index c3aa5558e0..69d8ba659b 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java @@ -22,11 +22,7 @@ public class PollerWritingHealthEventListener implements HealthEventListener { @Override public void onAgentHealthEvent(AgentHealthChangedEvent event) { List incidentHistory = agentHealthManager.getHistory(); - AgentHealthIncident latestIncident = AgentHealthIncident.getNoneIncident(); - if (!incidentHistory.isEmpty()) { - latestIncident = incidentHistory.get(incidentHistory.size() - 1); - } - AgentHealthState state = new AgentHealthState(latestIncident.getHealth(), latestIncident.getSource(), latestIncident.getMessage(), incidentHistory); + AgentHealthState state = new AgentHealthState(event.getNewHealth(), event.getSource().toString(), event.getMessage(), incidentHistory); httpConfigurationPoller.updateAgentHealthState(state); } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java index e667e80634..401ed4bef3 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthChangedEvent.java @@ -29,11 +29,6 @@ public class AgentHealthChangedEvent extends ApplicationEvent { @Getter private String message; - /** - * Indicates if this event caused a health change. - */ - private boolean changedState; - public AgentHealthChangedEvent(Object source, @NonNull AgentHealth oldHealth, @NonNull AgentHealth newHealth, String message) { super(source); this.oldHealth = oldHealth; diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java index 03809cb45c..27af2daace 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitor.java @@ -28,7 +28,7 @@ public void onLoggingEvent(ILoggingEvent event, Class invalidator) { return; } AgentHealth eventHealth = AgentHealth.fromLogLevel(event.getLevel()); - agentHealthManager.notifyAgentHealth(eventHealth, invalidator, event.getLoggerName(), event.getMessage()); + agentHealthManager.notifyAgentHealth(eventHealth, invalidator, event.getLoggerName(), event.getFormattedMessage()); } @Override diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java new file mode 100644 index 0000000000..ad095d297a --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java @@ -0,0 +1,49 @@ +package rocks.inspectit.ocelot.core.utils; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; + +import java.util.*; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * Buffer with queued AgentHealthIncidents. + * New incidents will be inserted at the beginning of the queue. + * As soon as incidents are put into a full queue, old incidents will be removed to create space + */ +@Component +@RequiredArgsConstructor +public class AgentHealthIncidentBuffer { + private final ConcurrentLinkedQueue buffer = new ConcurrentLinkedQueue<>(); + + private final InspectitEnvironment env; + + /** + * Add new incident to the buffer. + * If the buffer is full, remove the latest incident at first. + * The buffer size will be read from the current inspectIT configuration. + * @param incident new incident + */ + public void put(AgentHealthIncident incident) { + int bufferSize = env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getIncidentBufferSize(); + while(buffer.size() >= bufferSize) buffer.poll(); + buffer.offer(incident); + } + + /** + * Creates a list from the internal queue. + * The list will be reversed, since the queue inserts new elements at the tail + * @return List of agent health incidents + */ + public List asList() { + List incidentList = new LinkedList<>(buffer); + Collections.reverse(incidentList); + return incidentList; + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/RingBuffer.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/RingBuffer.java deleted file mode 100644 index 490c6250e0..0000000000 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/RingBuffer.java +++ /dev/null @@ -1,45 +0,0 @@ -package rocks.inspectit.ocelot.core.utils; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -public class RingBuffer { - - private final AtomicInteger currentIndex = new AtomicInteger(0); - - private final AtomicInteger bufferSize; - private final List buffer; - - public RingBuffer (int bufferSize) { - this.bufferSize = new AtomicInteger(bufferSize); - buffer = new ArrayList<>(bufferSize); - } - - public void put(T element) { - int index = currentIndex.getAndIncrement(); - if (index >= bufferSize.get()) { - currentIndex.set(0); - index = 0; - } - buffer.add(index, element); - } - - public T get(int index) { - return buffer.get(index % buffer.size()); - } - - public List asList() { - if (buffer.isEmpty()) { - return Collections.emptyList(); - } - int oldestIndex = currentIndex.get() - 1; - List elementList = new ArrayList<>(); - for (int i = oldestIndex; i < oldestIndex + this.buffer.size(); i++) { - elementList.add(get(i)); - } - return elementList; - } - -} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java index ff07e1f592..0a0fe5a60b 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java @@ -55,7 +55,7 @@ void triggerAgentHealthManagerNotifyAgentHealthEvent() { healthMonitor.onLoggingEvent(loggingEvent, invalidatorMock); - verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, loggerClass.getCanonicalName(), loggingEvent.getMessage()); + verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, loggerClass.getCanonicalName(), loggingEvent.getFormattedMessage()); } } } From 0afb11139c758f0d23684832803ac32ca7ad72d3 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Fri, 24 Nov 2023 11:29:24 +0100 Subject: [PATCH 12/21] improve blocking of tags --- .../model/metrics/TagGuardSettings.java | 9 +- .../core/metrics/MeasureTagValueGuard.java | 101 ++++++++++-------- .../PollerWritingHealthEventListener.java | 14 +++ .../models/AgentHealthIncidentAddedEvent.java | 22 ++++ .../core/utils/AgentHealthIncidentBuffer.java | 13 ++- 5 files changed, 108 insertions(+), 51 deletions(-) create mode 100644 inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthIncidentAddedEvent.java diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java index d382368815..cf1c05518a 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/metrics/TagGuardSettings.java @@ -23,7 +23,7 @@ public class TagGuardSettings { private Duration scheduleDelay; /** - * File, which contains metrics with their particular recorded tags and their tag values + * File, which contains measures with their particular recorded tags and their tag values */ private String databaseFile; @@ -39,9 +39,10 @@ public class TagGuardSettings { /** * Map containing max values per tag by Measure, e.g., {{'method_duration': 1337}} - *
max-values-per-tag-by-measure: - * - method_duration: 1337
- * - http_in_responestime: 2000 + *
+ * max-values-per-tag-by-measure:
+ * method_duration: 1337
+ * http_in_responestime: 2000 */ @NotNull private Map maxValuesPerTagByMeasure = Collections.emptyMap(); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java index 3c717b2d0c..f3023e82ce 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java @@ -20,6 +20,7 @@ import rocks.inspectit.ocelot.commons.models.health.AgentHealth; import rocks.inspectit.ocelot.config.model.InspectitConfig; import rocks.inspectit.ocelot.config.model.metrics.TagGuardSettings; +import rocks.inspectit.ocelot.config.model.metrics.definition.MetricDefinitionSettings; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction; @@ -44,11 +45,8 @@ @Component @Slf4j public class MeasureTagValueGuard { - private static final String tagOverFlowMessageTemplate = "Overflow for tag %s"; - private static final String tagOverFlowResolvedMessageTemplate = "Overflow resolved for tag %s"; - @Autowired private InspectitEnvironment env; @@ -62,14 +60,16 @@ public class MeasureTagValueGuard { private CommonTagsManager commonTagsManager; @Autowired - private ScheduledExecutorService executorService; + private ScheduledExecutorService executor; private PersistedTagsReaderWriter fileReaderWriter; private volatile boolean isShuttingDown = false; + private boolean hasTagValueOverflow = false; + /** - * Map of measure names and their related set of tag keys, which should be blocked. + * Map of measure names and their related set of tag keys, which are currently blocked. */ private final Map> blockedTagKeysByMeasure = Maps.newHashMap(); @@ -80,12 +80,9 @@ public class MeasureTagValueGuard { @PostConstruct protected void init() { TagGuardSettings tagGuardSettings = env.getCurrentConfig().getMetrics().getTagGuard(); - if (!tagGuardSettings.isEnabled()) { - return; - } + if (!tagGuardSettings.isEnabled()) return; fileReaderWriter = new PersistedTagsReaderWriter(tagGuardSettings.getDatabaseFile(), new ObjectMapper()); - blockTagValuesTask.run(); scheduleTagGuardJob(); log.info(String.format("TagValueGuard started with scheduleDelay %s and database file %s", tagGuardSettings.getScheduleDelay(), tagGuardSettings.getDatabaseFile())); @@ -93,14 +90,12 @@ protected void init() { private void scheduleTagGuardJob() { Duration tagGuardScheduleDelay = env.getCurrentConfig().getMetrics().getTagGuard().getScheduleDelay(); - blockTagValuesFuture = executorService.schedule(blockTagValuesTask, tagGuardScheduleDelay.toNanos(), TimeUnit.NANOSECONDS); + blockTagValuesFuture = executor.schedule(blockTagValuesTask, tagGuardScheduleDelay.toNanos(), TimeUnit.NANOSECONDS); } @PreDestroy protected void stop() { - if (!env.getCurrentConfig().getMetrics().getTagGuard().isEnabled()) { - return; - } + if (!env.getCurrentConfig().getMetrics().getTagGuard().isEnabled()) return; isShuttingDown = true; blockTagValuesFuture.cancel(true); @@ -112,20 +107,18 @@ protected void stop() { * If new tags values have been created, they will be persisted. */ Runnable blockTagValuesTask = () -> { + if (!env.getCurrentConfig().getMetrics().getTagGuard().isEnabled()) return; - if (!env.getCurrentConfig().getMetrics().getTagGuard().isEnabled()) { - return; - } + // read current tag value database + Map>> availableTagsByMeasure = fileReaderWriter.read(); Set copy = latestTags; latestTags = Collections.synchronizedSet(new HashSet<>()); - Map>> availableTagsByMeasure = fileReaderWriter.read(); - + // process new tags copy.forEach(tagsHolder -> { String measureName = tagsHolder.getMeasureName(); Map newTags = tagsHolder.getTags(); - int maxValuesPerTag = getMaxValuesPerTag(measureName, env.getCurrentConfig()); Map> tagValuesByTagKey = availableTagsByMeasure.computeIfAbsent(measureName, k -> Maps.newHashMap()); @@ -133,13 +126,10 @@ protected void stop() { Set tagValues = tagValuesByTagKey.computeIfAbsent(tagKey, (x) -> new HashSet<>()); // if tag value is new AND max values per tag is already reached if (!tagValues.contains(tagValue) && tagValues.size() >= maxValuesPerTag) { - blockedTagKeysByMeasure.computeIfAbsent(measureName, blocked -> Sets.newHashSet()) - .add(tagKey); + blockedTagKeysByMeasure.computeIfAbsent(measureName, measure -> Sets.newHashSet()).add(tagKey); agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, tagKey)); + hasTagValueOverflow = true; } else { - Set blockedTagKeys = blockedTagKeysByMeasure.computeIfAbsent(measureName, blocked -> Sets.newHashSet()); - if(blockedTagKeys.remove(tagKey)) - agentHealthManager.invalidateIncident(this.getClass(), String.format(tagOverFlowResolvedMessageTemplate, tagKey)); tagValues.add(tagValue); } }); @@ -148,26 +138,50 @@ protected void stop() { fileReaderWriter.write(availableTagsByMeasure); - if (!isShuttingDown) { - scheduleTagGuardJob(); + // remove all blocked tags, if no values are stored in the database file + if(availableTagsByMeasure.isEmpty()) blockedTagKeysByMeasure.clear(); + + // independent of processing new tags, check if tags should be blocked or unblocked due to their tag value limit + availableTagsByMeasure.forEach((measureName, tags) -> { + int maxValuesPerTag = getMaxValuesPerTag(measureName, env.getCurrentConfig()); + tags.forEach((tagKey, tagValues) -> { + if(tagValues.size() >= maxValuesPerTag) { + boolean isNewBlockedTag = blockedTagKeysByMeasure.computeIfAbsent(measureName, measure -> Sets.newHashSet()) + .add(tagKey); + if(isNewBlockedTag) { + agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, tagKey)); + hasTagValueOverflow = true; + } + } else { + blockedTagKeysByMeasure.getOrDefault(measureName, Sets.newHashSet()).remove(tagKey); + } + }); + }); + + // invalidate incident, if tag overflow was detected, but no more tags are blocked + boolean noBlockedTagKeys = blockedTagKeysByMeasure.values().stream().allMatch(Set::isEmpty); + if(hasTagValueOverflow && noBlockedTagKeys) { + agentHealthManager.invalidateIncident(this.getClass(), "Overflow for tags resolved"); + hasTagValueOverflow = false; } + if (!isShuttingDown) scheduleTagGuardJob(); }; /** - * Gets the max value per tag for the given measure by hierarchically extracting {@link rocks.inspectit.ocelot.config.model.metrics.definition.MetricDefinitionSettings#maxValuesPerTag} (prio 1), {@link TagGuardSettings#maxValuesPerTagByMeasure} (prio 2) and {@link TagGuardSettings#maxValuesPerTag} (default). + * Gets the max value amount per tag for the given measure by hierarchically extracting + * {@link MetricDefinitionSettings#maxValuesPerTag} (prio 1), + * {@link TagGuardSettings#maxValuesPerTagByMeasure} (prio 2) and + * {@link TagGuardSettings#maxValuesPerTag} (default). * - * @param measureName - * - * @return + * @param measureName the current measure + * @return The maximum amount of tag values for the given measure */ @VisibleForTesting int getMaxValuesPerTag(String measureName, InspectitConfig config) { int maxValuesPerTag = config.getMetrics().getDefinitions().get(measureName).getMaxValuesPerTag(); - if (maxValuesPerTag > 0) { - return maxValuesPerTag; - } + if (maxValuesPerTag > 0) return maxValuesPerTag; Map maxValuesPerTagPerMeasuresMap = config.getMetrics() .getTagGuard() @@ -178,18 +192,21 @@ int getMaxValuesPerTag(String measureName, InspectitConfig config) { } /** - * - * @param context - * @param metricAccessor - * @return + * Creates the full tag context, including all specified tags, for the current measure + * @param context current context + * @param metricAccessor accessor for the measure as well as the particular tags + * @return TagContext including all tags for the current measure */ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAccessor metricAccessor) { Map tags = Maps.newHashMap(); String measureName = metricAccessor.getName(); InspectitContextImpl inspectitContext = context.getInspectitContext(); - Set blockedTagKeys = blockedTagKeysByMeasure.getOrDefault(measureName, Sets.newHashSet()); TagGuardSettings tagGuardSettings = env.getCurrentConfig().getMetrics().getTagGuard(); + Set blockedTagKeys = blockedTagKeysByMeasure.getOrDefault(measureName, Sets.newHashSet()); + log.debug("Currently blocked tag keys for measure {}, due to exceeding the configured tag value limit: {}", + measureName, blockedTagKeys); + // first common tags to allow to overwrite by constant or data tags commonTagsManager.getCommonTagKeys().forEach(commonTagKey -> { Optional.ofNullable(inspectitContext.getData(commonTagKey.getName())) @@ -220,7 +237,7 @@ public TagContext getTagContext(IHookAction.ExecutionContext context, MetricAcce TagContextBuilder tagContextBuilder = Tags.getTagger().emptyBuilder(); tags.forEach((key, value) -> tagContextBuilder.putLocal(TagKey.create(key), TagUtils.createTagValue(key, value))); - // Store the new tags for this measure as simple object and delay traversing trough tagKeys to async job + // store the new tags for this measure as simple object and delay traversing trough tagKeys to async job latestTags.add(new TagsHolder(measureName, tags)); return tagContextBuilder.build(); @@ -256,10 +273,10 @@ public Map>> read() { }); return tags; } catch (Exception e) { - log.error("Error loading tag value database from persistence file '{}'", fileName, e); + log.error("Error loading tag-guard database from persistence file '{}'", fileName, e); } } else { - log.info("No tag value database available. Assuming first Agent deployment."); + log.info("Could not find tag-guard database file. File will be created during next write"); } } return Maps.newHashMap(); @@ -273,7 +290,7 @@ public void write(Map>> tagValues) { String tagValuesString = mapper.writeValueAsString(tagValues); Files.write(path, tagValuesString.getBytes(StandardCharsets.UTF_8)); } catch (IOException e) { - log.error("Error writing tag value database to file '{}'", fileName, e); + log.error("Error writing tag-guard database to file '{}'", fileName, e); } } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java index 69d8ba659b..0302ccae19 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java @@ -1,12 +1,15 @@ package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; import rocks.inspectit.ocelot.commons.models.health.AgentHealthState; import rocks.inspectit.ocelot.core.config.propertysources.http.HttpConfigurationPoller; import rocks.inspectit.ocelot.core.selfmonitoring.AgentHealthManager; import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthIncidentAddedEvent; import java.util.List; @@ -22,7 +25,18 @@ public class PollerWritingHealthEventListener implements HealthEventListener { @Override public void onAgentHealthEvent(AgentHealthChangedEvent event) { List incidentHistory = agentHealthManager.getHistory(); + AgentHealthState state = new AgentHealthState(event.getNewHealth(), event.getSource().toString(), event.getMessage(), incidentHistory); httpConfigurationPoller.updateAgentHealthState(state); } + + @Async + @EventListener + public void onAgentHealthIncidentEvent(AgentHealthIncidentAddedEvent event) { + List incidentHistory = event.getCurrentIncidents(); + AgentHealthIncident latestIncident = incidentHistory.get(0); + + AgentHealthState state = new AgentHealthState(latestIncident.getHealth(), latestIncident.getSource(), latestIncident.getMessage(), incidentHistory); + httpConfigurationPoller.updateAgentHealthState(state); + } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthIncidentAddedEvent.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthIncidentAddedEvent.java new file mode 100644 index 0000000000..92769f5a8c --- /dev/null +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthIncidentAddedEvent.java @@ -0,0 +1,22 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.event.models; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; +import rocks.inspectit.ocelot.core.utils.AgentHealthIncidentBuffer; + +import java.util.List; + +/** + * Fired by {@link AgentHealthIncidentBuffer} whenever a new incident has been added. + */ +public class AgentHealthIncidentAddedEvent extends ApplicationEvent { + + @Getter + private final List currentIncidents; + + public AgentHealthIncidentAddedEvent(Object source, List currentIncidents) { + super(source); + this.currentIncidents = currentIncidents; + } +} diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java index ad095d297a..5a7fb3dc48 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java @@ -1,16 +1,14 @@ package rocks.inspectit.ocelot.core.utils; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthIncidentAddedEvent; import java.util.*; -import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; /** * Buffer with queued AgentHealthIncidents. @@ -20,10 +18,13 @@ @Component @RequiredArgsConstructor public class AgentHealthIncidentBuffer { - private final ConcurrentLinkedQueue buffer = new ConcurrentLinkedQueue<>(); + + private final ApplicationContext ctx; private final InspectitEnvironment env; + private final ConcurrentLinkedQueue buffer = new ConcurrentLinkedQueue<>(); + /** * Add new incident to the buffer. * If the buffer is full, remove the latest incident at first. @@ -33,7 +34,9 @@ public class AgentHealthIncidentBuffer { public void put(AgentHealthIncident incident) { int bufferSize = env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getIncidentBufferSize(); while(buffer.size() >= bufferSize) buffer.poll(); + buffer.offer(incident); + ctx.publishEvent(new AgentHealthIncidentAddedEvent(this, asList())); } /** From f8206dab4b7ff0b429693c30887b965e55680fef Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Tue, 28 Nov 2023 11:01:22 +0100 Subject: [PATCH 13/21] add tests for TagValueGuard --- .../exporter/OtlpMetricsExporterService.java | 2 +- .../core/metrics/MeasureTagValueGuard.java | 1 + .../ExporterServiceIntegrationTestBase.java | 42 +-- .../OtlpMetricsExporterServiceIntTest.java | 20 +- .../metrics/MeasureTagValueGuardIntTest.java | 128 +++++---- .../metrics/MeasureTagValueGuardTest.java | 263 +++++++++++++----- 6 files changed, 315 insertions(+), 141 deletions(-) diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterService.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterService.java index 308045565e..5f03a6e38c 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterService.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterService.java @@ -34,7 +34,7 @@ public class OtlpMetricsExporterService extends DynamicallyActivatableMetricsExp /** * The {@link MetricExporter} for exporting metrics via OTLP */ - MetricExporter metricExporter; + MetricExporter metricExporter; /** * The {@link PeriodicMetricReaderBuilder} for reading metrics to the log diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java index f3023e82ce..415a1a7379 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java @@ -106,6 +106,7 @@ protected void stop() { * the specific tag value limit. * If new tags values have been created, they will be persisted. */ + @VisibleForTesting Runnable blockTagValuesTask = () -> { if (!env.getCurrentConfig().getMetrics().getTagGuard().isEnabled()) return; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java index fdc5abeb8a..08f6610883 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/ExporterServiceIntegrationTestBase.java @@ -52,7 +52,9 @@ import static org.testcontainers.Testcontainers.exposeHostPorts; /** - * Base class for exporter integration tests. Verifies integration with the OpenTelemetry Collector. The Collector can be configured to accept the required data over gRPC or HTTP and exports the data over gRPC to a server running in process, allowing assertions to be made against the data. + * Base class for exporter integration tests. Verifies integration with the OpenTelemetry Collector. + * The Collector can be configured to accept the required data over gRPC or HTTP and exports the data over gRPC + * to a server running in process, allowing assertions to be made against the data. * This class is based on the {@link io.opentelemetry.integrationtest.OtlpExporterIntegrationTest} */ @Testcontainers(disabledWithoutDocker = true) @@ -154,7 +156,8 @@ static Tracer getOtelTracer() { } /** - * Gets the desired endpoint of the {@link #collector} constructed as 'http://{@link GenericContainer#getHost() collector.getHost()}:{@link GenericContainer#getMappedPort(int) collector.getMappedPort(port)}/path' + * Gets the desired endpoint of the {@link #collector} constructed as + * 'http://{@link GenericContainer#getHost() collector.getHost()}:{@link GenericContainer#getMappedPort(int) collector.getMappedPort(port)}/path' * * @param originalPort the port to get the actual mapped port for * @param path the path @@ -166,7 +169,8 @@ static String getEndpoint(Integer originalPort, String path) { } /** - * Gets the desired endpoint of the {@link #collector} constructed as 'http://{@link GenericContainer#getHost() collector.getHost()}:{@link GenericContainer#getMappedPort(int) collector.getMappedPort(port)}' + * Gets the desired endpoint of the {@link #collector} constructed as + * 'http://{@link GenericContainer#getHost() collector.getHost()}:{@link GenericContainer#getMappedPort(int) collector.getMappedPort(port)}' * * @param originalPort the port to get the actual mapped port for * @@ -204,23 +208,24 @@ void makeSpansAndFlush(String parentSpanName, String childSpanName) { * Records some dummy metrics and flushes them. */ void recordMetricsAndFlush() { - recordMetricsAndFlush(1, "my-key", "my-val"); + recordMetricsAndFlush("my-counter", 1, "my-key", "my-val"); } /** * Records a counter with the given value and tag * + * @param measureName the name of the measure * @param value the value to add to the counter * @param tagKey the key of the tag * @param tagVal the value of the tag */ - protected void recordMetricsAndFlush(int value, String tagKey, String tagVal) { + protected void recordMetricsAndFlush(String measureName, int value, String tagKey, String tagVal) { // get the meter and create a counter Meter meter = GlobalOpenTelemetry.getMeterProvider() .meterBuilder("rocks.inspectit.ocelot") .setInstrumentationVersion("0.0.1") .build(); - LongCounter counter = meter.counterBuilder("my-counter").setDescription("My counter").setUnit("1").build(); + LongCounter counter = meter.counterBuilder(measureName).setDescription("My counter").setUnit("1").build(); // record counter counter.add(value, Attributes.of(AttributeKey.stringKey(tagKey), tagVal)); @@ -230,13 +235,15 @@ protected void recordMetricsAndFlush(int value, String tagKey, String tagVal) { } /** - * Verifies that the metric with the given value and key/value attribute (tag) has been exported to and received by the {@link #grpcServer} + * Verifies that the metric with the given value and key/value attribute (tag) has been exported to and received + * by the {@link #grpcServer} * - * @param value - * @param tagKey - * @param tagVal + * @param measureName the name of the measure + * @param value the value of the measure + * @param tagKey the key of the tag + * @param tagVal the value of the tag */ - protected void awaitMetricsExported(int value, String tagKey, String tagVal) { + protected void awaitMetricsExported(String measureName, int value, String tagKey, String tagVal) { // create the attribute that we will use to verify that the metric has been written KeyValue attribute = KeyValue.newBuilder() .setKey(tagKey) @@ -247,12 +254,11 @@ protected void awaitMetricsExported(int value, String tagKey, String tagVal) { .untilAsserted(() -> assertThat(grpcServer.metricRequests.stream()).anyMatch(mReq -> mReq.getResourceMetricsList() .stream() .anyMatch(rm -> - // check for the "my-counter" metrics - rm.getInstrumentationLibraryMetrics(0).getMetrics(0).getName().equals("my-counter") + // check for the specified measure + rm.getInstrumentationLibraryMetrics(0) + .getMetricsList().stream() + .filter(metric -> metric.getName().equals(measureName)) // check for the specific attribute and value - && rm.getInstrumentationLibraryMetrics(0) - .getMetricsList() - .stream() .anyMatch(metric -> metric.getSum() .getDataPointsList() .stream() @@ -261,7 +267,9 @@ protected void awaitMetricsExported(int value, String tagKey, String tagVal) { } /** - * Waits for the spans to be exported to and received by the {@link #grpcServer}. This method asserts that Spans with the given names exist and that the child's {@link io.opentelemetry.proto.trace.v1.Span#getParentSpanId()} equals the parent's {@link io.opentelemetry.proto.trace.v1.Span#getSpanId()} + * Waits for the spans to be exported to and received by the {@link #grpcServer}. This method asserts that Spans + * with the given names exist and that the child's {@link io.opentelemetry.proto.trace.v1.Span#getParentSpanId()} + * equals the parent's {@link io.opentelemetry.proto.trace.v1.Span#getSpanId()} * * @param parentSpanName the name of the parent span * @param childSpanName the name of the child span diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterServiceIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterServiceIntTest.java index 062b6d4348..a344d4beb3 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterServiceIntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/exporter/OtlpMetricsExporterServiceIntTest.java @@ -39,12 +39,10 @@ public class OtlpMetricsExporterServiceIntTest extends ExporterServiceIntegratio @Autowired InspectitEnvironment environment; + String measure = "my-counter"; String tagKeyGrpc = "otlp-grpc-metrics-test"; - String tagKeyHttp = "otlp-grpc-metrics-test"; - String tagVal = "random-val"; - int metricVal = 1337; @BeforeEach @@ -66,9 +64,9 @@ void verifyMetricsWrittenGrpc() { .pollInterval(500, TimeUnit.MILLISECONDS) .untilAsserted(() -> assertThat(service.isEnabled()).isTrue()); - recordMetricsAndFlush(metricVal, tagKeyGrpc, tagVal); + recordMetricsAndFlush(measure, metricVal, tagKeyGrpc, tagVal); - awaitMetricsExported(metricVal, tagKeyGrpc, tagVal); + awaitMetricsExported(measure, metricVal, tagKeyGrpc, tagVal); } @DirtiesContext @@ -85,9 +83,9 @@ void verifyMetricsWrittenHttp() { .pollInterval(500, TimeUnit.MILLISECONDS) .untilAsserted(() -> assertThat(service.isEnabled()).isTrue()); - recordMetricsAndFlush(metricVal, tagKeyHttp, tagVal); + recordMetricsAndFlush(measure, metricVal, tagKeyHttp, tagVal); - awaitMetricsExported(metricVal, tagKeyHttp, tagVal); + awaitMetricsExported(measure, metricVal, tagKeyHttp, tagVal); } @@ -139,8 +137,8 @@ void testAggregationTemporalityCumulative(){ assertThat(service.isEnabled()).isTrue(); - recordMetricsAndFlush(1, "key", "val"); - recordMetricsAndFlush(2, "key", "val"); + recordMetricsAndFlush(measure, 1, "key", "val"); + recordMetricsAndFlush(measure, 2, "key", "val"); await().atMost(30, TimeUnit.SECONDS) .untilAsserted(() -> assertThat(grpcServer.metricRequests.stream()).anyMatch(mReq -> mReq.getResourceMetricsList() @@ -171,8 +169,8 @@ void testAggregationTemporalityDelta(){ assertThat(service.isEnabled()).isTrue(); - recordMetricsAndFlush(1, "key", "val"); - recordMetricsAndFlush(2, "key", "val"); + recordMetricsAndFlush(measure, 1, "key", "val"); + recordMetricsAndFlush(measure, 2, "key", "val"); await().atMost(30, TimeUnit.SECONDS) .untilAsserted(() -> assertThat(grpcServer.metricRequests.stream()).anyMatch(mReq -> mReq.getResourceMetricsList() diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java index 063e121a0a..99f5167390 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardIntTest.java @@ -1,83 +1,113 @@ package rocks.inspectit.ocelot.core.metrics; -import io.github.netmikey.logunit.api.LogCapturer; -import io.opentelemetry.proto.common.v1.AnyValue; -import io.opentelemetry.proto.common.v1.KeyValue; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import rocks.inspectit.ocelot.config.model.exporters.ExporterEnabledState; import rocks.inspectit.ocelot.config.model.exporters.TransportProtocol; +import rocks.inspectit.ocelot.config.model.metrics.MetricsSettings; +import rocks.inspectit.ocelot.config.model.metrics.definition.MetricDefinitionSettings; +import rocks.inspectit.ocelot.config.model.metrics.definition.MetricDefinitionSettings.MeasureType; +import rocks.inspectit.ocelot.config.model.metrics.definition.ViewDefinitionSettings; +import rocks.inspectit.ocelot.config.model.metrics.definition.ViewDefinitionSettings.Aggregation; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.exporter.ExporterServiceIntegrationTestBase; -import rocks.inspectit.ocelot.core.exporter.OtlpMetricsExporterService; +import rocks.inspectit.ocelot.core.instrumentation.config.model.propagation.PropagationMetaData; +import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; +import rocks.inspectit.ocelot.core.instrumentation.hook.VariableAccessor; +import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction.ExecutionContext; +import rocks.inspectit.ocelot.core.instrumentation.hook.actions.MetricsRecorder; +import rocks.inspectit.ocelot.core.instrumentation.hook.actions.model.MetricAccessor; +import rocks.inspectit.ocelot.core.metrics.percentiles.PercentileViewManager; +import rocks.inspectit.ocelot.core.tags.CommonTagsManager; import java.time.Duration; -import java.util.concurrent.TimeUnit; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; +import java.util.*; /** * Integration Test Class for {@link MeasureTagValueGuard} */ +@DirtiesContext public class MeasureTagValueGuardIntTest extends ExporterServiceIntegrationTestBase { - public static final String OTLP_METRICS_PATH = "/v1/metrics"; - - - @RegisterExtension - LogCapturer warnLogs = LogCapturer.create() - .captureForType(OtlpMetricsExporterService.class, org.slf4j.event.Level.WARN); @Autowired - OtlpMetricsExporterService service; - + InspectitEnvironment env; @Autowired - InspectitEnvironment environment; - - static final String TAG_KEY = "tag-value-guard-test-tag-key"; - - @BeforeEach - void clearRequests() { - getGrpcServer().getMetricRequests().clear(); + CommonTagsManager commonTagsManager; + @Autowired + MeasuresAndViewsManager metricsManager; + @Autowired + MeasureTagValueGuard tagValueGuard; + @Autowired + PercentileViewManager percentileViewManager; + + static final String MEASURE_NAME = "my-counter"; + static final int VALUE = 42; + static final String TAG_KEY = "test-tag-key"; + static final String TAG_VALUE_1 = "test-tag-value-1"; + static final String TAG_VALUE_2 = "test-tag-value-2"; + static final String OVERFLOW = "overflow"; + + private ExecutionContext createExecutionContext() { + InspectitContextImpl ctx = InspectitContextImpl.createFromCurrent(new HashMap<>(), PropagationMetaData.builder().build(), false); + return new ExecutionContext(null, this, "return", null, null, + ctx, null); } /** - * TODO: Update test - * Since recordMetricsAndFlush() creates metrics directly in OpenTelemetry, MeasureTagValueGuard cannot be applied - * Thus to test MeasureTagValueGuard, metrics have to be created with InspectIT + * Update properties for OpenTelemetry-Collector & Tag-Guard + * Create metric-definition for MEASURE_NAME */ - @DirtiesContext - @Test - @Disabled("Metrics need to be created with InspectIT") - void testValueGuardLimitExceed() throws InterruptedException { + @BeforeEach + void updateProperties() { + ViewDefinitionSettings viewDefinition = new ViewDefinitionSettings(); + viewDefinition.setAggregation(Aggregation.SUM); + viewDefinition.setTags(Collections.singletonMap(TAG_KEY, true)); + + MetricDefinitionSettings metricDefinition = new MetricDefinitionSettings(); + metricDefinition.setEnabled(true); + metricDefinition.setUnit("1"); + metricDefinition.setType(MeasureType.LONG); + metricDefinition.setViews(Collections.singletonMap(MEASURE_NAME, viewDefinition)); + + MetricsSettings metricsSettings = new MetricsSettings(); + metricsSettings.setDefinitions(Collections.singletonMap(MEASURE_NAME, metricDefinition)); + updateProperties(mps -> { mps.setProperty("inspectit.exporters.metrics.otlp.endpoint", getEndpoint(COLLECTOR_OTLP_GRPC_PORT)); mps.setProperty("inspectit.exporters.metrics.otlp.export-interval", "500ms"); mps.setProperty("inspectit.exporters.metrics.otlp.enabled", ExporterEnabledState.ENABLED); mps.setProperty("inspectit.exporters.metrics.otlp.protocol", TransportProtocol.GRPC); - mps.setProperty("inspectit.metrics.tag-guard.max-tag-values-per-tag", 2); + mps.setProperty("inspectit.metrics.tag-guard.enabled", true); + mps.setProperty("inspectit.metrics.tag-guard.max-values-per-tag", 1); mps.setProperty("inspectit.metrics.tag-guard.schedule-delay", Duration.ofMillis(500)); + mps.setProperty("inspectit.metrics.tag-guard.overflow-replacement", OVERFLOW); + mps.setProperty("inspectit.metrics.definitions." + MEASURE_NAME, metricDefinition); }); - - await().atMost(5, TimeUnit.SECONDS) - .pollInterval(500, TimeUnit.MILLISECONDS) - .untilAsserted(() -> assertThat(service.isEnabled()).isTrue()); - - recordMetricsAndFlush(1, TAG_KEY, "1"); - recordMetricsAndFlush(2, TAG_KEY, "2"); - - awaitMetricsExported(1, TAG_KEY, "1"); - awaitMetricsExported(2, TAG_KEY, "2"); - - Thread.sleep(1000); - recordMetricsAndFlush(3, TAG_KEY, "3"); - awaitMetricsExported(3, TAG_KEY, "TAG_LIMIT_EXCEEDED"); - } - + @Test + void verifyTagValueOverflowReplacement() { + VariableAccessor variableAccessor = (context) -> VALUE; + Map dataTags = new HashMap<>(); + dataTags.put(TAG_KEY, (context) -> TAG_VALUE_1); + MetricAccessor metricAccessor = new MetricAccessor(MEASURE_NAME, variableAccessor, new HashMap<>(), dataTags); + List metrics = new LinkedList<>(); + metrics.add(metricAccessor); + + MetricsRecorder metricsRecorder = new MetricsRecorder(metrics, commonTagsManager, metricsManager, tagValueGuard); + ExecutionContext executionContext = createExecutionContext(); + + metricsRecorder.execute(executionContext); + awaitMetricsExported(MEASURE_NAME, VALUE, TAG_KEY, TAG_VALUE_1); + + // for some reason, the ScheduledExecutorService is not working inside tests + tagValueGuard.blockTagValuesTask.run(); + + dataTags.put(TAG_KEY, (context) -> TAG_VALUE_2); + metricsRecorder.execute(executionContext); + // tag should have been replaced, due to overflow + awaitMetricsExported(MEASURE_NAME, VALUE, TAG_KEY, OVERFLOW); + } } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java index 5827055e56..d26b4b00c9 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuardTest.java @@ -2,26 +2,37 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Maps; +import io.opencensus.tags.TagContext; +import io.opencensus.tags.TagKey; +import io.opencensus.tags.TagValue; +import io.opencensus.tags.Tags; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Answers; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; -import rocks.inspectit.ocelot.config.model.InspectitConfig; -import rocks.inspectit.ocelot.config.model.metrics.MetricsSettings; import rocks.inspectit.ocelot.config.model.metrics.TagGuardSettings; import rocks.inspectit.ocelot.config.model.metrics.definition.MetricDefinitionSettings; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.instrumentation.config.model.propagation.PropagationMetaData; +import rocks.inspectit.ocelot.core.instrumentation.context.InspectitContextImpl; +import rocks.inspectit.ocelot.core.instrumentation.hook.VariableAccessor; +import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction.ExecutionContext; + +import rocks.inspectit.ocelot.core.instrumentation.hook.actions.model.MetricAccessor; +import rocks.inspectit.ocelot.core.selfmonitoring.AgentHealthManager; +import rocks.inspectit.ocelot.core.tags.CommonTagsManager; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.time.Duration; +import java.util.*; +import java.util.concurrent.ScheduledExecutorService; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; @@ -31,64 +42,83 @@ class MeasureTagValueGuardTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private InspectitEnvironment environment; - @Mock - private InspectitConfig inspectitConfig; - + private CommonTagsManager commonTagsManager; @Mock - private MetricsSettings metricsSettings; - + private AgentHealthManager agentHealthManager; + @Mock + private ScheduledExecutorService executor; + @Mock + MeasureTagValueGuard.PersistedTagsReaderWriter readerWriter; @InjectMocks private MeasureTagValueGuard guard = new MeasureTagValueGuard(); - private Map>> tagValues; + private ExecutionContext context; + private final static int defaultMaxValuePerTag = 42; + private final static String OVERFLOW = "overflow"; + + /** + * Helper method to configure tag value limits as well as metrics settings before testing + * @param maxValuesPerTagByMeasure Map with measures and their tag value limits + * @param settings MetricDefinitionSettings, which should be applied for "measure" + */ + private void setupTagGuard(Map maxValuesPerTagByMeasure, MetricDefinitionSettings settings) { + TagGuardSettings tagGuardSettings = new TagGuardSettings(); + tagGuardSettings.setEnabled(true); + tagGuardSettings.setScheduleDelay(Duration.ofSeconds(1)); + tagGuardSettings.setOverflowReplacement(OVERFLOW); + tagGuardSettings.setMaxValuesPerTag(defaultMaxValuePerTag); + if (maxValuesPerTagByMeasure != null) + tagGuardSettings.setMaxValuesPerTagByMeasure(maxValuesPerTagByMeasure); + + when(environment.getCurrentConfig().getMetrics().getTagGuard()).thenReturn(tagGuardSettings); + + if (settings != null) + when(environment.getCurrentConfig() + .getMetrics() + .getDefinitions() + .get("measure")).thenReturn(settings); + } - private static Map>> createTagValues() { - Set tagValue = new HashSet<>(); - tagValue.add("value1"); - tagValue.add("value2"); - tagValue.add("value3"); + @Nested + public class ReaderWrite { - Map> tagKeys2Values = Maps.newHashMap(); - tagKeys2Values.put("tagKey_1", tagValue); + private String generateTempFilePath() { + try { + Path tempFile = Files.createTempFile("inspectit", ""); + System.out.println(tempFile); + Files.delete(tempFile); + tempFile.toFile().deleteOnExit(); + return tempFile.toString(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } - Map>> measure2TagKeys = Maps.newHashMap(); - measure2TagKeys.put("measure_1", tagKeys2Values); + private Map>> createTagValues() { + Set tagValue = new HashSet<>(); + tagValue.add("value1"); + tagValue.add("value2"); + tagValue.add("value3"); - return measure2TagKeys; - } + Map> tagKeys2Values = Maps.newHashMap(); + tagKeys2Values.put("tagKey_1", tagValue); - private static String generateTempFilePath() { - try { - Path tempFile = Files.createTempFile("inspectit", ""); - System.out.println(tempFile); - Files.delete(tempFile); - tempFile.toFile().deleteOnExit(); - return tempFile.toString(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } + Map>> measure2TagKeys = Maps.newHashMap(); + measure2TagKeys.put("measure_1", tagKeys2Values); - @Nested - public class ReaderWrite { + return measure2TagKeys; + } @Test public void testReadWriteTagsFromDisk() { - String tempFileName = generateTempFilePath(); - //when(environment.getCurrentConfig()).thenReturn(inspectitConfig); - //when(inspectitConfig.getMetrics()).thenReturn(metricsSettings); - //when(metricsSettings.getTagGuardScheduleDelay()).thenReturn(Duration.of(1, ChronoUnit.MILLIS)); - //when(metricsSettings.getTagGuardDatabaseFile()).thenReturn(generateTempFilePath()); - MeasureTagValueGuard.PersistedTagsReaderWriter readerWriter = new MeasureTagValueGuard.PersistedTagsReaderWriter(tempFileName, new ObjectMapper()); Map>> tagValues = createTagValues(); readerWriter.write(tagValues); Map>> loaded = readerWriter.read(); - //Assertions.assertThat(tagValues).isEqualTo(loaded); assertThat(loaded).flatExtracting("measure_1") .flatExtracting("tagKey_1") .containsExactlyInAnyOrder("value1", "value2", "value3"); @@ -99,25 +129,6 @@ public void testReadWriteTagsFromDisk() { @Nested public class getMaxValuesPerTag { - final private static int defaultMaxValuePerTag = 42; - - private void setupTagGuard(Map maxValuesPerTagByMeasure, MetricDefinitionSettings settings) { - TagGuardSettings tagGuardSettings = new TagGuardSettings(); - tagGuardSettings.setEnabled(true); - tagGuardSettings.setMaxValuesPerTag(defaultMaxValuePerTag); - if (maxValuesPerTagByMeasure != null) { - tagGuardSettings.setMaxValuesPerTagByMeasure(maxValuesPerTagByMeasure); - } - - when(environment.getCurrentConfig().getMetrics().getTagGuard()).thenReturn(tagGuardSettings); - if (settings != null) { - when(environment.getCurrentConfig() - .getMetrics() - .getDefinitions() - .get("measure")).thenReturn(settings); - } - } - @Test public void getMaxValuesPerTagByDefault() { setupTagGuard(null, null); @@ -162,4 +173,130 @@ public void getMaxValuesPerTagWhenAllSettingsAreSet() { } } -} \ No newline at end of file + @Nested + public class getTagContext { + + static final String TAG_KEY = "test-tag-key"; + static final String TAG_VALUE_1 = "test-tag-value-1"; + static final String TAG_VALUE_2 = "test-tag-value-2"; + private MetricAccessor metricAccessor1; + private MetricAccessor metricAccessor2; + + private ExecutionContext createExecutionContext() { + InspectitContextImpl ctx = InspectitContextImpl.createFromCurrent(new HashMap<>(), PropagationMetaData.builder().build(), false); + return new ExecutionContext(null, this, "return", null, null, + ctx, null); + } + + @BeforeEach + void setUp() { + VariableAccessor metricValueAccess = Mockito.mock(VariableAccessor.class); + metricAccessor1 = new MetricAccessor("measure", metricValueAccess, Collections.emptyMap(), + Collections.singletonMap(TAG_KEY, (context) -> TAG_VALUE_1)); + metricAccessor2 = new MetricAccessor("measure", metricValueAccess, Collections.emptyMap(), + Collections.singletonMap(TAG_KEY, (context) -> TAG_VALUE_2)); + + context = createExecutionContext(); + + when(readerWriter.read()).thenReturn(new HashMap<>()); + when(commonTagsManager.getCommonTagKeys()).thenReturn(Collections.emptyList()); + } + + @Test + void verifyOverflow() { + Map maxValuesPerTagByMeasure = new HashMap<>(); + maxValuesPerTagByMeasure.put("measure", 1); + setupTagGuard(maxValuesPerTagByMeasure, null); + + TagContext expectedTagContext = Tags.getTagger() + .emptyBuilder() + .putLocal(TagKey.create(TAG_KEY), TagValue.create(TAG_VALUE_1)) + .build(); + + TagContext expectedOverflow = Tags.getTagger() + .emptyBuilder() + .putLocal(TagKey.create(TAG_KEY), TagValue.create(OVERFLOW)) + .build(); + + // first tag value should be accepted + TagContext tagContext = guard.getTagContext(context, metricAccessor1); + guard.blockTagValuesTask.run(); + // second tag value will exceed the limit + TagContext overflow = guard.getTagContext(context, metricAccessor2); + + assertThat(tagContext.equals(expectedTagContext)).isTrue(); + assertThat(overflow.equals(expectedOverflow)).isTrue(); + } + + @Test + void verifyOverflowResolvedAfterLimitIncrease() { + Map maxValuesPerTagByMeasure = new HashMap<>(); + maxValuesPerTagByMeasure.put("measure", 1); + setupTagGuard(maxValuesPerTagByMeasure, null); + + TagContext expectedTagContext1 = Tags.getTagger() + .emptyBuilder() + .putLocal(TagKey.create(TAG_KEY), TagValue.create(TAG_VALUE_1)) + .build(); + + TagContext expectedTagContext2 = Tags.getTagger() + .emptyBuilder() + .putLocal(TagKey.create(TAG_KEY), TagValue.create(TAG_VALUE_2)) + .build(); + + TagContext expectedOverflow = Tags.getTagger() + .emptyBuilder() + .putLocal(TagKey.create(TAG_KEY), TagValue.create(OVERFLOW)) + .build(); + + // first tag value should be accepted + TagContext tagContext1 = guard.getTagContext(context, metricAccessor1); + guard.blockTagValuesTask.run(); + // second tag value will exceed the limit + TagContext overflow = guard.getTagContext(context, metricAccessor2); + // increase tag limit to resolve overflow + maxValuesPerTagByMeasure.put("measure", 5); + setupTagGuard(maxValuesPerTagByMeasure, null); + guard.blockTagValuesTask.run(); + // second tag value should be accepted + TagContext tagContext2 = guard.getTagContext(context, metricAccessor2); + + assertThat(tagContext1.equals(expectedTagContext1)).isTrue(); + assertThat(overflow.equals(expectedOverflow)).isTrue(); + assertThat(tagContext2.equals(expectedTagContext2)).isTrue(); + } + + @Test + void verifyOverflowNotResolvedAfterLimitIncrease() { + Map maxValuesPerTagByMeasure = new HashMap<>(); + maxValuesPerTagByMeasure.put("measure", 1); + setupTagGuard(maxValuesPerTagByMeasure, null); + + TagContext expectedTagContext1 = Tags.getTagger() + .emptyBuilder() + .putLocal(TagKey.create(TAG_KEY), TagValue.create(TAG_VALUE_1)) + .build(); + + TagContext expectedOverflow = Tags.getTagger() + .emptyBuilder() + .putLocal(TagKey.create(TAG_KEY), TagValue.create(OVERFLOW)) + .build(); + + // first tag value should be accepted + TagContext tagContext1 = guard.getTagContext(context, metricAccessor1); + guard.blockTagValuesTask.run(); + // second tag value will exceed the limit + TagContext overflow1 = guard.getTagContext(context, metricAccessor2); + // increase tag limit to resolve overflow + maxValuesPerTagByMeasure.put("measure", 2); + setupTagGuard(maxValuesPerTagByMeasure, null); + guard.blockTagValuesTask.run(); + // second tag value should be accepted + TagContext overflow2 = guard.getTagContext(context, metricAccessor2); + + assertThat(tagContext1.equals(expectedTagContext1)).isTrue(); + assertThat(overflow1.equals(expectedOverflow)).isTrue(); + assertThat(overflow2.equals(expectedOverflow)).isTrue(); + } + } +} From 77d1e45f60cdce57666416a3a80d426a423bf9c7 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Tue, 28 Nov 2023 15:18:02 +0100 Subject: [PATCH 14/21] filter unnecessary health incidents --- .../core/metrics/MeasureTagValueGuard.java | 6 ++-- .../selfmonitoring/AgentHealthManager.java | 31 ++++++++++++++----- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java index 415a1a7379..c670beb445 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/metrics/MeasureTagValueGuard.java @@ -128,7 +128,8 @@ protected void stop() { // if tag value is new AND max values per tag is already reached if (!tagValues.contains(tagValue) && tagValues.size() >= maxValuesPerTag) { blockedTagKeysByMeasure.computeIfAbsent(measureName, measure -> Sets.newHashSet()).add(tagKey); - agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, tagKey)); + agentHealthManager.notifyAgentHealth(AgentHealth.ERROR, this.getClass(), this.getClass().getName(), + String.format(tagOverFlowMessageTemplate, tagKey)); hasTagValueOverflow = true; } else { tagValues.add(tagValue); @@ -150,7 +151,8 @@ protected void stop() { boolean isNewBlockedTag = blockedTagKeysByMeasure.computeIfAbsent(measureName, measure -> Sets.newHashSet()) .add(tagKey); if(isNewBlockedTag) { - agentHealthManager.handleInvalidatableHealth(AgentHealth.ERROR, this.getClass(), String.format(tagOverFlowMessageTemplate, tagKey)); + agentHealthManager.notifyAgentHealth(AgentHealth.ERROR, this.getClass(), this.getClass().getName(), + String.format(tagOverFlowMessageTemplate, tagKey)); hasTagValueOverflow = true; } } else { diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java index 4b527f7d0c..1096fd7b73 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java @@ -1,5 +1,6 @@ package rocks.inspectit.ocelot.core.selfmonitoring; +import ch.qos.logback.classic.Level; import com.google.common.annotations.VisibleForTesting; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -69,18 +70,22 @@ public void notifyAgentHealth(AgentHealth eventHealth, Class invalidator, Str handleInvalidatableHealth(eventHealth, invalidator, message); } - public void handleInvalidatableHealth(AgentHealth eventHealth, Class invalidator, String eventMessage) { + private void handleInvalidatableHealth(AgentHealth eventHealth, Class invalidator, String eventMessage) { invalidatableHealth.merge(invalidator, eventHealth, AgentHealth::mostSevere); - triggerAgentHealthChangedEvent(invalidator.getTypeName(), eventMessage); + + boolean shouldCreateIncident = eventHealth.isMoreSevereOrEqualTo(AgentHealth.WARNING); + triggerAgentHealthChangedEvent(invalidator.getTypeName(), eventMessage, shouldCreateIncident); } private void handleTimeoutHealth(AgentHealth eventHealth, String loggerName, String eventMassage) { Duration validityPeriod = env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getValidityPeriod(); + boolean isNotInfo = eventHealth.isMoreSevereOrEqualTo(AgentHealth.WARNING); - if (eventHealth.isMoreSevereOrEqualTo(AgentHealth.WARNING)) { + if (isNotInfo) { generalHealthTimeouts.put(eventHealth, LocalDateTime.now().plus(validityPeriod)); } - triggerAgentHealthChangedEvent(loggerName, eventMassage + ". This status is valid for " + validityPeriod); + String fullEventMessage = eventMassage + ". This status is valid for " + validityPeriod; + triggerAgentHealthChangedEvent(loggerName, fullEventMessage, isNotInfo); } public void invalidateIncident(Class eventClass, String eventMessage) { @@ -116,17 +121,23 @@ private void checkHealthAndSchedule() { } /** - * Creates a new AgentHealthIncident and also triggers an AgentHealthChangedEvent, if the agent health has changed + * Creates a new AgentHealthIncident, if specified, and also triggers an AgentHealthChangedEvent, + * if the agent health has changed + * * @param incidentSource class, which caused the incident * @param message message, describing the incident + * @param shouldCreateIncident whether to create a new AgentHealthIncident or not */ - private void triggerAgentHealthChangedEvent(String incidentSource, String message) { + private void triggerAgentHealthChangedEvent(String incidentSource, String message, Boolean shouldCreateIncident) { synchronized (this) { boolean changedHealth = healthHasChanged(); AgentHealth currentHealth = getCurrentHealth(); - AgentHealthIncident incident = new AgentHealthIncident(LocalDateTime.now().toString(), currentHealth, incidentSource, message, changedHealth); - healthIncidentBuffer.put(incident); + if(shouldCreateIncident) { + AgentHealthIncident incident = new AgentHealthIncident( + LocalDateTime.now().toString(), currentHealth, incidentSource, message, changedHealth); + healthIncidentBuffer.put(incident); + } if(changedHealth) { AgentHealth lastHealth = lastNotifiedHealth; @@ -137,6 +148,10 @@ private void triggerAgentHealthChangedEvent(String incidentSource, String messag } } + private void triggerAgentHealthChangedEvent(String incidentSource, String message) { + triggerAgentHealthChangedEvent(incidentSource, message, true); + } + /** * Checks whether the current health has changed since last check. * From 2540563500629a3a06a3e213940f0910a8a88968 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Wed, 29 Nov 2023 12:34:18 +0100 Subject: [PATCH 15/21] add tests for AgentHealth monitoring --- .../http/HttpConfigurationPoller.java | 7 + .../http/HttpPropertySourceState.java | 1 + .../AgentHealthIncidentBuffer.java | 16 +- .../selfmonitoring/AgentHealthManager.java | 55 +++++-- .../PollerWritingHealthEventListener.java | 2 +- .../models/AgentHealthIncidentAddedEvent.java | 2 +- .../AgentHealthIncidentBufferTest.java | 55 +++++++ .../AgentHealthManagerIntTest.java | 109 ++++++++++++++ .../AgentHealthManagerTest.java | 139 ++++++++++++++++++ .../LogWritingHealthEventListenerTest.java | 44 ++++++ .../MetricWritingHealthEventListenerTest.java | 38 ++--- .../PollerWritingHealthEventListenerTest.java | 60 ++++++++ .../logs/LogHealthMonitorTest.java | 88 ++++++++--- 13 files changed, 547 insertions(+), 69 deletions(-) rename inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/{utils => selfmonitoring}/AgentHealthIncidentBuffer.java (86%) create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthIncidentBufferTest.java create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerIntTest.java create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListenerTest.java create mode 100644 inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListenerTest.java diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java index ceffb66652..212c0a6a1c 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpConfigurationPoller.java @@ -1,5 +1,6 @@ package rocks.inspectit.ocelot.core.config.propertysources.http; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -31,6 +32,7 @@ public class HttpConfigurationPoller extends DynamicallyActivatableService imple /** * The state of the used HTTP property source configuration. */ + @Getter private HttpPropertySourceState currentState; public HttpConfigurationPoller() { @@ -87,4 +89,9 @@ public void updateAgentHealthState(AgentHealthState agentHealth) { currentState.updateAgentHealthState(agentHealth); } } + + public AgentHealthState getCurrentAgentHealthState() { + if(currentState == null) return null; + return currentState.getAgentHealth(); + } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceState.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceState.java index ec1f1bc4b8..468745b10d 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceState.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/config/propertysources/http/HttpPropertySourceState.java @@ -104,6 +104,7 @@ public class HttpPropertySourceState { @Getter private boolean firstFileWriteAttemptSuccessful = true; + @Getter private AgentHealthState agentHealth = AgentHealthState.defaultState(); /** diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthIncidentBuffer.java similarity index 86% rename from inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java rename to inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthIncidentBuffer.java index 5a7fb3dc48..c15ecaba9c 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/utils/AgentHealthIncidentBuffer.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthIncidentBuffer.java @@ -1,6 +1,6 @@ -package rocks.inspectit.ocelot.core.utils; +package rocks.inspectit.ocelot.core.selfmonitoring; -import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; @@ -16,12 +16,12 @@ * As soon as incidents are put into a full queue, old incidents will be removed to create space */ @Component -@RequiredArgsConstructor public class AgentHealthIncidentBuffer { - private final ApplicationContext ctx; - - private final InspectitEnvironment env; + @Autowired + private ApplicationContext ctx; + @Autowired + private InspectitEnvironment env; private final ConcurrentLinkedQueue buffer = new ConcurrentLinkedQueue<>(); @@ -49,4 +49,8 @@ public List asList() { Collections.reverse(incidentList); return incidentList; } + + public void clear() { + buffer.clear(); + } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java index 1096fd7b73..bdf3471820 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java @@ -1,16 +1,14 @@ package rocks.inspectit.ocelot.core.selfmonitoring; -import ch.qos.logback.classic.Level; import com.google.common.annotations.VisibleForTesting; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; -import rocks.inspectit.ocelot.core.utils.AgentHealthIncidentBuffer; import javax.annotation.PostConstruct; import java.time.Duration; @@ -27,12 +25,16 @@ */ @Component @Slf4j -@RequiredArgsConstructor public class AgentHealthManager { - private final ApplicationContext ctx; - - private final ScheduledExecutorService executor; + @Autowired + private ApplicationContext ctx; + @Autowired + private ScheduledExecutorService executor; + @Autowired + private InspectitEnvironment env; + @Autowired + private AgentHealthIncidentBuffer healthIncidentBuffer; /** * Map of {@code eventClass -> agentHealth}, whereas the {@code agentHealth} is reset whenever an event of type @@ -49,20 +51,25 @@ public class AgentHealthManager { private AgentHealth lastNotifiedHealth = AgentHealth.OK; - private final InspectitEnvironment env; - - private final AgentHealthIncidentBuffer healthIncidentBuffer; - @PostConstruct @VisibleForTesting void startHealthCheckScheduler() { checkHealthAndSchedule(); } - public List getHistory() { + public List getIncidentHistory() { return healthIncidentBuffer.asList(); } + /** + * Notifies the AgentHealthManager about an eventHealth. + * The manager determines, whether the event is invalidatable or times out. + * + * @param eventHealth health of event + * @param invalidator class, which created the invalidatable eventHealth + * @param loggerName name of the logger, who created the event + * @param message message of the event + */ public void notifyAgentHealth(AgentHealth eventHealth, Class invalidator, String loggerName, String message) { if (invalidator == null) handleTimeoutHealth(eventHealth, loggerName, message); @@ -88,6 +95,11 @@ private void handleTimeoutHealth(AgentHealth eventHealth, String loggerName, Str triggerAgentHealthChangedEvent(loggerName, fullEventMessage, isNotInfo); } + /** + * Invalidates an invalidatable eventHealth and creates a new AgentHealthIncident + * @param eventClass class, which created the invalidatable eventHealth + * @param eventMessage message of the event + */ public void invalidateIncident(Class eventClass, String eventMessage) { invalidatableHealth.remove(eventClass); triggerAgentHealthChangedEvent(eventClass.getTypeName(), eventMessage); @@ -101,7 +113,8 @@ public void invalidateIncident(Class eventClass, String eventMessage) { *
  • exists -> run until that timeout is over
  • * */ - private void checkHealthAndSchedule() { + @VisibleForTesting + void checkHealthAndSchedule() { triggerAgentHealthChangedEvent(AgentHealthManager.class.getCanonicalName(), "Checking timed out agent healths"); Duration validityPeriod = env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getValidityPeriod(); @@ -180,4 +193,20 @@ public AgentHealth getCurrentHealth() { .orElse(AgentHealth.OK); return AgentHealth.mostSevere(generalHealth, invHealth); } + + /** + * THIS METHOD SHOULD ONLY BE USED FOR TESTING. + * It allows to specify a custom validityPeriod, which by default has to be at least 60s. + * With customizing the period, you can reduce the amount of waiting time for tests. + */ + @VisibleForTesting + void handleTimeoutHealthTesting(AgentHealth eventHealth, String loggerName, String eventMassage, Duration validityPeriod) { + boolean isNotInfo = eventHealth.isMoreSevereOrEqualTo(AgentHealth.WARNING); + + if (isNotInfo) { + generalHealthTimeouts.put(eventHealth, LocalDateTime.now().plus(validityPeriod)); + } + String fullEventMessage = eventMassage + ". This status is valid for " + validityPeriod; + triggerAgentHealthChangedEvent(loggerName, fullEventMessage, isNotInfo); + } } diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java index 0302ccae19..a33028b975 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListener.java @@ -24,7 +24,7 @@ public class PollerWritingHealthEventListener implements HealthEventListener { @Override public void onAgentHealthEvent(AgentHealthChangedEvent event) { - List incidentHistory = agentHealthManager.getHistory(); + List incidentHistory = agentHealthManager.getIncidentHistory(); AgentHealthState state = new AgentHealthState(event.getNewHealth(), event.getSource().toString(), event.getMessage(), incidentHistory); httpConfigurationPoller.updateAgentHealthState(state); diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthIncidentAddedEvent.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthIncidentAddedEvent.java index 92769f5a8c..a2acba676e 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthIncidentAddedEvent.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/event/models/AgentHealthIncidentAddedEvent.java @@ -3,7 +3,7 @@ import lombok.Getter; import org.springframework.context.ApplicationEvent; import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; -import rocks.inspectit.ocelot.core.utils.AgentHealthIncidentBuffer; +import rocks.inspectit.ocelot.core.selfmonitoring.AgentHealthIncidentBuffer; import java.util.List; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthIncidentBufferTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthIncidentBufferTest.java new file mode 100644 index 0000000000..81dc50af44 --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthIncidentBufferTest.java @@ -0,0 +1,55 @@ +package rocks.inspectit.ocelot.core.selfmonitoring; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.context.ApplicationContext; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; +import rocks.inspectit.ocelot.core.SpringTestBase; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthIncidentAddedEvent; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class AgentHealthIncidentBufferTest { + + @InjectMocks + private AgentHealthIncidentBuffer incidentBuffer; + @Mock + private ApplicationContext ctx; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private InspectitEnvironment env; + + private AgentHealthIncident incident; + + @BeforeEach + void setUp() { + when(env.getCurrentConfig().getSelfMonitoring().getAgentHealth().getIncidentBufferSize()).thenReturn(2); + incident = new AgentHealthIncident("2001-01-01", AgentHealth.WARNING, this.getClass().getCanonicalName(), "Mock message", true); + } + @Test + void verifyBufferSize() { + incidentBuffer.put(incident); + incidentBuffer.put(incident); + incidentBuffer.put(incident); + + verify(ctx, times(3)).publishEvent(any(AgentHealthIncidentAddedEvent.class)); + } + + @Test + void verifyEventPublisher() { + incidentBuffer.put(incident); + incidentBuffer.put(incident); + incidentBuffer.put(incident); + + verify(ctx, times(3)).publishEvent(any(AgentHealthIncidentAddedEvent.class)); + } +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerIntTest.java new file mode 100644 index 0000000000..c5a93fe6de --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerIntTest.java @@ -0,0 +1,109 @@ +package rocks.inspectit.ocelot.core.selfmonitoring; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.core.SpringTestBase; +import rocks.inspectit.ocelot.core.config.propertysources.http.HttpConfigurationPoller; + +import java.time.Duration; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * Integration tests {@link AgentHealthManager} + */ +public class AgentHealthManagerIntTest extends SpringTestBase { + + @Autowired + private AgentHealthManager healthManager; + @Autowired + private HttpConfigurationPoller configurationPoller; + @Autowired + private AgentHealthIncidentBuffer incidentBuffer; + + @BeforeEach + void clearBuffer() { + incidentBuffer.clear(); + } + + @Nested + class InvalidatableHealth { + + @Test + void verifyAgentHealthUpdating() { + AgentHealth currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); + int bufferSize = healthManager.getIncidentHistory().size(); + assertEquals(currentHealth, AgentHealth.OK); + assertEquals(bufferSize, 0); + + healthManager.notifyAgentHealth(AgentHealth.WARNING, this.getClass(), this.getClass().getName(), "Mock message"); + + currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); + bufferSize = healthManager.getIncidentHistory().size(); + assertEquals(currentHealth, AgentHealth.WARNING); + assertEquals(bufferSize, 1); + + healthManager.notifyAgentHealth(AgentHealth.ERROR, this.getClass(), this.getClass().getName(), "Mock message"); + + currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); + bufferSize = healthManager.getIncidentHistory().size(); + assertEquals(currentHealth, AgentHealth.ERROR); + assertEquals(bufferSize, 2); + } + + @Test + void verifyAgentHealthInvalidation() { + AgentHealth currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); + int bufferSize = healthManager.getIncidentHistory().size(); + assertEquals(currentHealth, AgentHealth.OK); + assertEquals(bufferSize, 0); + + healthManager.notifyAgentHealth(AgentHealth.ERROR, this.getClass(), this.getClass().getName(), "Mock message"); + + currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); + bufferSize = healthManager.getIncidentHistory().size(); + assertEquals(currentHealth, AgentHealth.ERROR); + assertEquals(bufferSize, 1); + + healthManager.invalidateIncident(this.getClass(), "Mock invalidation"); + + currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); + bufferSize = healthManager.getIncidentHistory().size(); + assertEquals(currentHealth, AgentHealth.OK); + assertEquals(bufferSize, 2); + } + } + + @Nested + class TimeoutHealth { + + @Test + void verifyAgentHealthUpdating() throws InterruptedException { + AgentHealth currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); + int bufferSize = healthManager.getIncidentHistory().size(); + assertEquals(currentHealth, AgentHealth.OK); + assertEquals(bufferSize, 0); + + // Use custom method for testing, to reduce the validityPeriod + // This method should not be used outside of tests! + healthManager.handleTimeoutHealthTesting(AgentHealth.WARNING, this.getClass().getName(), + "Mock message", Duration.ofSeconds(10)); + + currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); + bufferSize = healthManager.getIncidentHistory().size(); + assertEquals(currentHealth, AgentHealth.WARNING); + assertEquals(bufferSize, 1); + + // wait 61s for time out (which has to be at least 60s) + Thread.sleep(61000); + + currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); + bufferSize = healthManager.getIncidentHistory().size(); + assertEquals(currentHealth, AgentHealth.OK); + assertEquals(bufferSize, 3); + } + } +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java new file mode 100644 index 0000000000..d1a9bececc --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java @@ -0,0 +1,139 @@ +package rocks.inspectit.ocelot.core.selfmonitoring; + +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.context.ApplicationContext; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; +import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; + +import java.time.Duration; +import java.util.concurrent.ScheduledExecutorService; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +/** + * Tests {@link AgentHealthManager} + */ +@ExtendWith(MockitoExtension.class) +public class AgentHealthManagerTest { + + @InjectMocks + private AgentHealthManager healthManager; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private InspectitEnvironment environment; + @Mock + private ScheduledExecutorService executor; + @Mock + private ApplicationContext ctx; + @Mock + private AgentHealthIncidentBuffer incidentBuffer; + + @Nested + class InvalidatableHealth { + + @Test + void verifyAgentHealthChangedEvent() { + healthManager.notifyAgentHealth(AgentHealth.WARNING, this.getClass(), this.getClass().getName(), "Mock message"); + + verify(ctx).publishEvent(any(AgentHealthChangedEvent.class)); + } + + @Test + void verifyAgentHealthIncidentAddedEvent() { + healthManager.notifyAgentHealth(AgentHealth.WARNING, this.getClass(), this.getClass().getName(), "Mock message"); + + verify(incidentBuffer).put(any(AgentHealthIncident.class)); + } + + @Test + void verifyNoAgentHealthIncidentAddedEvent() { + healthManager.notifyAgentHealth(AgentHealth.OK, this.getClass(), this.getClass().getName(), "Mock message"); + + verifyNoInteractions(incidentBuffer); + } + + @Test + void verifyInvalidateAgentHealthIncident() { + healthManager.notifyAgentHealth(AgentHealth.ERROR, this.getClass(), this.getClass().getName(), "Mock message"); + healthManager.invalidateIncident(this.getClass(), "Mock invalidation"); + + verify(ctx, times(2)).publishEvent(any(AgentHealthChangedEvent.class)); + verify(incidentBuffer, times(2)).put(any(AgentHealthIncident.class)); + } + } + @Nested + class TimeoutHealth { + + @BeforeEach + void setUp() { + when(environment.getCurrentConfig().getSelfMonitoring().getAgentHealth().getValidityPeriod()) + .thenReturn(Duration.ofSeconds(5)); + } + + @Test + void verifyAgentHealthChangedEvent() { + healthManager.notifyAgentHealth(AgentHealth.WARNING, null, this.getClass().getName(), "Mock message"); + + verify(ctx).publishEvent(any(AgentHealthChangedEvent.class)); + } + + @Test + void verifyAgentHealthIncidentAddedEvent() { + healthManager.notifyAgentHealth(AgentHealth.WARNING, null, this.getClass().getName(), "Mock message"); + + verify(incidentBuffer).put(any(AgentHealthIncident.class)); + } + + @Test + void verifyNoAgentHealthIncidentAddedEvent() { + healthManager.notifyAgentHealth(AgentHealth.OK, null, this.getClass().getName(), "Mock message"); + + verifyNoInteractions(incidentBuffer); + } + + @Test + void verifyAgentHealthTimeout() throws InterruptedException { + when(environment.getCurrentConfig().getSelfMonitoring().getAgentHealth().getValidityPeriod()) + .thenReturn(Duration.ofSeconds(5)); + + healthManager.notifyAgentHealth(AgentHealth.ERROR, null, this.getClass().getName(), "Mock message"); + // Wait 6s for time out + Thread.sleep(6000); + + assertEquals(healthManager.getCurrentHealth(), AgentHealth.OK); + } + + @Test + void verifyCheckAgentHealth() throws InterruptedException { + when(environment.getCurrentConfig().getSelfMonitoring().getAgentHealth().getMinHealthCheckDelay()) + .thenReturn(Duration.ofSeconds(1)); + + healthManager.notifyAgentHealth(AgentHealth.ERROR, null, this.getClass().getName(), "Mock message"); + // Wait 6s for time out + Thread.sleep(6000); + + healthManager.checkHealthAndSchedule(); + + verify(ctx, times(2)).publishEvent(any(AgentHealthChangedEvent.class)); + verify(incidentBuffer, times(2)).put(any(AgentHealthIncident.class)); + } + + @Test + void verifyCheckAgentHealthTooEarly() { + when(environment.getCurrentConfig().getSelfMonitoring().getAgentHealth().getMinHealthCheckDelay()) + .thenReturn(Duration.ofSeconds(1)); + + healthManager.notifyAgentHealth(AgentHealth.ERROR, null, this.getClass().getName(), "Mock message"); + healthManager.checkHealthAndSchedule(); + + verify(ctx, times(1)).publishEvent(any(AgentHealthChangedEvent.class)); + verify(incidentBuffer, times(2)).put(any(AgentHealthIncident.class)); + } + } +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListenerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListenerTest.java new file mode 100644 index 0000000000..727d10ebff --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/LogWritingHealthEventListenerTest.java @@ -0,0 +1,44 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; + +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.read.ListAppender; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.junit.jupiter.MockitoExtension; +import org.slf4j.LoggerFactory; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.verify; + +public class LogWritingHealthEventListenerTest { + + private final LogWritingHealthEventListener logWritingHealthEventListener = new LogWritingHealthEventListener(); + + private ListAppender listAppender; + + @BeforeEach + void setUp() { + listAppender = new ListAppender<>(); + listAppender.start(); + + Logger logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + logger.addAppender(listAppender); + } + + @Test + void verifyAgentHealthLogging() { + String eventMessage = "Mock message"; + AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, AgentHealth.OK, AgentHealth.WARNING, eventMessage); + String expectedFullMessage = String.format("The agent status changed from %s to %s. Reason: %s", + AgentHealth.OK, AgentHealth.WARNING, eventMessage); + + logWritingHealthEventListener.onAgentHealthEvent(event); + + assertTrue(listAppender.list.stream().anyMatch(logEvent -> logEvent.getFormattedMessage().contains(expectedFullMessage))); + } +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListenerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListenerTest.java index 84a287f80e..1a7cafa011 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListenerTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/MetricWritingHealthEventListenerTest.java @@ -1,6 +1,5 @@ package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; -import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -25,34 +24,25 @@ public class MetricWritingHealthEventListenerTest { @Mock private SelfMonitoringService selfMonitoringService; - @Nested - class SendInitialHealthMetric { + @Test + void sendInitialHealthMetric() { + HashMap tags = new HashMap<>(); + tags.put("message", INITIAL_METRIC_MESSAGE); - @Test - void successfulDelegationVerification() { - HashMap tags = new HashMap<>(); - tags.put("message", INITIAL_METRIC_MESSAGE); + metricWritingHealthEventListener.sendInitialHealthMetric(); - metricWritingHealthEventListener.sendInitialHealthMetric(); - - verify(selfMonitoringService).recordMeasurement("health", AgentHealth.OK.ordinal(), tags); - } + verify(selfMonitoringService).recordMeasurement("health", AgentHealth.OK.ordinal(), tags); } - @Nested - class OnAgentHealthEvent { - - @Test - void recordNewHealthMeasurement() { - AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, AgentHealth.OK, AgentHealth.WARNING, "Mock Message"); - HashMap tags = new HashMap<>(); - tags.put("message", event.getMessage()); - tags.put("source", event.getSource().getClass().getName()); + @Test + void recordNewHealthMeasurement() { + AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, AgentHealth.OK, AgentHealth.WARNING, "Mock Message"); + HashMap tags = new HashMap<>(); + tags.put("message", event.getMessage()); + tags.put("source", event.getSource().getClass().getName()); - metricWritingHealthEventListener.onAgentHealthEvent(event); + metricWritingHealthEventListener.onAgentHealthEvent(event); - verify(selfMonitoringService).recordMeasurement("health", event.getNewHealth().ordinal(), tags); - } + verify(selfMonitoringService).recordMeasurement("health", event.getNewHealth().ordinal(), tags); } - } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListenerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListenerTest.java new file mode 100644 index 0000000000..da70c229d0 --- /dev/null +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/event/listener/PollerWritingHealthEventListenerTest.java @@ -0,0 +1,60 @@ +package rocks.inspectit.ocelot.core.selfmonitoring.event.listener; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import rocks.inspectit.ocelot.commons.models.health.AgentHealth; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; +import rocks.inspectit.ocelot.commons.models.health.AgentHealthState; +import rocks.inspectit.ocelot.core.config.propertysources.http.HttpConfigurationPoller; +import rocks.inspectit.ocelot.core.selfmonitoring.AgentHealthManager; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; +import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthIncidentAddedEvent; + +import java.util.Collections; +import java.util.List; + +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class PollerWritingHealthEventListenerTest { + + @InjectMocks + private PollerWritingHealthEventListener pollerWritingHealthEventListener; + @Mock + private HttpConfigurationPoller httpConfigurationPoller; + @Mock + private AgentHealthManager agentHealthManager; + + private List lastIncidents; + + @BeforeEach + void setUpIncidents() { + AgentHealthIncident incident = new AgentHealthIncident("2000-01-01", AgentHealth.WARNING, this.getClass().getCanonicalName(), "Mock message", true); + lastIncidents = Collections.singletonList(incident); + } + + @Test + void verifyAgentHealthUpdateOnChangedHealth() { + when(agentHealthManager.getIncidentHistory()).thenReturn(lastIncidents); + AgentHealthChangedEvent event = new AgentHealthChangedEvent(this, AgentHealth.OK, AgentHealth.WARNING, "Mock message"); + + pollerWritingHealthEventListener.onAgentHealthEvent(event); + AgentHealthState healthState = new AgentHealthState(AgentHealth.WARNING, this.toString(), "Mock message", lastIncidents); + + verify(httpConfigurationPoller).updateAgentHealthState(healthState); + } + @Test + void verifyAgentHealthUpdateOnAddedIncident() { + AgentHealthIncidentAddedEvent event = new AgentHealthIncidentAddedEvent(this, lastIncidents); + + pollerWritingHealthEventListener.onAgentHealthIncidentEvent(event); + AgentHealthState healthState = new AgentHealthState(AgentHealth.WARNING, this.getClass().getCanonicalName(), "Mock message", lastIncidents); + + verify(httpConfigurationPoller).updateAgentHealthState(healthState); + } +} diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java index 0a0fe5a60b..cccfd3dae0 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/logs/LogHealthMonitorTest.java @@ -18,44 +18,84 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; -/** - * Tests {@link AgentHealthManager} - */ @ExtendWith(MockitoExtension.class) public class LogHealthMonitorTest { @InjectMocks private LogHealthMonitor healthMonitor; - @Mock private AgentHealthManager healthManager; - private ILoggingEvent createLoggingEvent(Class loggedClass) { - return new LoggingEvent("com.dummy.Method", (Logger) LoggerFactory.getLogger(loggedClass), Level.INFO, "Dummy Info", new Throwable(), new String[]{}); + private ILoggingEvent createLoggingEvent(Class loggedClass, Level logLevel) { + return new LoggingEvent("com.dummy.Method", (Logger) LoggerFactory.getLogger(loggedClass), logLevel, "Dummy Info", new Throwable(), new String[]{}); + } + + @Test + void ignoreLogsFromAgentHealthManagerClass() { + ILoggingEvent loggingEvent = createLoggingEvent(AgentHealthManager.class, Level.INFO); + + healthMonitor.onLoggingEvent(loggingEvent, null); + + verifyNoMoreInteractions(healthManager); + } + + @Test + void verifyNotifyAgentHealthOnInfo() { + Class loggerClass = LogHealthMonitor.class; + ILoggingEvent loggingEvent = createLoggingEvent(loggerClass, Level.INFO); + Class invalidatorMock = PropertySourcesReloadEvent.class; + AgentHealth eventHealth = AgentHealth.OK; + + healthMonitor.onLoggingEvent(loggingEvent, invalidatorMock); + + verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, loggerClass.getCanonicalName(), loggingEvent.getFormattedMessage()); } - //TODO testen mit allen Levels (WARN, ERROR, OK, INFO, DEBUG) - @Nested - class OnLoggingEvent { - @Test - void ignoreLogsFromAgentHealthManagerClass() { - ILoggingEvent loggingEvent = createLoggingEvent(AgentHealthManager.class); + @Test + void verifyNotifyAgentHealthOnWarn() { + Class loggerClass = LogHealthMonitor.class; + ILoggingEvent loggingEvent = createLoggingEvent(loggerClass, Level.WARN); + Class invalidatorMock = PropertySourcesReloadEvent.class; + AgentHealth eventHealth = AgentHealth.WARNING; - healthMonitor.onLoggingEvent(loggingEvent, null); + healthMonitor.onLoggingEvent(loggingEvent, invalidatorMock); - verifyNoMoreInteractions(healthManager); - } + verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, loggerClass.getCanonicalName(), loggingEvent.getFormattedMessage()); + } + + @Test + void verifyNotifyAgentHealthOnError() { + Class loggerClass = LogHealthMonitor.class; + ILoggingEvent loggingEvent = createLoggingEvent(loggerClass, Level.ERROR); + Class invalidatorMock = PropertySourcesReloadEvent.class; + AgentHealth eventHealth = AgentHealth.ERROR; + + healthMonitor.onLoggingEvent(loggingEvent, invalidatorMock); + + verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, loggerClass.getCanonicalName(), loggingEvent.getFormattedMessage()); + } + + @Test + void verifyNotifyAgentHealthOnTrace() { + Class loggerClass = LogHealthMonitor.class; + ILoggingEvent loggingEvent = createLoggingEvent(loggerClass, Level.TRACE); + Class invalidatorMock = PropertySourcesReloadEvent.class; + AgentHealth eventHealth = AgentHealth.OK; + + healthMonitor.onLoggingEvent(loggingEvent, invalidatorMock); + + verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, loggerClass.getCanonicalName(), loggingEvent.getFormattedMessage()); + } - @Test - void triggerAgentHealthManagerNotifyAgentHealthEvent() { - Class loggerClass = LogHealthMonitor.class; - ILoggingEvent loggingEvent = createLoggingEvent(loggerClass); - Class invalidatorMock = PropertySourcesReloadEvent.class; - AgentHealth eventHealth = AgentHealth.fromLogLevel(loggingEvent.getLevel()); + @Test + void verifyNotifyAgentHealthOnDebug() { + Class loggerClass = LogHealthMonitor.class; + ILoggingEvent loggingEvent = createLoggingEvent(loggerClass, Level.DEBUG); + Class invalidatorMock = PropertySourcesReloadEvent.class; + AgentHealth eventHealth = AgentHealth.OK; - healthMonitor.onLoggingEvent(loggingEvent, invalidatorMock); + healthMonitor.onLoggingEvent(loggingEvent, invalidatorMock); - verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, loggerClass.getCanonicalName(), loggingEvent.getFormattedMessage()); - } + verify(healthManager).notifyAgentHealth(eventHealth, invalidatorMock, loggerClass.getCanonicalName(), loggingEvent.getFormattedMessage()); } } From e6934104abaf527bc689d009047c9abc6bebdb28 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Thu, 30 Nov 2023 11:38:45 +0100 Subject: [PATCH 16/21] fix int test --- .../selfmonitoring/AgentHealthManager.java | 22 ++---- ...entHealthManagerDeadlockGh1597IntTest.java | 6 +- .../AgentHealthManagerIntTest.java | 72 +++++++++---------- .../AgentHealthManagerTest.java | 6 +- 4 files changed, 44 insertions(+), 62 deletions(-) diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java index bdf3471820..fcce2277ca 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManager.java @@ -8,6 +8,7 @@ import rocks.inspectit.ocelot.commons.models.health.AgentHealth; import rocks.inspectit.ocelot.commons.models.health.AgentHealthIncident; import rocks.inspectit.ocelot.core.config.InspectitEnvironment; +import rocks.inspectit.ocelot.core.selfmonitoring.event.listener.LogWritingHealthEventListener; import rocks.inspectit.ocelot.core.selfmonitoring.event.models.AgentHealthChangedEvent; import javax.annotation.PostConstruct; @@ -146,7 +147,10 @@ private void triggerAgentHealthChangedEvent(String incidentSource, String messag boolean changedHealth = healthHasChanged(); AgentHealth currentHealth = getCurrentHealth(); - if(shouldCreateIncident) { + // Don't create incident for health event logs + boolean isLoggedHealthEvent = incidentSource.equals(LogWritingHealthEventListener.class.getName()); + + if(shouldCreateIncident && !isLoggedHealthEvent) { AgentHealthIncident incident = new AgentHealthIncident( LocalDateTime.now().toString(), currentHealth, incidentSource, message, changedHealth); healthIncidentBuffer.put(incident); @@ -193,20 +197,4 @@ public AgentHealth getCurrentHealth() { .orElse(AgentHealth.OK); return AgentHealth.mostSevere(generalHealth, invHealth); } - - /** - * THIS METHOD SHOULD ONLY BE USED FOR TESTING. - * It allows to specify a custom validityPeriod, which by default has to be at least 60s. - * With customizing the period, you can reduce the amount of waiting time for tests. - */ - @VisibleForTesting - void handleTimeoutHealthTesting(AgentHealth eventHealth, String loggerName, String eventMassage, Duration validityPeriod) { - boolean isNotInfo = eventHealth.isMoreSevereOrEqualTo(AgentHealth.WARNING); - - if (isNotInfo) { - generalHealthTimeouts.put(eventHealth, LocalDateTime.now().plus(validityPeriod)); - } - String fullEventMessage = eventMassage + ". This status is valid for " + validityPeriod; - triggerAgentHealthChangedEvent(loggerName, fullEventMessage, isNotInfo); - } } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerDeadlockGh1597IntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerDeadlockGh1597IntTest.java index 039e83e55c..97e705b78a 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerDeadlockGh1597IntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerDeadlockGh1597IntTest.java @@ -1,9 +1,7 @@ package rocks.inspectit.ocelot.core.selfmonitoring; import org.awaitility.Awaitility; -import org.checkerframework.checker.units.qual.A; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.Timeout; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -11,8 +9,6 @@ import rocks.inspectit.ocelot.core.SpringTestBase; import rocks.inspectit.ocelot.core.logging.logback.LogbackInitializer; -import java.util.Random; -import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -28,7 +24,7 @@ public class AgentHealthManagerDeadlockGh1597IntTest extends SpringTestBase { private AgentHealthManager cut; @Test - void testLogging() throws Exception { + void testLogging() { // This installs InternalProcessingAppender which together with AgentHealthManager caused a deadlock LogbackInitializer.initDefaultLogging(); diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerIntTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerIntTest.java index c5a93fe6de..bff61db4c8 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerIntTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerIntTest.java @@ -1,79 +1,79 @@ package rocks.inspectit.ocelot.core.selfmonitoring; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.TestPropertySource; import rocks.inspectit.ocelot.commons.models.health.AgentHealth; import rocks.inspectit.ocelot.core.SpringTestBase; import rocks.inspectit.ocelot.core.config.propertysources.http.HttpConfigurationPoller; -import java.time.Duration; - import static org.junit.jupiter.api.Assertions.assertEquals; /** * Integration tests {@link AgentHealthManager} */ +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS) +@TestPropertySource(properties = "inspectit.self-monitoring.agent-health.validity-period:60s") public class AgentHealthManagerIntTest extends SpringTestBase { @Autowired private AgentHealthManager healthManager; @Autowired private HttpConfigurationPoller configurationPoller; - @Autowired - private AgentHealthIncidentBuffer incidentBuffer; - @BeforeEach - void clearBuffer() { - incidentBuffer.clear(); - } + /** + * Period how long a TimeOut AgentHealth is valid (+1s buffer) + */ + private final long validityPeriod = 61000; @Nested class InvalidatableHealth { @Test void verifyAgentHealthUpdating() { + AgentHealth currentManagerHealth = healthManager.getCurrentHealth(); AgentHealth currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); - int bufferSize = healthManager.getIncidentHistory().size(); + assertEquals(currentHealth, currentManagerHealth); assertEquals(currentHealth, AgentHealth.OK); - assertEquals(bufferSize, 0); healthManager.notifyAgentHealth(AgentHealth.WARNING, this.getClass(), this.getClass().getName(), "Mock message"); currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); - bufferSize = healthManager.getIncidentHistory().size(); + currentManagerHealth = healthManager.getCurrentHealth(); + assertEquals(currentHealth, currentManagerHealth); assertEquals(currentHealth, AgentHealth.WARNING); - assertEquals(bufferSize, 1); - healthManager.notifyAgentHealth(AgentHealth.ERROR, this.getClass(), this.getClass().getName(), "Mock message"); currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); - bufferSize = healthManager.getIncidentHistory().size(); + currentManagerHealth = healthManager.getCurrentHealth(); + assertEquals(currentHealth, currentManagerHealth); assertEquals(currentHealth, AgentHealth.ERROR); - assertEquals(bufferSize, 2); } @Test - void verifyAgentHealthInvalidation() { + void verifyAgentHealthInvalidation() throws InterruptedException { AgentHealth currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); - int bufferSize = healthManager.getIncidentHistory().size(); + AgentHealth currentManagerHealth = healthManager.getCurrentHealth(); + assertEquals(currentHealth, currentManagerHealth); assertEquals(currentHealth, AgentHealth.OK); - assertEquals(bufferSize, 0); healthManager.notifyAgentHealth(AgentHealth.ERROR, this.getClass(), this.getClass().getName(), "Mock message"); currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); - bufferSize = healthManager.getIncidentHistory().size(); + currentManagerHealth = healthManager.getCurrentHealth(); + assertEquals(currentHealth, currentManagerHealth); assertEquals(currentHealth, AgentHealth.ERROR); - assertEquals(bufferSize, 1); healthManager.invalidateIncident(this.getClass(), "Mock invalidation"); + // simulate scheduler + Thread.sleep(validityPeriod); + healthManager.checkHealthAndSchedule(); currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); - bufferSize = healthManager.getIncidentHistory().size(); + currentManagerHealth = healthManager.getCurrentHealth(); + assertEquals(currentHealth, currentManagerHealth); assertEquals(currentHealth, AgentHealth.OK); - assertEquals(bufferSize, 2); } } @@ -83,27 +83,25 @@ class TimeoutHealth { @Test void verifyAgentHealthUpdating() throws InterruptedException { AgentHealth currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); - int bufferSize = healthManager.getIncidentHistory().size(); + AgentHealth currentManagerHealth = healthManager.getCurrentHealth(); + assertEquals(currentHealth, currentManagerHealth); assertEquals(currentHealth, AgentHealth.OK); - assertEquals(bufferSize, 0); - // Use custom method for testing, to reduce the validityPeriod - // This method should not be used outside of tests! - healthManager.handleTimeoutHealthTesting(AgentHealth.WARNING, this.getClass().getName(), - "Mock message", Duration.ofSeconds(10)); + healthManager.notifyAgentHealth(AgentHealth.WARNING, null, this.getClass().getName(), "Mock message"); currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); - bufferSize = healthManager.getIncidentHistory().size(); + currentManagerHealth = healthManager.getCurrentHealth(); + assertEquals(currentHealth, currentManagerHealth); assertEquals(currentHealth, AgentHealth.WARNING); - assertEquals(bufferSize, 1); - // wait 61s for time out (which has to be at least 60s) - Thread.sleep(61000); + // simulate scheduler + Thread.sleep(validityPeriod); + healthManager.checkHealthAndSchedule(); currentHealth = configurationPoller.getCurrentAgentHealthState().getHealth(); - bufferSize = healthManager.getIncidentHistory().size(); + currentManagerHealth = healthManager.getCurrentHealth(); + assertEquals(currentHealth, currentManagerHealth); assertEquals(currentHealth, AgentHealth.OK); - assertEquals(bufferSize, 3); } } } diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java index d1a9bececc..b8436574c8 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/selfmonitoring/AgentHealthManagerTest.java @@ -71,7 +71,7 @@ void verifyInvalidateAgentHealthIncident() { class TimeoutHealth { @BeforeEach - void setUp() { + void setUpValidityPeriod() { when(environment.getCurrentConfig().getSelfMonitoring().getAgentHealth().getValidityPeriod()) .thenReturn(Duration.ofSeconds(5)); } @@ -103,7 +103,7 @@ void verifyAgentHealthTimeout() throws InterruptedException { .thenReturn(Duration.ofSeconds(5)); healthManager.notifyAgentHealth(AgentHealth.ERROR, null, this.getClass().getName(), "Mock message"); - // Wait 6s for time out + // Wait 6s for time out (= 5s validityPeriod + 1s buffer) Thread.sleep(6000); assertEquals(healthManager.getCurrentHealth(), AgentHealth.OK); @@ -115,7 +115,7 @@ void verifyCheckAgentHealth() throws InterruptedException { .thenReturn(Duration.ofSeconds(1)); healthManager.notifyAgentHealth(AgentHealth.ERROR, null, this.getClass().getName(), "Mock message"); - // Wait 6s for time out + // Wait 6s for time out (= 5s validityPeriod + 1s buffer) Thread.sleep(6000); healthManager.checkHealthAndSchedule(); From b1567ef217ca583b78cc7f4f171322e9b030e8e6 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Thu, 30 Nov 2023 11:38:58 +0100 Subject: [PATCH 17/21] update documentation --- .../docs/assets/agent-health-incidents.png | Bin 0 -> 138677 bytes .../docs/config-server/agent-mappings.md | 38 ++++++- .../docs/metrics/tag-guard.md | 98 ++++++++++++++++++ .../website/sidebars.json | 3 +- 4 files changed, 135 insertions(+), 4 deletions(-) create mode 100644 inspectit-ocelot-documentation/docs/assets/agent-health-incidents.png create mode 100644 inspectit-ocelot-documentation/docs/metrics/tag-guard.md diff --git a/inspectit-ocelot-documentation/docs/assets/agent-health-incidents.png b/inspectit-ocelot-documentation/docs/assets/agent-health-incidents.png new file mode 100644 index 0000000000000000000000000000000000000000..36c8670a2278b6d28af71dcda8ffbb989adfd41f GIT binary patch literal 138677 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 literal 0 HcmV?d00001 diff --git a/inspectit-ocelot-documentation/docs/config-server/agent-mappings.md b/inspectit-ocelot-documentation/docs/config-server/agent-mappings.md index 31ebf3a477..4535d83eaa 100644 --- a/inspectit-ocelot-documentation/docs/config-server/agent-mappings.md +++ b/inspectit-ocelot-documentation/docs/config-server/agent-mappings.md @@ -3,11 +3,14 @@ id: agent-mappings title: Agent Mappings --- -Agent mappings are used to determine which agent receives which configuration. Here, individual files or specific folders can be defined, which serve as the basis for the resulting configuration. Furthermore, you can specify which branch (`WORKSPACE` or `LIVE`) the mapping should use to obtain the configuration files. +Agent mappings are used to determine which agent receives which configuration. Here, individual files or specific +folders can be defined, which serve as the basis for the resulting configuration. +Furthermore, you can specify which branch (`WORKSPACE` or `LIVE`) the mapping should use to obtain the configuration files. It's important to note that the first matching agent mapping will be used to determine which configuration is shipped to an agent. Additional agent mappings which may also match the attributes list sent by an agent will be ignored. -See section [HTTP-based Configuration](configuration/external-configuration-sources.md#http-based-configuration) for information on how to specify which attributes will be sent by an agent. +See section [HTTP-based Configuration](configuration/external-configuration-sources.md#http-based-configuration) for +information on how to specify which attributes will be sent by an agent. An agent mapping consists of the following properties: @@ -31,6 +34,35 @@ This default agent mapping maps each agent to each configuration file of the `wo sourceBranch: "WORKSPACE" ``` +## Git Staging + +:::tip +You can find more detailed information about file staging and promotion [here](config-server/configuration-staging.md). +::: + +Since the version `2.6.0` the configuration for the agent mappings itself will also be included into the git staging. For all agent mappings +the configuration is stored in one file. After one or several agent mappings have been edited, the changes will also +appear on the promotion page. The promotion of the agent mappings configuration works directly like the promotion of agent configuration files. + +Additionally, it is possible to select a source branch (`WORKSPACE` or `LIVE`) for the agent mappings configuration itself. +This will determine, whether changes in the agent mappings should be applied directly or only after the promotion of the +agent mappings configuration. + +:::important +The source branch for the agent mappings configuration will **not affect** the defined `sourceBranch` in each **individual agent mapping**! +The `sourceBranch` property of an individual agent mapping determines, which branch should be used for the agent configuration files. +::: + +![Different Source Branches on Agent Mappings Page](assets/agent_mappings_source_branch.png) + +You can define, which source branch should be used at start-up for the agent mappings +in the application properties of the configuration server: + +```YAML +inspectit-config-server: + initial-agent-mappings-source-branch: WORKSPACE +``` + ## Example Agent Mappings ### Example 1 @@ -60,4 +92,4 @@ The following agent mapping will deliver all configuration files located in the attributes: service: "customer-service" sourceBranch: "WORKSPACE" -``` \ No newline at end of file +``` diff --git a/inspectit-ocelot-documentation/docs/metrics/tag-guard.md b/inspectit-ocelot-documentation/docs/metrics/tag-guard.md new file mode 100644 index 0000000000..b6fdd01f4c --- /dev/null +++ b/inspectit-ocelot-documentation/docs/metrics/tag-guard.md @@ -0,0 +1,98 @@ +--- +id: tag-guard +title: Tag-Guard +--- + +Since version `2.6.0` it is possible to limit the amount of tag values of metrics. +This can be useful for controlling the amount of tag values, which will be written to your time series database +(e.g. InfluxDB or Prometheus). A high amount of unique tag values for a metric will result in a high cardinality, +which in turn might lead to performance or memory issues in your time series database. + +The recorded tag values for each measure of an agent will be stored inside a local JSON file. This file serves +as a tag-guard-database and helps to check, if tag values exceeded their limit. + +### Configuring Tag-Guard + +You can set the Tag-Guard configuration in `inspectit.metrics.tag-guard`. + +| Property | Default | Description | +|----------------------------------|--------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------| +| `.enabled` | `true` | Only when the tag-guard is enabled, the tag value limits will be checked. +| `.database-file` | `${inspectit.env.agent-dir}/${inspectit.service-name}/tag-guard-database.json` | The location of the JSON file with all recorded tag values. | +| `.schedule-delay` | `30s` | The delay for the scheduler, which will regularly compare the tag-guard-database with the configured tag value limits. | +| `.overflow-replacement` | `TAG_LIMIT_EXCEEDED` | After exceeding it's configured tag value limit, every tag will use this overflow replacement as value. | +| `.max-values-per-tag` | `1000` | The global tag value limit for every measure. | +| `.max-values-per-tag-by-measure` | `{}` | A map with measure names as key and their specific tag value limit as value. | + +There are three ways to define a tag value limit for measures. They are prioritized in the following order: + +1. Inside a metric definition for a particular measure +2. Globally for specific measures via `may-values-per-tag-by-measure` +3. Globally for all measures via `max-values-per-tag` + +This means that a tag value limit inside a metric definition will overwrite all other tag value limits +for the particular metric. A configured tag value limit in `max-values-per-tag-by-measure` will only overwrite the +globally set tag value limit in `max-values-per-tag` for the particular measure, but not a configured tag value limit +inside the metric definition. Let's look at an example: + +```yaml +inspectit: + metrics: + tag-guard: + max-values-per-tag: 1000 + max-values-per-tag-by-measure: + my_metric: 200 +``` + +In this configuration the global tag value limit is set to 1000, which means that every measure can only record 1000 unique +tag values for each tag. However, this does not apply to the measure `my_metric`, because the global tag value limit is +overwritten by `max-values-per-tag-by-measure` with 200. Thus, the measure `my_metric` can only record a maximum of 200 unique +tag values for each tag. + +Now, let's add another configuration: + +```yaml +inspectit: + metrics: + definitions: + 'my_metric': + tag-guard: 100 +``` + +This metric definition will overwrite the tag value limit specified in `max-values-per-tag-by-measure` for the measure `my_metric`, +resulting in a tag value limit of 100. Every other measure still uses the globally configured tag value +limit of 1000. + + +### Agent Health Monitoring + +If the tag value for a specific agent is exceeded, the Tag-Guard scheduler will detect an overflow and change +the agent health to `ERROR`. +Additionally, an agent health incident will be created, mentioning which tag-key has exceeded its tag value limit. +In the [Agent Status Table View](../config-server/status-table-view.md) of the Configuration-Server you can click on the +health state icon of a particular agent to view its last agent health incidents. You can set the amount of buffered incidents +with `inspectit.self-monitoring.agent-health.incident-buffer-size`. A list of incidents could look like this: + +![List of agent health incidents](assets/agent-health-incidents.png) + + +### How To Fix A Tag Value Overflow + +If a tag value limit was exceeded, there are two options to resolve the agent health `ERROR`. + +The **first option** would be to increase the tag value limit. Probably the limit has been estimated too low and thus has +to be increased. After increasing the tag value limit, the tag-guard-database scheduler will resolve the `ERROR`. + +The **second option** would be to adjust your configuration or application so the tag value limit should not be exceeded anymore. +After the adjustment, you will have to "reset" the recorded tag values in the tag-guard-database to resolve the `ERROR`. +One way to reset the tag-guard-database is to delete the local JSON file. However, this will delete all recorded tag values +and might not be the preferred solution.
    +A more preferable solution would be to only reset the tag values for a specific tag of a measure, +which has exceeded its tag value limit. +To do this, you could use the _**jq command-line JSON processor**_, which has to be installed on your system manually. +For example, you could use the following command, if you would like to delete all recorded tag values for the tag _my_tag_ inside the measure _my_metric_: + +- Unix: `jq '.my_metric.my_tag = []' tag-guard-database.json > temp.json && mv temp.json tag-guard-database.json` +- Windows: `jq ".my_metric.my_tag = []" tag-guard-database.json > temp.json && move temp.json tag-guard-database.json` + +In future versions of inspectIT there might be an option to reset specific tag values directly in the Configuration-Server UI. diff --git a/inspectit-ocelot-documentation/website/sidebars.json b/inspectit-ocelot-documentation/website/sidebars.json index c3b203f988..6fc372c455 100644 --- a/inspectit-ocelot-documentation/website/sidebars.json +++ b/inspectit-ocelot-documentation/website/sidebars.json @@ -20,7 +20,8 @@ "metrics/metric-exporters", "metrics/common-tags", "metrics/custom-metrics", - "metrics/self-monitoring" + "metrics/self-monitoring", + "metrics/tag-guard" ], "Tracing": [ "tracing/tracing", From 4cbb251933fffccc735215bcd278be755adf00c9 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Mon, 4 Dec 2023 09:29:21 +0100 Subject: [PATCH 18/21] include metric tags in tracing --- .../hook/MethodHookGenerator.java | 23 ++++++++++++++++--- .../span/ContinueOrStartSpanAction.java | 3 ++- .../hook/MethodHookGeneratorTest.java | 9 +++++--- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java index 82ec08e325..9e45e78bdf 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java @@ -109,7 +109,7 @@ public MethodHook buildHook(Class declaringClass, MethodDescription method, M builder.exitActions(buildActionCalls(config.getPreExitActions(), methodInfo)); builder.exitActions(buildActionCalls(config.getExitActions(), methodInfo)); if (tracingSettings != null) { - List actions = buildTracingExitActions(tracingSettings); + List actions = buildTracingExitActions(config); if (isTracingInternalActions() && config.isTraceExitHook()) { actions = wrapActionsWithTracing(actions); } @@ -190,7 +190,8 @@ private void configureSampling(RuleTracingSettings tracing, ContinueOrStartSpanA } @VisibleForTesting - List buildTracingExitActions(RuleTracingSettings tracing) { + List buildTracingExitActions(MethodHookConfiguration config) { + RuleTracingSettings tracing = config.getTracing(); val result = new ArrayList(); boolean isSpanStartedOrContinued = tracing.getStartSpan() || StringUtils.isNotBlank(tracing.getContinueSpan()); @@ -201,7 +202,13 @@ List buildTracingExitActions(RuleTracingSettings tracing) { result.add(new SetSpanStatusAction(accessor)); } - val attributes = tracing.getAttributes(); + val tracingAttributes = tracing.getAttributes(); + + //TODO Make this configurable -> if(tracing.autoCopy.enabled) + Collection metrics = config.getMetrics(); + Map attributes = collectMetricTags(metrics); + attributes.putAll(tracingAttributes); + if (!attributes.isEmpty()) { Map attributeAccessors = new HashMap<>(); attributes.forEach((attribute, variable) -> attributeAccessors.put(attribute, variableAccessorFactory.getVariableAccessor(variable))); @@ -219,6 +226,16 @@ List buildTracingExitActions(RuleTracingSettings tracing) { return result; } + private Map collectMetricTags(Collection metrics) { + Map tags = new HashMap<>(); + metrics.forEach(metric -> { + //tags.putAll(metric.getConstantTags()); + tags.putAll(metric.getDataTags()); + }); + + return tags; + } + private Optional buildMetricsRecorder(MethodHookConfiguration config) { Collection metricRecordingSettings = config.getMetrics(); if (!metricRecordingSettings.isEmpty()) { diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/span/ContinueOrStartSpanAction.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/span/ContinueOrStartSpanAction.java index 41615a0149..72cb9be2e9 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/span/ContinueOrStartSpanAction.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/span/ContinueOrStartSpanAction.java @@ -138,8 +138,9 @@ private void startSpan(ExecutionContext context) { hasLocalParent = !(currentSpan == Span.getInvalid() || !currentSpan.getSpanContext().isValid()); } - // This is necessary, since the lambda expression needs a final value + // This is necessary, since the lambda expression needs an effectively final value SpanContext finalRemoteParent = remoteParent; + Sampler sampler = getSampler(context); AutoCloseable spanCtx = Instances.logTraceCorrelator.startCorrelatedSpanScope(() -> stackTraceSampler.createAndEnterSpan(spanName, finalRemoteParent, sampler, spanKind, methodInfo, autoTrace)); ctx.setSpanScope(spanCtx); diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java index 970b7c84bf..ea486cfb7a 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java @@ -190,7 +190,8 @@ public void verifyNoActionsGeneratedIfNoSpanStartedOrContinued() { .endSpan(true) .build(); - List actions = generator.buildTracingExitActions(settings); + MethodHookConfiguration config = MethodHookConfiguration.builder().tracing(settings).build(); + List actions = generator.buildTracingExitActions(config); assertThat(actions).isEmpty(); } @@ -205,7 +206,8 @@ public void verifyActionsGeneratedIfSpanStarted() { .endSpan(true) .build(); - List actions = generator.buildTracingExitActions(settings); + MethodHookConfiguration config = MethodHookConfiguration.builder().tracing(settings).build(); + List actions = generator.buildTracingExitActions(config); assertThat(actions) .hasSize(3) @@ -224,7 +226,8 @@ public void verifyActionsGeneratedIfSpanContinued() { .endSpan(true) .build(); - List actions = generator.buildTracingExitActions(settings); + MethodHookConfiguration config = MethodHookConfiguration.builder().tracing(settings).build(); + List actions = generator.buildTracingExitActions(config); assertThat(actions) .hasSize(3) From a42789ccfd5534d7a62e219438442a28d0660758 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Mon, 4 Dec 2023 10:44:54 +0100 Subject: [PATCH 19/21] extend configuration --- .../config/model/tracing/TracingSettings.java | 8 +++- .../ocelot/config/default/basics.yml | 2 + .../hook/MethodHookGenerator.java | 45 +++++++++++++------ 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/tracing/TracingSettings.java b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/tracing/TracingSettings.java index e1529f7797..f174b99dc9 100644 --- a/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/tracing/TracingSettings.java +++ b/inspectit-ocelot-config/src/main/java/rocks/inspectit/ocelot/config/model/tracing/TracingSettings.java @@ -54,6 +54,12 @@ public enum AddCommonTags { @NotNull private AddCommonTags addCommonTags; + /** + * If enabled, metric tags will be added as attributes to tracing within the same rule + */ + @NotNull + private boolean addMetricTags; + /** * Settings for automatic tracing (stack trace sampling) */ @@ -79,7 +85,7 @@ public enum AddCommonTags { private long scheduleDelayMillis = 5000; /** - * I enabled 64 Bit Trace Ids are used instead of the default 128 Bit. + * If enabled, 64 Bit Trace Ids are used instead of the default 128 Bit. */ private boolean use64BitTraceIds = false; } diff --git a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml index 1390100720..986fdfe67b 100644 --- a/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml +++ b/inspectit-ocelot-config/src/main/resources/rocks/inspectit/ocelot/config/default/basics.yml @@ -36,6 +36,8 @@ inspectit: # defines when to add common tags as attributes to spans # options are: NEVER, ON_GLOBAL_ROOT, ON_LOCAL_ROOT, ALWAYS add-common-tags: ON_LOCAL_ROOT + # if enabled, metric tags will be added as attributes to tracing within the same rule + add-metric-tags: true # settings regarding automatic tracing (stack-trace-sampling) auto-tracing: frequency: 50ms diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java index 9e45e78bdf..140613dbd0 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGenerator.java @@ -202,16 +202,24 @@ List buildTracingExitActions(MethodHookConfiguration config) { result.add(new SetSpanStatusAction(accessor)); } - val tracingAttributes = tracing.getAttributes(); - - //TODO Make this configurable -> if(tracing.autoCopy.enabled) - Collection metrics = config.getMetrics(); - Map attributes = collectMetricTags(metrics); - attributes.putAll(tracingAttributes); + Map tracingAttributes = tracing.getAttributes(); + Map attributes = tracingAttributes; + Map constantAttributes = new HashMap<>(); + + if(addMetricsToTracing()) { + Collection metrics = config.getMetrics(); + constantAttributes = collectMetricConstantTags(metrics); + attributes = collectMetricDataTags(metrics); + // write tracing attributes after metric tags, to allow overwriting of metric tags + attributes.putAll(tracingAttributes); + } - if (!attributes.isEmpty()) { + if (!attributes.isEmpty() || !constantAttributes.isEmpty()) { Map attributeAccessors = new HashMap<>(); + constantAttributes.forEach((attribute, constant) -> attributeAccessors.put(attribute, variableAccessorFactory.getConstantAccessor(constant))); + // if necessary, overwrite constant attributes attributes.forEach((attribute, variable) -> attributeAccessors.put(attribute, variableAccessorFactory.getVariableAccessor(variable))); + IHookAction endTraceAction = new WriteSpanAttributesAction(attributeAccessors, obfuscationManager.obfuscatorySupplier()); IHookAction actionWithConditions = ConditionalHookAction.wrapWithConditionChecks(tracing.getAttributeConditions(), endTraceAction, variableAccessorFactory); result.add(actionWithConditions); @@ -226,14 +234,16 @@ List buildTracingExitActions(MethodHookConfiguration config) { return result; } - private Map collectMetricTags(Collection metrics) { - Map tags = new HashMap<>(); - metrics.forEach(metric -> { - //tags.putAll(metric.getConstantTags()); - tags.putAll(metric.getDataTags()); - }); + private Map collectMetricDataTags(Collection metrics) { + Map dataTags = new HashMap<>(); + metrics.forEach(metric -> dataTags.putAll(metric.getDataTags())); + return dataTags; + } - return tags; + private Map collectMetricConstantTags(Collection metrics) { + Map constantTags = new HashMap<>(); + metrics.forEach(metric -> constantTags.putAll(metric.getConstantTags())); + return constantTags; } private Optional buildMetricsRecorder(MethodHookConfiguration config) { @@ -254,6 +264,13 @@ private Optional buildMetricsRecorder(MethodHookConfiguration confi } } + /** + * @return Returns whether metrics tags should be added to tracing as attributes + */ + private boolean addMetricsToTracing() { + return environment.getCurrentConfig().getTracing().isAddMetricTags(); + } + /** * @return Returns whether action tracing should be enabled for internal actions (e.g. {@link MetricsRecorder}). */ From e6d6fd124837778cf00e5e195dbf854804217be3 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Mon, 4 Dec 2023 11:54:47 +0100 Subject: [PATCH 20/21] add tests --- .../span/WriteSpanAttributesAction.java | 6 +- .../hook/MethodHookGeneratorTest.java | 242 +++++++++++++++++- 2 files changed, 242 insertions(+), 6 deletions(-) diff --git a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/span/WriteSpanAttributesAction.java b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/span/WriteSpanAttributesAction.java index a15b7cd3ce..17bf86519c 100644 --- a/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/span/WriteSpanAttributesAction.java +++ b/inspectit-ocelot-core/src/main/java/rocks/inspectit/ocelot/core/instrumentation/hook/actions/span/WriteSpanAttributesAction.java @@ -1,10 +1,7 @@ package rocks.inspectit.ocelot.core.instrumentation.hook.actions.span; import io.opentelemetry.api.trace.Span; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Singular; -import lombok.val; +import lombok.*; import rocks.inspectit.ocelot.core.instrumentation.hook.VariableAccessor; import rocks.inspectit.ocelot.core.instrumentation.hook.actions.IHookAction; import rocks.inspectit.ocelot.core.privacy.obfuscation.IObfuscatory; @@ -20,6 +17,7 @@ public class WriteSpanAttributesAction implements IHookAction { @Singular + @Getter private final Map attributeAccessors; private final Supplier obfuscatorySupplier; diff --git a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java index ea486cfb7a..5f643586ca 100644 --- a/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java +++ b/inspectit-ocelot-core/src/test/java/rocks/inspectit/ocelot/core/instrumentation/hook/MethodHookGeneratorTest.java @@ -1,6 +1,8 @@ package rocks.inspectit.ocelot.core.instrumentation.hook; +import com.google.common.collect.HashMultiset; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Multiset; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import org.assertj.core.api.Assertions; @@ -27,8 +29,8 @@ import rocks.inspectit.ocelot.core.selfmonitoring.ActionScopeFactory; import rocks.inspectit.ocelot.core.testutils.Dummy; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; @@ -237,4 +239,240 @@ public void verifyActionsGeneratedIfSpanContinued() { } } + + @Nested + class collectMetricTagsInTracing { + + private RuleTracingSettings createTracingSettings(Map attributes) { + return RuleTracingSettings.builder() + .startSpan(true) + .continueSpan(null) + .attributes(attributes) + .endSpan(true) + .build(); + } + + private MetricRecordingSettings createMetricSettings(Map dataTags, Map constantTags) { + return MetricRecordingSettings.builder().metric("name").value("1.0") + .dataTags(dataTags).constantTags(constantTags).build(); + } + + @Test + public void verifyTagsHaveBeenAdded() { + when(environment.getCurrentConfig().getTracing().isAddMetricTags()).thenReturn(true); + VariableAccessor tracingAccessor = (context) -> "tracing-text"; + VariableAccessor dataAccessor = (context) -> "data-text"; + VariableAccessor constantAccessor = (context) -> "constant-text"; + when(variableAccessorFactory.getVariableAccessor("tracing-value")).thenReturn(tracingAccessor); + when(variableAccessorFactory.getVariableAccessor("data-value")).thenReturn(dataAccessor); + when(variableAccessorFactory.getConstantAccessor(any())).thenReturn(constantAccessor); + Map expectedResult = new HashMap<>(); + expectedResult.put("tracing-key", tracingAccessor); + expectedResult.put("data-tag", dataAccessor); + expectedResult.put("constant-tag", constantAccessor); + + Map attributes = ImmutableMap.of("tracing-key", "tracing-value"); + RuleTracingSettings tracing = createTracingSettings(attributes); + + Map dataTags = ImmutableMap.of("data-tag", "data-value"); + Map constantTags = ImmutableMap.of("constant-tag", "constant-value"); + MetricRecordingSettings metric = createMetricSettings(dataTags, constantTags); + Multiset metrics = HashMultiset.create(); + metrics.add(metric); + + MethodHookConfiguration config = MethodHookConfiguration.builder().tracing(tracing).metrics(metrics).build(); + List actions = generator.buildTracingExitActions(config); + + Optional maybeAction = actions.stream().filter(action -> action instanceof WriteSpanAttributesAction).findFirst(); + assertThat(maybeAction.isPresent()).isTrue(); + WriteSpanAttributesAction attributeAction = (WriteSpanAttributesAction) maybeAction.get(); + + Map accessors = attributeAction.getAttributeAccessors(); + assertThat(accessors.size()).isEqualTo(expectedResult.size()); + assertThat(accessors).containsAllEntriesOf(expectedResult); + } + + @Test + public void verifyNoTagsHaveBeenAdded() { + when(environment.getCurrentConfig().getTracing().isAddMetricTags()).thenReturn(false); + VariableAccessor tracingAccessor = (context) -> "tracing-text"; + when(variableAccessorFactory.getVariableAccessor("tracing-value")).thenReturn(tracingAccessor); + Map expectedResult = new HashMap<>(); + expectedResult.put("tracing-key", tracingAccessor); + + Map attributes = ImmutableMap.of("tracing-key", "tracing-value"); + RuleTracingSettings tracing = createTracingSettings(attributes); + + Map dataTags = ImmutableMap.of("data-tag", "data-value"); + Map constantTags = ImmutableMap.of("constant-tag", "constant-value"); + MetricRecordingSettings metric = createMetricSettings(dataTags, constantTags); + Multiset metrics = HashMultiset.create(); + metrics.add(metric); + + MethodHookConfiguration config = MethodHookConfiguration.builder().tracing(tracing).metrics(metrics).build(); + List actions = generator.buildTracingExitActions(config); + + Optional maybeAction = actions.stream().filter(action -> action instanceof WriteSpanAttributesAction).findFirst(); + assertThat(maybeAction.isPresent()).isTrue(); + WriteSpanAttributesAction attributeAction = (WriteSpanAttributesAction) maybeAction.get(); + + Map accessors = attributeAction.getAttributeAccessors(); + assertThat(accessors.size()).isEqualTo(expectedResult.size()); + assertThat(accessors).containsAllEntriesOf(expectedResult); + } + + @Test + void verifyTracingOverwritesMetrics() { + when(environment.getCurrentConfig().getTracing().isAddMetricTags()).thenReturn(true); + VariableAccessor tracingAccessor = (context) -> "tracing-text"; + when(variableAccessorFactory.getVariableAccessor("tracing-value")).thenReturn(tracingAccessor); + Map expectedResult = new HashMap<>(); + expectedResult.put("one-key", tracingAccessor); + + Map attributes = ImmutableMap.of("one-key", "tracing-value"); + RuleTracingSettings tracing = createTracingSettings(attributes); + + Map dataTags = ImmutableMap.of("one-key", "data-value"); + Map constantTags = ImmutableMap.of("one-key", "constant-value"); + MetricRecordingSettings metric = createMetricSettings(dataTags, constantTags); + Multiset metrics = HashMultiset.create(); + metrics.add(metric); + + MethodHookConfiguration config = MethodHookConfiguration.builder().tracing(tracing).metrics(metrics).build(); + List actions = generator.buildTracingExitActions(config); + + Optional maybeAction = actions.stream().filter(action -> action instanceof WriteSpanAttributesAction).findFirst(); + assertThat(maybeAction.isPresent()).isTrue(); + WriteSpanAttributesAction attributeAction = (WriteSpanAttributesAction) maybeAction.get(); + + Map accessors = attributeAction.getAttributeAccessors(); + assertThat(accessors.size()).isEqualTo(expectedResult.size()); + assertThat(accessors).containsAllEntriesOf(expectedResult); + } + + @Test + void verifyDataTagsOverwriteConstantTags() { + when(environment.getCurrentConfig().getTracing().isAddMetricTags()).thenReturn(true); + VariableAccessor dataAccessor = (context) -> "data-text"; + when(variableAccessorFactory.getVariableAccessor("data-value")).thenReturn(dataAccessor); + Map expectedResult = new HashMap<>(); + expectedResult.put("one-key", dataAccessor); + + Map attributes = Collections.emptyMap(); + RuleTracingSettings tracing = createTracingSettings(attributes); + + Map dataTags = ImmutableMap.of("one-key", "data-value"); + Map constantTags = ImmutableMap.of("one-key", "constant-value"); + MetricRecordingSettings metric = createMetricSettings(dataTags, constantTags); + Multiset metrics = HashMultiset.create(); + metrics.add(metric); + + MethodHookConfiguration config = MethodHookConfiguration.builder().tracing(tracing).metrics(metrics).build(); + List actions = generator.buildTracingExitActions(config); + + Optional maybeAction = actions.stream().filter(action -> action instanceof WriteSpanAttributesAction).findFirst(); + assertThat(maybeAction.isPresent()).isTrue(); + WriteSpanAttributesAction attributeAction = (WriteSpanAttributesAction) maybeAction.get(); + + Map accessors = attributeAction.getAttributeAccessors(); + assertThat(accessors.size()).isEqualTo(expectedResult.size()); + assertThat(accessors).containsAllEntriesOf(expectedResult); + } + + @Test + void verifyOnlyDataTags() { + when(environment.getCurrentConfig().getTracing().isAddMetricTags()).thenReturn(true); + VariableAccessor dataAccessor = (context) -> "data-text"; + when(variableAccessorFactory.getVariableAccessor("data-value")).thenReturn(dataAccessor); + Map expectedResult = new HashMap<>(); + expectedResult.put("data-tag", dataAccessor); + + Map attributes = Collections.emptyMap(); + RuleTracingSettings tracing = createTracingSettings(attributes); + + Map dataTags = ImmutableMap.of("data-tag", "data-value"); + Map constantTags = Collections.emptyMap(); + MetricRecordingSettings metric = createMetricSettings(dataTags, constantTags); + Multiset metrics = HashMultiset.create(); + metrics.add(metric); + + MethodHookConfiguration config = MethodHookConfiguration.builder().tracing(tracing).metrics(metrics).build(); + List actions = generator.buildTracingExitActions(config); + + Optional maybeAction = actions.stream().filter(action -> action instanceof WriteSpanAttributesAction).findFirst(); + assertThat(maybeAction.isPresent()).isTrue(); + WriteSpanAttributesAction attributeAction = (WriteSpanAttributesAction) maybeAction.get(); + + Map accessors = attributeAction.getAttributeAccessors(); + assertThat(accessors.size()).isEqualTo(expectedResult.size()); + assertThat(accessors).containsAllEntriesOf(expectedResult); + } + + @Test + void verifyOnlyConstantTags() { + when(environment.getCurrentConfig().getTracing().isAddMetricTags()).thenReturn(true); + VariableAccessor constantAccessor = (context) -> "constant-text"; + when(variableAccessorFactory.getConstantAccessor(any())).thenReturn(constantAccessor); + Map expectedResult = new HashMap<>(); + expectedResult.put("constant-tag", constantAccessor); + + Map attributes = Collections.emptyMap(); + RuleTracingSettings tracing = createTracingSettings(attributes); + + Map dataTags = Collections.emptyMap(); + Map constantTags = ImmutableMap.of("constant-tag", "constant-value"); + MetricRecordingSettings metric = createMetricSettings(dataTags, constantTags); + Multiset metrics = HashMultiset.create(); + metrics.add(metric); + + MethodHookConfiguration config = MethodHookConfiguration.builder().tracing(tracing).metrics(metrics).build(); + List actions = generator.buildTracingExitActions(config); + + Optional maybeAction = actions.stream().filter(action -> action instanceof WriteSpanAttributesAction).findFirst(); + assertThat(maybeAction.isPresent()).isTrue(); + WriteSpanAttributesAction attributeAction = (WriteSpanAttributesAction) maybeAction.get(); + + Map accessors = attributeAction.getAttributeAccessors(); + assertThat(accessors.size()).isEqualTo(expectedResult.size()); + assertThat(accessors).containsAllEntriesOf(expectedResult); + } + + @Test + void verifyTagsOfMultipleMetrics() { + when(environment.getCurrentConfig().getTracing().isAddMetricTags()).thenReturn(true); + VariableAccessor tracingAccessor = (context) -> "tracing-text"; + VariableAccessor dataAccessor1 = (context) -> "data-text-1"; + VariableAccessor dataAccessor2 = (context) -> "data-text-2"; + when(variableAccessorFactory.getVariableAccessor("tracing-value")).thenReturn(tracingAccessor); + when(variableAccessorFactory.getVariableAccessor("data-value-1")).thenReturn(dataAccessor1); + when(variableAccessorFactory.getVariableAccessor("data-value-2")).thenReturn(dataAccessor2); + Map expectedResult = new HashMap<>(); + expectedResult.put("tracing-key", tracingAccessor); + expectedResult.put("data-tag-1", dataAccessor1); + expectedResult.put("data-tag-2", dataAccessor2); + + Map attributes = ImmutableMap.of("tracing-key", "tracing-value"); + RuleTracingSettings tracing = createTracingSettings(attributes); + + Map dataTags1 = ImmutableMap.of("data-tag-1", "data-value-1"); + Map dataTags2 = ImmutableMap.of("data-tag-2", "data-value-2"); + Map constantTags = Collections.emptyMap(); + MetricRecordingSettings metric1 = createMetricSettings(dataTags1, constantTags); + MetricRecordingSettings metric2 = createMetricSettings(dataTags2, constantTags); + Multiset metrics = HashMultiset.create(); + metrics.add(metric1); + metrics.add(metric2); + + MethodHookConfiguration config = MethodHookConfiguration.builder().tracing(tracing).metrics(metrics).build(); + List actions = generator.buildTracingExitActions(config); + + Optional maybeAction = actions.stream().filter(action -> action instanceof WriteSpanAttributesAction).findFirst(); + assertThat(maybeAction.isPresent()).isTrue(); + WriteSpanAttributesAction attributeAction = (WriteSpanAttributesAction) maybeAction.get(); + + Map accessors = attributeAction.getAttributeAccessors(); + assertThat(accessors.size()).isEqualTo(expectedResult.size()); + assertThat(accessors).containsAllEntriesOf(expectedResult); + } + } } From 0b0a18b9e8c374894fefa51d6b9b2fad49b4d889 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Mon, 4 Dec 2023 13:47:27 +0100 Subject: [PATCH 21/21] update documentation --- .../docs/tracing/tracing.md | 59 ++++++++++++++++++- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/inspectit-ocelot-documentation/docs/tracing/tracing.md b/inspectit-ocelot-documentation/docs/tracing/tracing.md index 01b5770e68..4560f3f025 100644 --- a/inspectit-ocelot-documentation/docs/tracing/tracing.md +++ b/inspectit-ocelot-documentation/docs/tracing/tracing.md @@ -75,7 +75,7 @@ inspectit: propagation-format: B3 # the format for propagating correlation headers ``` -Currently the following formats are supported for sending correlation information: +Currently, the following formats are supported for sending correlation information: | Property | Format | Description |---|---|---| @@ -87,6 +87,61 @@ Currently the following formats are supported for sending correlation informatio It is important to note that this configuration refers to the format of the correlation information used to **send this data**. When processing correlation information that the agent receives, it automatically uses the correct format. ::: +### Adding Metric Tags + +It is possible to include all metrics tags of the current rule scope as tracing attributes. +This way it isn't necessary to define key-value pairs twice for metrics as well as tracing. +However, it is only possible to use metric tags as tracing attributes, but not vice versa! + +You can disable this feature in the tracing configuration: + +```YAML +inspectit: + tracing: + add-metric-tags: true +``` + +In this example, both tags of the metric `my_counter` will be used as attributes for the tracing within this rule. + +```YAML +rules: + 'r_example': + include: + 'r_myRule': true + entry: + 'my_data': + action: 'a_getData' + metrics: + my_counter: + value: 1 + data-tags: + 'example': 'my_data' + constant-tags: + 'scope': 'EXAMPLE' +``` + +Each tag key can only be used once within one trace. Thus, if a tag key has been assigned multiple values within one rule, +the acquired tag value will be determined hierarchically. Tag keys defined in `metrics.data-tags` will overwrite tag keys +defined in `metrics.constant-tags`. Tag keys defined in `tracing.attributes` will always overwrite tag keys defined in `metrics`. +In the example below, the tracing attributes will use 'trace' as value for 'myTag' and 'yourData' as value for 'yourTag'. + + +```YAML +rules: + 'r_example': + tracing: + attributes: + 'myTag': 'trace' + metrics: + my_counter: + data-tags: + 'myTag': 'myData' + 'yourTag': 'yourData' + constant-tags: + 'yourTag': 'CONSTANT' +``` + + ### Using 64-Bit Trace IDs Since version 2.0.0, the inspectIT Ocelot Agent is able to generate trace IDs with a size of 64 bits instead of the 128 bit trace IDs used by default by the agent. @@ -100,4 +155,4 @@ inspectit: :::important Please note that some propagation formats do not support 64-bit Ids, such as the W3C "Trace Context". In this case the 64-bit trace IDs are padded with leading zeros. -::: \ No newline at end of file +:::