From 39880bbf48f4ee1722472bca1013d2e282a89f69 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Sep 2021 12:31:18 +0000 Subject: [PATCH 01/24] Bump tar from 6.1.0 to 6.1.11 in /yamcs-web/src/main/webapp Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.11. - [Release notes](https://github.com/npm/node-tar/releases) - [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.11) --- updated-dependencies: - dependency-name: tar dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yamcs-web/src/main/webapp/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yamcs-web/src/main/webapp/package-lock.json b/yamcs-web/src/main/webapp/package-lock.json index 38d830b2f8e..2920f7d3e3e 100644 --- a/yamcs-web/src/main/webapp/package-lock.json +++ b/yamcs-web/src/main/webapp/package-lock.json @@ -10738,9 +10738,9 @@ "dev": true }, "tar": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.6.tgz", - "integrity": "sha512-oaWyu5dQbHaYcyZCTfyPpC+VmI62/OM2RTUYavTk1MDr1cwW5Boi3baeYQKiZbY2uSQJGr+iMOzb/JFxLrft+g==", + "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", From 148257311f0d851dbbbab1c3d3e4ff58bab4e2ea Mon Sep 17 00:00:00 2001 From: Mark Rose Date: Sat, 18 Sep 2021 15:06:04 -0700 Subject: [PATCH 02/24] Allow specification of generation time in set parameter value requests Modify BatchSetParameterValuesRequest.SetParameterValueRequest and SetParameterValueRequest to have an optional generation time for the new value. Modify processing API to use the generation time in the request, if specified. --- .../main/proto/yamcs/protobuf/processing/processing.proto | 8 ++++++++ .../src/main/java/org/yamcs/http/api/ProcessingApi.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/yamcs-api/src/main/proto/yamcs/protobuf/processing/processing.proto b/yamcs-api/src/main/proto/yamcs/protobuf/processing/processing.proto index a010c98f6ab..7d02231a2cc 100644 --- a/yamcs-api/src/main/proto/yamcs/protobuf/processing/processing.proto +++ b/yamcs-api/src/main/proto/yamcs/protobuf/processing/processing.proto @@ -318,6 +318,10 @@ message SetParameterValueRequest { // The new value. optional Value value = 4; + + // The generation time of the value. If specified, must be a date + // string in ISO 8601 format. + optional google.protobuf.Timestamp generationTime = 5; } message BatchGetParameterValuesRequest { @@ -342,6 +346,10 @@ message BatchSetParameterValuesRequest { message SetParameterValueRequest { optional NamedObjectId id = 1; optional Value value = 2; + + // The generation time of the value. If specified, must be a date + // string in ISO 8601 format. + optional google.protobuf.Timestamp generationTime = 3; } // Yamcs instance name. diff --git a/yamcs-core/src/main/java/org/yamcs/http/api/ProcessingApi.java b/yamcs-core/src/main/java/org/yamcs/http/api/ProcessingApi.java index 3152a37d19e..a89046c9025 100644 --- a/yamcs-core/src/main/java/org/yamcs/http/api/ProcessingApi.java +++ b/yamcs-core/src/main/java/org/yamcs/http/api/ProcessingApi.java @@ -280,6 +280,10 @@ public void setParameterValue(Context ctx, SetParameterValueRequest request, Obs pv = new PartialParameterValue(p, pid.getPath()); } pv.setEngValue(v); + if (request.hasGenerationTime()) { + pv.setGenerationTime(TimeEncoding + .fromProtobufTimestamp(request.getGenerationTime())); + } try { mgr.updateParameters(Arrays.asList(pv)); } catch (IllegalArgumentException e) { @@ -386,6 +390,10 @@ public void batchSetParameterValues(Context ctx, BatchSetParameterValuesRequest pv = new PartialParameterValue(p, pid.getPath()); } pv.setEngValue(ValueUtility.fromGpb(r.getValue())); + if (r.hasGenerationTime()) { + pv.setGenerationTime(TimeEncoding + .fromProtobufTimestamp(r.getGenerationTime())); + } List l = pvmap.computeIfAbsent(p.getDataSource(), k -> new ArrayList<>()); l.add(pv); From 1d825ed6ff1ecd1912187e47e07b92ba4cee65d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Sep 2021 09:20:03 +0000 Subject: [PATCH 03/24] Bump nth-check from 2.0.0 to 2.0.1 in /yamcs-web/src/main/webapp Bumps [nth-check](https://github.com/fb55/nth-check) from 2.0.0 to 2.0.1. - [Release notes](https://github.com/fb55/nth-check/releases) - [Commits](https://github.com/fb55/nth-check/compare/v2.0.0...v2.0.1) --- updated-dependencies: - dependency-name: nth-check dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yamcs-web/src/main/webapp/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yamcs-web/src/main/webapp/package-lock.json b/yamcs-web/src/main/webapp/package-lock.json index 2920f7d3e3e..a45d805ab8e 100644 --- a/yamcs-web/src/main/webapp/package-lock.json +++ b/yamcs-web/src/main/webapp/package-lock.json @@ -7009,9 +7009,9 @@ } }, "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "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" From 6490f09c0dd1977c9e4b6e13e852793153624457 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Sat, 9 Oct 2021 05:15:32 +0200 Subject: [PATCH 04/24] remove unneeded argument --- .../java/org/yamcs/parameterarchive/ParameterArchive.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/ParameterArchive.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/ParameterArchive.java index 3ded4305b5e..065a2f6428d 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/ParameterArchive.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/ParameterArchive.java @@ -207,7 +207,7 @@ public void writeToArchive(PGSegment pgs) throws RocksDBException, IOException { pgs.consolidate(); Partition p = createAndGetPartition(getIntervalStart(pgs.getSegmentStart())); try (WriteBatch writeBatch = new WriteBatch(); WriteOptions wo = new WriteOptions()) { - writeToBatch(writeBatch, p, pgs); + writeToBatch(writeBatch, pgs); tablespace.getRdb(p.partitionDir, false).getDb().write(wo, writeBatch); } } @@ -219,13 +219,13 @@ public void writeToArchive(long segStart, Collection pgList) throws R for (PGSegment pgs : pgList) { pgs.consolidate(); assert (segStart == pgs.getSegmentStart()); - writeToBatch(writeBatch, p, pgs); + writeToBatch(writeBatch, pgs); } tablespace.getRdb(p.partitionDir, false).getDb().write(wo, writeBatch); } } - private void writeToBatch(WriteBatch writeBatch, Partition p, PGSegment pgs) throws RocksDBException { + private void writeToBatch(WriteBatch writeBatch, PGSegment pgs) throws RocksDBException { // write the time segment SortedTimeSegment timeSegment = pgs.getTimeSegment(); byte[] timeKey = new SegmentKey(parameterIdDb.timeParameterId, pgs.getParameterGroupId(), From ebffb7358786397af63aead20554019157b23fd3 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Sat, 9 Oct 2021 05:52:07 +0200 Subject: [PATCH 05/24] Delete old overlapping segments in ParameterArchive Before writing new segments in the archive, delete the old overlapping ones. Otherwise, if the new segment start does not coincide with the old segment start, duplicated data will exist Fixes #617 --- .../org/yamcs/parameterarchive/PGSegment.java | 4 ++++ .../parameterarchive/ParameterArchive.java | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/PGSegment.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/PGSegment.java index 6af46ad98c4..9bd380fdf89 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/PGSegment.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/PGSegment.java @@ -170,6 +170,10 @@ public long getSegmentStart() { return timeSegment.getSegmentStart(); } + /** + * + * @return timestamp of the last parameter in this segment + */ public long getSegmentEnd() { return timeSegment.getSegmentEnd(); } diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/ParameterArchive.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/ParameterArchive.java index 065a2f6428d..39e4d61d204 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/ParameterArchive.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/ParameterArchive.java @@ -25,6 +25,7 @@ import org.yamcs.utils.ByteArrayUtils; import org.yamcs.utils.DatabaseCorruptionException; import org.yamcs.utils.DecodingException; +import org.yamcs.utils.IntArray; import org.yamcs.utils.PartitionedTimeInterval; import org.yamcs.utils.TimeEncoding; import org.yamcs.utils.TimeInterval; @@ -226,6 +227,8 @@ public void writeToArchive(long segStart, Collection pgList) throws R } private void writeToBatch(WriteBatch writeBatch, PGSegment pgs) throws RocksDBException { + removeOldOverlappingSegments(writeBatch, pgs); + // write the time segment SortedTimeSegment timeSegment = pgs.getTimeSegment(); byte[] timeKey = new SegmentKey(parameterIdDb.timeParameterId, pgs.getParameterGroupId(), @@ -290,6 +293,25 @@ private void writeToBatch(WriteBatch writeBatch, PGSegment pgs) throws RocksDBEx } } + private void removeOldOverlappingSegments(WriteBatch writeBatch, PGSegment pgs) throws RocksDBException { + long segStart = pgs.getSegmentStart(); + long segEnd = pgs.getSegmentEnd(); + int pgid = pgs.getParameterGroupId(); + + byte[] timeKeyStart = new SegmentKey(parameterIdDb.timeParameterId, pgid, segStart, (byte) 0).encode(); + byte[] timeKeyEnd = new SegmentKey(parameterIdDb.timeParameterId, pgid, segEnd, Byte.MAX_VALUE).encode(); + writeBatch.deleteRange(timeKeyStart, timeKeyEnd); + IntArray parameterIds = pgs.parameterIds; + + for (int i = 0; i < parameterIds.size(); i++) { + int pid = parameterIds.get(i); + + byte[] paraKeyStart = new SegmentKey(pid, pgid, segStart, (byte) 0).encode(); + byte[] paraKeyEnd = new SegmentKey(pid, pgid, segEnd, Byte.MAX_VALUE).encode(); + writeBatch.deleteRange(paraKeyStart, paraKeyEnd); + } + } + /** * get partition for segment, creating it if it doesn't exist * From 4f47db782e5e16c4ba280cd661605f233a41c0d6 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Sat, 9 Oct 2021 07:06:20 +0200 Subject: [PATCH 06/24] Fix realtime parameter archive filler The sorting threshold was not working properly. Fixes #618 --- .../org/yamcs/parameterarchive/PGSegment.java | 9 --------- .../parameterarchive/RealtimeArchiveFiller.java | 5 +++-- .../yamcs/parameterarchive/SortedTimeSegment.java | 15 +++------------ 3 files changed, 6 insertions(+), 23 deletions(-) diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/PGSegment.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/PGSegment.java index 9bd380fdf89..0b4d8c2f5a3 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/PGSegment.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/PGSegment.java @@ -152,15 +152,6 @@ public ParameterValueSegment getParameterValue(int pid) { } return pvSegments.get(idx); } - /** - * called before writing to disk to set the segment start to the first timestamp in the segment. - * - * This is necessary in order to not overwrite some existing data in the archive (from a previous yamcs run in the - * same interval) - */ - void trimSegmentStart() { - timeSegment.trimSegmentStart(); - } public long getInterval() { return ParameterArchive.getInterval(timeSegment.getSegmentStart()); diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java index ac66a84d0c7..f45dcf3db00 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java @@ -230,11 +230,11 @@ public synchronized void addRecord(long t, List values) { log.warn("Time jumped in the past; current timestamp: {}, new timestamp: {}. Flushing old data.", TimeEncoding.toString(segHead.getSegmentStart()), TimeEncoding.toString(t)); flush(); - } else if (t < segHead.getSegmentStart()) { + } else if (t < segHead.getSegmentStart() - sortingThreshold) { log.warn("Dropping old data with timestamp {} (minimum allowed is {})." + "Unsorted data received in the realtime filler? Consider using a backfiller instead", TimeEncoding.toString(t), - TimeEncoding.toString(segments[head].getSegmentStart() - sortingThreshold)); + TimeEncoding.toString(segHead.getSegmentStart() - sortingThreshold)); return; } else { writeToArchive(t); @@ -374,6 +374,7 @@ private List getSegmentsAscending(int pid) { if (seg == null) { continue; } + ParameterValueSegment pvs = seg.getParameterValue(pid); if (pvs != null) { r.add(pvs); diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/SortedTimeSegment.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/SortedTimeSegment.java index 4d81a42dc43..aee195fd5af 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/SortedTimeSegment.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/SortedTimeSegment.java @@ -49,8 +49,10 @@ public int add(long instant) { + " intervalStart: " + TimeEncoding.toString(getIntervalStart(segmentStart)) + ", instant: " + TimeEncoding.toString(instant)); } + if (instant < segmentStart) { - throw new IllegalArgumentException("The timestamp has to be bigger than the segmentStart"); + tsarray.add((int) (segmentStart - instant)); + segmentStart = instant; } return tsarray.insert((int) (instant - segmentStart)); @@ -202,17 +204,6 @@ public long[] getRange(int posStart, int posStop, boolean ascending) { return r; } - /** - * sets the segmentStart to the first timestamp of the segment (and adjusts all the other times accordingly) - */ - void trimSegmentStart() { - int diff = tsarray.get(0); - if (diff != 0) { - tsarray.add(-diff); - segmentStart += diff; - } - } - public String toString() { return "[TimeSegment: id:" + segmentStart + ", relative times: " + tsarray.toString() + "]"; } From acbec97edec487e17d5671778153f7b8106d26e6 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Tue, 12 Oct 2021 04:50:14 +0200 Subject: [PATCH 07/24] RealtimeFiller fixes - refactored the RealtimeFiller.SegmentQueue into a static class to allow unit tests - fixed the sortingThreshold interpretation - fixed the SegmentIterator iteration order (when ascending, the realtime filler should be last) See #618 and #619 --- .../RealtimeArchiveFiller.java | 156 ++++++++++-------- .../parameterarchive/SegmentIterator.java | 7 +- .../parameterarchive/SegmentQueueTest.java | 85 ++++++++++ 3 files changed, 178 insertions(+), 70 deletions(-) create mode 100644 yamcs-core/src/test/java/org/yamcs/parameterarchive/SegmentQueueTest.java diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java index f45dcf3db00..28d66d11fb1 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java @@ -8,9 +8,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import java.util.function.Function; import org.rocksdb.RocksDBException; import org.yamcs.ConfigurationException; @@ -123,7 +125,7 @@ public void shutDown() throws InterruptedException { log.info("Shutting down, writing all pending segments"); for (SegmentQueue queue : queues.values()) { - queue.flush(); + queue.flush(pgs -> scheduleWriteToArchive(pgs)); } executor.shutdown(); if (!executor.awaitTermination(30, TimeUnit.SECONDS)) { @@ -133,17 +135,56 @@ public void shutDown() throws InterruptedException { @Override protected void processParameters(long t, BasicParameterList pvList) { + int parameterGroupId; try { - int parameterGroupId = parameterGroupIdMap.createAndGet(pvList.getPids()); - - SegmentQueue segQueue = queues.computeIfAbsent(parameterGroupId, - id -> new SegmentQueue(parameterGroupId, pvList.getPids())); - segQueue.addRecord(t, pvList.getValues()); + parameterGroupId = parameterGroupIdMap.createAndGet(pvList.getPids()); } catch (RocksDBException e) { - log.error("Error writing to the parameter archive", e); - } catch (Exception e) { - e.printStackTrace(); + log.error("Error creating parameter group id", e); + return; } + + SegmentQueue segQueue = queues.computeIfAbsent(parameterGroupId, + id -> new SegmentQueue(parameterGroupId, pvList.getPids(), maxSegmentSize)); + + synchronized (segQueue) { + if (!segQueue.isEmpty()) { + long segStart = segQueue.getStart(); + if (t < segStart - pastJumpThreshold) { + log.warn( + "Time jumped in the past; current timestamp: {}, new timestamp: {}. Flushing old data.", + TimeEncoding.toString(segStart), TimeEncoding.toString(t)); + segQueue.flush(pgs -> scheduleWriteToArchive(pgs)); + } else if (t < segQueue.getStart() - sortingThreshold) { + log.warn("Dropping old data with timestamp {} (minimum allowed is {})." + + "Unsorted data received in the realtime filler? Consider using a backfiller instead", + TimeEncoding.toString(t), + TimeEncoding.toString(segStart - sortingThreshold)); + return; + } else { + segQueue.sendToArchive(segStart - sortingThreshold, pgs -> scheduleWriteToArchive(pgs)); + } + } + + if (!segQueue.addRecord(t, pvList.getValues())) { + log.warn("Realtime parameter archive queue full." + + "Consider increasing the writerThreads (if CPUs are available) or using a back filler"); + } + } + + } + + private CompletableFuture scheduleWriteToArchive(PGSegment pgs) { + return CompletableFuture.supplyAsync(() -> { + try { + long t0 = System.nanoTime(); + parameterArchive.writeToArchive(pgs); + long d = System.nanoTime() - t0; + log.debug("Wrote segment {} to archive in {} millisec", pgs, d / 1000_000); + } catch (RocksDBException | IOException e) { + log.error("Error writing segment to the parameter archive", e); + } + return null; + }, executor); } @Override @@ -207,7 +248,7 @@ public List getSegments(int parameterId, int parameterGro * * */ - class SegmentQueue { + static class SegmentQueue { static final int QSIZE = 16; // has to be a power of 2! static final int MASK = QSIZE - 1; final PGSegment[] segments = new PGSegment[QSIZE]; @@ -216,30 +257,22 @@ class SegmentQueue { final int parameterGroupId; final IntArray parameterIds; + final int maxSegmentSize; - public SegmentQueue(int parameterGroupId, IntArray parameterIds) { + public SegmentQueue(int parameterGroupId, IntArray parameterIds, int maxSegmentSize) { this.parameterGroupId = parameterGroupId; this.parameterIds = parameterIds; + this.maxSegmentSize = maxSegmentSize; } - public synchronized void addRecord(long t, List values) { - if (head != tail) { - PGSegment segHead = segments[head]; - - if (t < segHead.getSegmentStart() - pastJumpThreshold) { - log.warn("Time jumped in the past; current timestamp: {}, new timestamp: {}. Flushing old data.", - TimeEncoding.toString(segHead.getSegmentStart()), TimeEncoding.toString(t)); - flush(); - } else if (t < segHead.getSegmentStart() - sortingThreshold) { - log.warn("Dropping old data with timestamp {} (minimum allowed is {})." - + "Unsorted data received in the realtime filler? Consider using a backfiller instead", - TimeEncoding.toString(t), - TimeEncoding.toString(segHead.getSegmentStart() - sortingThreshold)); - return; - } else { - writeToArchive(t); - } + public long getStart() { + if (isEmpty()) { + throw new IllegalStateException("queue is empty"); } + return segments[head].getSegmentStart(); + } + + public synchronized boolean addRecord(long t, List values) { boolean added = false; int k = head; @@ -253,35 +286,23 @@ public synchronized void addRecord(long t, List values) { } else if (kintv > tintv) { break; } - assert (t >= seg.getSegmentStart()); if (t <= seg.getSegmentEnd() || seg.size() < maxSegmentSize) { - // when the first condition is met only, the segment will become bigger than the maxSegmentSize - // could be split in two + // when the first condition is met only (i.e. new data coming in the middle of a full segment) + // the segment will become bigger than the maxSegmentSize + // FIXME: split the interval in two if this happens seg.addRecord(t, values); added = true; break; } } - if (!added) {// to be added on position k + if (!added) {// new segment to be added on position k if (segments[tail] != null) { - log.warn("Realtime parameter archive queue full." - + "Consider increasing the writerThreads (if CPUs are available) or using a back filler"); - return; + return false; } - long segStart = t - sortingThreshold; - PGSegment prev = segments[k - 1 & MASK]; - if (prev != null) { - if (segStart <= prev.getSegmentEnd()) { - segStart = prev.getSegmentEnd() + 1; - } - } - if (segStart < tintv) { - segStart = tintv; - } - PGSegment seg = new PGSegment(parameterGroupId, segStart, parameterIds); + PGSegment seg = new PGSegment(parameterGroupId, t, parameterIds); seg.addRecord(t, values); // shift everything between k and tail to the right @@ -294,18 +315,18 @@ public synchronized void addRecord(long t, List values) { segments[k] = seg; } + return true; } /** - * write to archive all segments that cannot get new data. + * send to archive all segments which are either from an older interval than t1 or are full and their end is + * smaller than t1. *

- * t is the timestamp of the newest received data, we won't accept data older than t1=t-sortingThrreshold - *

- * it means that all segments which are either from an older interval than t1 or are full and their end is - * smaller than t1, can be written + * Writing to archive is an async operation, and the completable future returned by the function is called when + * the writing to archive has been completed and is used to null the entry in the queue. Before the entry is + * null, the data can still be used in the retrieval. */ - private void writeToArchive(long t) { - long t1 = t - sortingThreshold; + void sendToArchive(long t1, Function> f) { while (head != tail) { PGSegment seg = segments[head]; @@ -315,28 +336,21 @@ private void writeToArchive(long t) { } int _head = head; head = (head + 1) & MASK; - sendToExecutor(_head); + toArchive(_head, f); } } - public synchronized void flush() { + synchronized void flush(Function> f) { while (head != tail) { - sendToExecutor(head); + toArchive(head, f); head = (head + 1) & MASK; } } - private void sendToExecutor(int idx) { - executor.submit(() -> { - try { - PGSegment seg = segments[idx]; - long t0 = System.nanoTime(); - parameterArchive.writeToArchive(seg); - long d = System.nanoTime() - t0; - log.debug("Wrote segment {} to archive in {} millisec", seg, d / 1000_000); - } catch (RocksDBException | IOException e) { - log.error("Error writing segment to the parameter archive", e); - } + private void toArchive(int idx, Function> f) { + PGSegment seg = segments[idx]; + + f.apply(seg).thenAccept(v -> { segments[idx] = null; }); } @@ -349,6 +363,14 @@ public boolean isEmpty() { return head == tail; } + /** + * Returns a list of segments for the pid. + * + *

+ * The ascending argument can be used to sort the segments in ascending or descending order. The values inside + * the segments will always be ascending (but one can iterate the segment in descending order). + * + */ public synchronized List getPVSegments(int pid, boolean ascending) { if (head == tail) { return Collections.emptyList(); diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/SegmentIterator.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/SegmentIterator.java index 34def9b3c95..15e2b9fca9c 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/SegmentIterator.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/SegmentIterator.java @@ -89,7 +89,7 @@ public SegmentIterator(ParameterArchive parchive, ParameterId parameterId, int p partitions = parchive.getPartitions(getIntervalStart(req.start), getIntervalEnd(req.stop), req.ascending); topIt = partitions.iterator(); - if (rtfiller != null && req.isAscending()) { + if (rtfiller != null && !ascending) { rtIterator = rtfiller.getSegments(pid, parameterGroupId, ascending).iterator(); } next(); @@ -105,7 +105,7 @@ public ParameterValueSegment value() { } public void next() { - if (ascending && rtIterator != null) { + if (!ascending && rtIterator != null) { if (rtIterator.hasNext()) { curValue = rtIterator.next(); return; @@ -123,12 +123,13 @@ public void next() { curValue = null; } - if (!ascending && rtfiller != null) { + if (ascending && rtfiller != null) { if (rtIterator == null) { rtIterator = rtfiller.getSegments(parameterId.getPid(), parameterGroupId, ascending).iterator(); } if (rtIterator.hasNext()) { curValue = rtIterator.next(); + System.out.println("got from realtime filler segment of size: " + curValue.size()); } } } diff --git a/yamcs-core/src/test/java/org/yamcs/parameterarchive/SegmentQueueTest.java b/yamcs-core/src/test/java/org/yamcs/parameterarchive/SegmentQueueTest.java new file mode 100644 index 00000000000..0df79761167 --- /dev/null +++ b/yamcs-core/src/test/java/org/yamcs/parameterarchive/SegmentQueueTest.java @@ -0,0 +1,85 @@ +package org.yamcs.parameterarchive; + +import static org.junit.Assert.*; + +import java.util.Arrays; +import java.util.List; + +import org.junit.Test; +import org.yamcs.parameter.BasicParameterValue; +import org.yamcs.parameter.ParameterValue; +import org.yamcs.parameterarchive.RealtimeArchiveFiller.SegmentQueue; +import org.yamcs.utils.IntArray; +import org.yamcs.utils.ValueUtility; + +public class SegmentQueueTest { + @Test + public void test1() { + + List plist1 = getParaList(9); + List plist2 = getParaList(10); + + SegmentQueue sq = new SegmentQueue(1, IntArray.wrap(1), 2); + sq.addRecord(10, plist2); + sq.addRecord(9, plist1); + + sq.getPVSegments(0, false); + List pvsegList = sq.getPVSegments(1, true); + testEquals(pvsegList, Arrays.asList(Arrays.asList(9l, 10l))); + + List plist3 = getParaList(11); + sq.addRecord(11, plist3);// this will be added to a new segment because the maxSegmentSize is 2 + + pvsegList = sq.getPVSegments(1, true); + testEquals(pvsegList, Arrays.asList(Arrays.asList(9l, 10l), Arrays.asList(11l))); + + pvsegList = sq.getPVSegments(1, false);// descending + testEquals(pvsegList, Arrays.asList(Arrays.asList(11l), Arrays.asList(9l, 10l))); + + } + + @Test + public void testAcrossIntervals() { + + long t1 = ParameterArchive.getIntervalEnd(9); + List plist1 = getParaList(t1); + List plist2 = getParaList(t1 + 1); + + SegmentQueue sq = new SegmentQueue(1, IntArray.wrap(1), 2); + sq.addRecord(t1 + 1, plist2); + sq.addRecord(t1, plist1); + + sq.getPVSegments(0, false); + List pvsegList = sq.getPVSegments(1, true); + testEquals(pvsegList, Arrays.asList(Arrays.asList(t1), Arrays.asList(t1 + 1))); + + sq.addRecord(t1 - 1, getParaList(t1 - 1)); + + pvsegList = sq.getPVSegments(1, true); + testEquals(pvsegList, Arrays.asList(Arrays.asList(t1 - 1, t1), Arrays.asList(t1 + 1))); + + sq.addRecord(t1 + 2, getParaList(t1 + 2)); + pvsegList = sq.getPVSegments(1, true); + testEquals(pvsegList, Arrays.asList(Arrays.asList(t1 - 1, t1), Arrays.asList(t1 + 1, t1 + 2))); + + } + + private void testEquals(List pvsegList, List> l) { + assertEquals(l.size(), pvsegList.size()); + for (int i = 0; i < l.size(); i++) { + List l1 = l.get(i); + ParameterValueSegment pvs = pvsegList.get(i); + assertEquals(l1.size(), pvs.size()); + for (int j = 0; j < l1.size(); j++) { + assertEquals((long) l1.get(j), pvs.engValueSegment.getValue(j).getUint64Value()); + } + } + } + + List getParaList(long time) { + ParameterValue pv = new ParameterValue("test1"); + pv.setEngValue(ValueUtility.getUint64Value(time)); + pv.setGenerationTime(time); + return Arrays.asList(pv); + } +} From 3c98215664c4697ddd107bb66c12a74d7777c4f7 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Wed, 20 Oct 2021 04:04:55 +0200 Subject: [PATCH 08/24] docs update moved bad/good stream options to the right place added the missing frameMaxRate --- .../links/ccsds-frame-processing.rst | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/server-manual/links/ccsds-frame-processing.rst b/docs/server-manual/links/ccsds-frame-processing.rst index 1f9d166eb7f..4e15e70e3dc 100644 --- a/docs/server-manual/links/ccsds-frame-processing.rst +++ b/docs/server-manual/links/ccsds-frame-processing.rst @@ -108,6 +108,12 @@ clcwStream (string) Can be used to specify the name of the stream where the Command Link Control Words (CLCW) will be sent. The CLCW is the mechanism used by COP-1 to acknolwedge uplinked frames. For TM and USLP frames, there is an OCF flag part of the frame header indicating the presence or not of the CLCW. For AOS frames it has to be configured with the ``ocfPresent`` flag below. If present, the CLCW is also extracted from idle frames (i.e. frames that are inserted when no data needs to be transmitted in order to keep the constant bitrate required for downlink). +goodFrameStream (string) + If specified, the good frames will be sent on a stream with that name. The stream will be created if it does not exist. + +badFrameStream (string) + If specified, the bad frames will be sent on a stream with that name. Bad frames are conisdered as those that fail decoding for various reasons: length in the header does not match the size of the data received, frame version does not match, bad CRC, bad spacecraft id, bad vcid. + virtualChannels (map) **Required.** Used to specify the Virtual Channel specific configuration. @@ -139,6 +145,7 @@ packetPreprocessorClassName and packetPreprocessorArgs vcaHandlerClassName: **Required if the service = VCA** Specifies the name of the class which handles data for this virtual channel. The class has to implement :javadoc:`~org.yamcs.tctm.ccsds.VcDownlinkHandler` interface. Optionally it can implement :javadoc:`~org.yamcs.tctm.Link` interface to appear as a data link (e.g. in yamcs-web). An example implementation of such class can be found in the ccsds-frames example project. + Telecommand Frame Processing @@ -206,6 +213,9 @@ virtualChannels (map) errorDetection (string) One of ``NONE`` or ``CRC16``. Specifies the error detection scheme used. If present, the last 2 bytes of the frame will contain an error control field. + +frameMaxRate (double) + maximum number of command frames to send per second. This option is specific to the UDP TC link. For each Virtual Channel in the ``virtualChannels`` map, the following parameters can be used: @@ -242,11 +252,7 @@ cop1TxLimit (integer) bdAbsolutePriority (false) If COP-1 is enabled, this specifies that the BD frames have absolute priority over normal AD frames. This means that if there are a number of AD frames ready to be uplinked and a TC with ``cop1Bypass`` flag is received (see below for an explanation of this flag), it will pass in front of the queue so ti will be the first frame uplinked (once the multiplexer decides to uplink frames from this Virtual Channel). This flag only applies when the COP-1 state is active, if the COP-1 synchnoziation has not taken place, the BD frames are uplinked anyway (because all AD frames are waiting). -goodFrameStream (string) - If specified, the good frames will be sent on a stream with that name. The stream will be created if it does not exist. - -badFrameStream (string) - If specified, the bad frames will be sent on a stream with that name. Bad frames are conisdered as those that fail decoding for various reasons: length in the header does not match the size of the data received, frame version does not match, bad CRC, bad spacecraft id, bad vcid. + Priority Schemes From a7c41d74a587f9fab33957906af89168b6bbeb23 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Wed, 20 Oct 2021 04:19:25 +0200 Subject: [PATCH 09/24] allow configuring the number of threads serving HTTP requests --- docs/server-manual/services/global/http-server.rst | 3 +++ yamcs-core/src/main/java/org/yamcs/http/HttpServer.java | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/server-manual/services/global/http-server.rst b/docs/server-manual/services/global/http-server.rst index 937cb03fa8b..860a4d3486f 100644 --- a/docs/server-manual/services/global/http-server.rst +++ b/docs/server-manual/services/global/http-server.rst @@ -73,6 +73,9 @@ webSocket (map) cors (map) Configure cross-origin resource sharing for the HTTP API. Detailed below. If unset, CORS is not supported. +nThreads (int) + Configure the number of threads that will serve HTTP requests. 0 (default) means two times the number of CPU cores. + WebSocket sub-configuration ^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/yamcs-core/src/main/java/org/yamcs/http/HttpServer.java b/yamcs-core/src/main/java/org/yamcs/http/HttpServer.java index a225571fe8a..679f71af5d9 100644 --- a/yamcs-core/src/main/java/org/yamcs/http/HttpServer.java +++ b/yamcs-core/src/main/java/org/yamcs/http/HttpServer.java @@ -136,6 +136,8 @@ public class HttpServer extends AbstractYamcsService { // we want to give the possiblity to make request-scoped instances private Map> extraHandlers = new HashMap<>(); + private int nThreads; + @Override public Spec getSpec() { Spec gpbSpec = new Spec(); @@ -191,6 +193,7 @@ public Spec getSpec() { spec.mutuallyExclusive("tlsKey", "bindings"); spec.requireTogether("tlsCert", "tlsKey"); + spec.addOption("nThreads", OptionType.INTEGER).withDefault(0); return spec; } @@ -264,6 +267,7 @@ public void init(String yamcsInstance, String serviceName, YConfiguration config HttpHeaderNames.AUTHORIZATION, HttpHeaderNames.ORIGIN); corsConfig = corsb.build(); } + nThreads = config.getInt("nThreads"); addApi(new AlarmsApi()); addApi(new BucketsApi()); @@ -359,7 +363,7 @@ public void startServer() throws InterruptedException, SSLException, Certificate // Note that by default (i.e. with nThreads = 0), Netty will limit the number // of worker threads to 2*number of CPU cores - workerGroup = new NioEventLoopGroup(0, + workerGroup = new NioEventLoopGroup(nThreads, new ThreadPerTaskExecutor(new DefaultThreadFactory("YamcsHttpServer"))); for (Binding binding : bindings) { From 483ee52eb47f222f58846f22de5cc7ab67b4c1b1 Mon Sep 17 00:00:00 2001 From: Fabian Diet Date: Tue, 12 Oct 2021 10:50:21 +0200 Subject: [PATCH 10/24] Add dimension info to parameter MDB calls --- .../main/proto/yamcs/protobuf/mdb/mdb.proto | 9 ++++++- .../yamcs/http/api/XtceToGpbAssembler.java | 25 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/yamcs-api/src/main/proto/yamcs/protobuf/mdb/mdb.proto b/yamcs-api/src/main/proto/yamcs/protobuf/mdb/mdb.proto index 3bdf082f33e..5593df92dbf 100644 --- a/yamcs-api/src/main/proto/yamcs/protobuf/mdb/mdb.proto +++ b/yamcs-api/src/main/proto/yamcs/protobuf/mdb/mdb.proto @@ -294,9 +294,16 @@ message ArgumentMemberInfo { optional ArgumentTypeInfo type = 6; } +message ParameterDimensionInfo { + optional int64 fixedValue = 1; + optional ParameterInfo parameter = 2; + optional int64 slope = 3; + optional int64 intercept = 4; +} + message ArrayInfo { optional ParameterTypeInfo type = 1; - optional int32 dimensions = 2; + repeated ParameterDimensionInfo dimensions = 3; } message UsedByInfo { diff --git a/yamcs-core/src/main/java/org/yamcs/http/api/XtceToGpbAssembler.java b/yamcs-core/src/main/java/org/yamcs/http/api/XtceToGpbAssembler.java index cb4d0efe4a6..d05290f48eb 100644 --- a/yamcs-core/src/main/java/org/yamcs/http/api/XtceToGpbAssembler.java +++ b/yamcs-core/src/main/java/org/yamcs/http/api/XtceToGpbAssembler.java @@ -41,6 +41,7 @@ import org.yamcs.protobuf.Mdb.JavaExpressionCalibratorInfo; import org.yamcs.protobuf.Mdb.MemberInfo; import org.yamcs.protobuf.Mdb.OutputParameterInfo; +import org.yamcs.protobuf.Mdb.ParameterDimensionInfo; import org.yamcs.protobuf.Mdb.ParameterInfo; import org.yamcs.protobuf.Mdb.ParameterTypeInfo; import org.yamcs.protobuf.Mdb.PolynomialCalibratorInfo; @@ -105,6 +106,7 @@ import org.yamcs.xtce.IntegerDataEncoding; import org.yamcs.xtce.IntegerParameterType; import org.yamcs.xtce.IntegerRange; +import org.yamcs.xtce.IntegerValue; import org.yamcs.xtce.JavaExpressionCalibrator; import org.yamcs.xtce.MatchCriteria; import org.yamcs.xtce.MathOperationCalibrator; @@ -685,7 +687,28 @@ public static ParameterTypeInfo toParameterTypeInfo(ParameterType parameterType, if (parameterType instanceof ArrayParameterType) { ArrayParameterType apt = (ArrayParameterType) parameterType; ArrayInfo.Builder arrayInfob = ArrayInfo.newBuilder(); - arrayInfob.setDimensions(apt.getNumberOfDimensions()); + List dims = apt.getSize(); + for (int i = 0; i < apt.getNumberOfDimensions(); i++) { + if (dims != null) { // XTCE 1.2+ + IntegerValue dim = dims.get(i); + if (dim instanceof FixedIntegerValue) { + arrayInfob.addDimensions(ParameterDimensionInfo.newBuilder() + .setFixedValue(((FixedIntegerValue) dim).getValue())); + } else if (dim instanceof DynamicIntegerValue) { + ParameterDimensionInfo.Builder dimb = ParameterDimensionInfo.newBuilder(); + DynamicIntegerValue dynamicValue = (DynamicIntegerValue) dim; + ParameterInstanceRef ref = dynamicValue.getParameterInstanceRef(); + if (ref != null) { + dimb.setParameter(toParameterInfo(ref.getParameter(), DetailLevel.SUMMARY)); + dimb.setSlope(dynamicValue.getSlope()); + dimb.setIntercept(dynamicValue.getIntercept()); + } + arrayInfob.addDimensions(dimb); + } + } else { // XTCE 1.1 + arrayInfob.addDimensions(ParameterDimensionInfo.getDefaultInstance()); + } + } if (apt.getElementType() instanceof ParameterType) { ParameterType elementType = (ParameterType) apt.getElementType(); From cf8f668a98639670d8963f45698569b221672cd3 Mon Sep 17 00:00:00 2001 From: Fabian Diet Date: Tue, 19 Oct 2021 16:18:08 +0200 Subject: [PATCH 11/24] Upgrade web deps --- yamcs-web/src/main/webapp/angular.json | 5 + yamcs-web/src/main/webapp/package-lock.json | 2889 ++++++++--------- yamcs-web/src/main/webapp/package.json | 36 +- .../src/app/archive/ArchiveBrowserPage.ts | 46 +- .../telemetry/displays/OpiDisplayViewer.ts | 5 +- .../src/app/timeline/TimelineChartPage.ts | 32 +- 6 files changed, 1508 insertions(+), 1505 deletions(-) diff --git a/yamcs-web/src/main/webapp/angular.json b/yamcs-web/src/main/webapp/angular.json index c3b70fa7638..df20176cd46 100644 --- a/yamcs-web/src/main/webapp/angular.json +++ b/yamcs-web/src/main/webapp/angular.json @@ -27,6 +27,11 @@ "glob": "**/*", "input": "src/assets/", "output": "/" + }, + { + "glob": "**/*", + "input": "node_modules/@yamcs/opi/dist/images/", + "output": "/" } ], "styles": [ diff --git a/yamcs-web/src/main/webapp/package-lock.json b/yamcs-web/src/main/webapp/package-lock.json index a45d805ab8e..6381d24a2f2 100644 --- a/yamcs-web/src/main/webapp/package-lock.json +++ b/yamcs-web/src/main/webapp/package-lock.json @@ -4,129 +4,179 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@ampproject/remapping": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.1.tgz", + "integrity": "sha512-Ta9bMA3EtUHDaZJXqUoT5cn/EecwOp+SXpKJqxDbDuMbLvEMu6YTyDDuvTWeStODfdmXyfMo7LymQyPkN3BicA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "1.0.0", + "sourcemap-codec": "1.4.8" + } + }, "@angular-devkit/architect": { - "version": "0.1201.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.4.tgz", - "integrity": "sha512-hGO5NrZxV8Z7sILwokt7H+1sMf+5tJS9PJszvYlIBSzG0LBkOwwLQDb4MD42ATXFru57SXNqMZDVKoi1kTgxAw==", + "version": "0.1202.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.10.tgz", + "integrity": "sha512-/sLgtXaFsNouxub5M/bQ2sBkiMIlPubuz6QMh+pA2jia82vJ3hcRMt4AnJTXuXpVY+aew4FiG0i9nt/8HETQsw==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.4", + "@angular-devkit/core": "12.2.10", "rxjs": "6.6.7" } }, "@angular-devkit/build-angular": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.1.4.tgz", - "integrity": "sha512-9kMdnaU2dr8o7gJpuBsEHLUpa6huF8uZQEd1+jhKfByEY/xTQo8qztvmbhFhrSfDvdYRygNHItpt3pYEoCEOig==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1201.4", - "@angular-devkit/build-optimizer": "0.1201.4", - "@angular-devkit/build-webpack": "0.1201.4", - "@angular-devkit/core": "12.1.4", - "@babel/core": "7.14.6", - "@babel/generator": "7.14.5", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.10.tgz", + "integrity": "sha512-MuViuSmXmB67Wge3NpyfY2aAU4O4K+BbcHj1W1k1A9WTx/Hyh6jR6Zgwy/EsNh64zjdUg/Jlg/oHxIVabsWfvQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "1.0.1", + "@angular-devkit/architect": "0.1202.10", + "@angular-devkit/build-optimizer": "0.1202.10", + "@angular-devkit/build-webpack": "0.1202.10", + "@angular-devkit/core": "12.2.10", + "@babel/core": "7.14.8", + "@babel/generator": "7.14.8", "@babel/helper-annotate-as-pure": "7.14.5", "@babel/plugin-proposal-async-generator-functions": "7.14.7", "@babel/plugin-transform-async-to-generator": "7.14.5", "@babel/plugin-transform-runtime": "7.14.5", - "@babel/preset-env": "7.14.7", - "@babel/runtime": "7.14.6", + "@babel/preset-env": "7.14.8", + "@babel/runtime": "7.14.8", "@babel/template": "7.14.5", "@discoveryjs/json-ext": "0.5.3", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "12.1.4", + "@ngtools/webpack": "12.2.10", "ansi-colors": "4.1.1", "babel-loader": "8.2.2", "browserslist": "^4.9.1", "cacache": "15.2.0", "caniuse-lite": "^1.0.30001032", "circular-dependency-plugin": "5.2.2", - "copy-webpack-plugin": "9.0.0", - "core-js": "3.15.1", + "copy-webpack-plugin": "9.0.1", + "core-js": "3.16.0", "critters": "0.0.10", - "css-loader": "5.2.6", - "css-minimizer-webpack-plugin": "3.0.1", + "css-loader": "6.2.0", + "css-minimizer-webpack-plugin": "3.0.2", + "esbuild": "0.13.4", + "esbuild-wasm": "0.13.4", "find-cache-dir": "3.3.1", "glob": "7.1.7", "https-proxy-agent": "5.0.0", - "inquirer": "8.1.1", - "jest-worker": "27.0.2", + "inquirer": "8.1.2", "karma-source-map-support": "1.4.0", "less": "4.1.1", - "less-loader": "10.0.0", + "less-loader": "10.0.1", "license-webpack-plugin": "2.3.20", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "1.6.2", + "mini-css-extract-plugin": "2.2.1", "minimatch": "3.0.4", "open": "8.2.1", "ora": "5.4.1", "parse5-html-rewriting-stream": "6.0.1", - "postcss": "8.3.5", + "piscina": "3.1.0", + "postcss": "8.3.6", "postcss-import": "14.0.2", - "postcss-loader": "6.1.0", + "postcss-loader": "6.1.1", "postcss-preset-env": "6.7.0", - "raw-loader": "4.0.2", - "regenerator-runtime": "0.13.7", + "regenerator-runtime": "0.13.9", "resolve-url-loader": "4.0.0", "rxjs": "6.6.7", - "sass": "1.35.1", + "sass": "1.36.0", "sass-loader": "12.1.0", "semver": "7.3.5", - "source-map": "0.7.3", "source-map-loader": "3.0.0", "source-map-support": "0.5.19", - "style-loader": "2.0.0", + "style-loader": "3.2.1", "stylus": "0.54.8", "stylus-loader": "6.1.0", - "terser": "5.7.0", - "terser-webpack-plugin": "5.1.3", + "terser": "5.7.1", + "terser-webpack-plugin": "5.1.4", "text-table": "0.2.0", "tree-kill": "1.2.2", "tslib": "2.3.0", - "webpack": "5.44.0", + "webpack": "5.50.0", "webpack-dev-middleware": "5.0.0", "webpack-dev-server": "3.11.2", "webpack-merge": "5.8.0", "webpack-subresource-integrity": "1.5.2" + }, + "dependencies": { + "esbuild": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.4.tgz", + "integrity": "sha512-wMA5eUwpavTBiNl+It6j8OQuKVh69l6z4DKDLzoTIqC+gChnPpcmqdA8WNHptUHRnfyML+mKEQPlW7Mybj8gHg==", + "dev": true, + "optional": true, + "requires": { + "esbuild-android-arm64": "0.13.4", + "esbuild-darwin-64": "0.13.4", + "esbuild-darwin-arm64": "0.13.4", + "esbuild-freebsd-64": "0.13.4", + "esbuild-freebsd-arm64": "0.13.4", + "esbuild-linux-32": "0.13.4", + "esbuild-linux-64": "0.13.4", + "esbuild-linux-arm": "0.13.4", + "esbuild-linux-arm64": "0.13.4", + "esbuild-linux-mips64le": "0.13.4", + "esbuild-linux-ppc64le": "0.13.4", + "esbuild-openbsd-64": "0.13.4", + "esbuild-sunos-64": "0.13.4", + "esbuild-windows-32": "0.13.4", + "esbuild-windows-64": "0.13.4", + "esbuild-windows-arm64": "0.13.4" + } + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + } } }, "@angular-devkit/build-optimizer": { - "version": "0.1201.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.4.tgz", - "integrity": "sha512-Hq+mDUe4xIyq4939JZaUkptsM89WnZOk8Qel6mS0T/bxMX/qs+nuGD5o+xDKkuayogbiTrLmyZBib0/90eSXEA==", + "version": "0.1202.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.10.tgz", + "integrity": "sha512-NcFEtj4Vfc7gXJtXEVf1mnpk0CJ0htlkm/LbidPcs1PEQbJ/yDgZ44fO+53Pt6NzLmsmPHXOmRzN7O6HkxolPA==", "dev": true, "requires": { "source-map": "0.7.3", "tslib": "2.3.0", - "typescript": "4.3.4" + "typescript": "4.3.5" }, "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + }, "typescript": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", - "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true } } }, "@angular-devkit/build-webpack": { - "version": "0.1201.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1201.4.tgz", - "integrity": "sha512-eMmbyHyWJZMQ1tfwVdja/iAk/eXJFYrF8b27gDV9gGI7MGB3KJ93AhkbPbcvlw4Hhx4+6M11GfeXzbwH0q9pnQ==", + "version": "0.1202.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.10.tgz", + "integrity": "sha512-xGSy12g+wa/qeYOaPGkeoJp3zatlS+HZxECtw0Up3ES85Ewrx9PvraexHSuRxnkuBQykRORKf6WbPt/WYIAVGQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.4", + "@angular-devkit/architect": "0.1202.10", "rxjs": "6.6.7" } }, "@angular-devkit/core": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.4.tgz", - "integrity": "sha512-KOzGD8JbP/7EeUwPiU5x+fo3ZEQ5R4IVW5WoH92PaO3mdpqXC7UL2MWLct8PUe9il9nqJMvrBMldSSvP9PCT2w==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.10.tgz", + "integrity": "sha512-0qhmS7Qvl0hiRVTHxEC/ipFAfzYofPstw0ZITDpEMw+pgHlOZolOlnFrv8LyOXWNqlSIH5fS9D3WF7Hpm7ApYA==", "dev": true, "requires": { - "ajv": "8.6.0", + "ajv": "8.6.2", "ajv-formats": "2.1.0", "fast-json-stable-stringify": "2.1.0", "magic-string": "0.25.7", @@ -135,29 +185,29 @@ } }, "@angular-devkit/schematics": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.1.4.tgz", - "integrity": "sha512-yD3y3pK/K5piOgvALFoCCiPp4H8emNa3yZL+vlpEpewVLpF1MM55LeTxc0PI5s0uqtOGVnvcbA5wYgMm3YsUEA==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.10.tgz", + "integrity": "sha512-oQ2EWdkEDE+eAttHeviXsvBi85PsntQT+IffjKUZdbQU+Leuk/pKUpTeea1YosU1p4Cz3PKYF+P/Nl5Jy3B7IQ==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.4", + "@angular-devkit/core": "12.2.10", "ora": "5.4.1", "rxjs": "6.6.7" } }, "@angular/animations": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.1.4.tgz", - "integrity": "sha512-6PkVF2HGwmNdG0IUUyXkxwnLdX7xVUCFldKNFap90lWTEPumO7+zcmzP4JELE6jkmHSykTZjPwlWXvuxdP+YJg==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.10.tgz", + "integrity": "sha512-K1WT3m/StW5a4SE9wKT+D7eteyWK+MW3pAwFPaKH8EU9k6dItlLr3jWZsve5w2u/GLSnrOMGJNU/JmTfskV9LA==", "dev": true, "requires": { "tslib": "^2.2.0" } }, "@angular/cdk": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.1.4.tgz", - "integrity": "sha512-so8HP7jRNkGfdTkPmFVqyW4pj1vU0ASG1NaZMDXnin44PVjbJpaKhQsArhQ/yOmRP9XzP6TR3zHzmxszfGiaKg==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.10.tgz", + "integrity": "sha512-jF/tyZXcAS0i11aH8061lMf/ofKs8U52smm/q7k5llTj/NvMZl4s6o3SmdYYE/ByljvCzObz+2j3TzJS/ioDFg==", "dev": true, "requires": { "parse5": "^5.0.0", @@ -174,41 +224,32 @@ } }, "@angular/cli": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.1.4.tgz", - "integrity": "sha512-LpyhyqWe3bFcuH3MrXeYoIPI1htjwG1b5ehETfq4qsMvNmuFON6QI+F7EWEpX7lItVQc2bES+ogasTZsZue/uw==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.2.10.tgz", + "integrity": "sha512-gx2XlOUjAAYyJBBIz4QkgsLLRMdFTQbcOR41/Yv0kgpR6AStrOWhz7tpYPbU6vWMjehpuTaWv4NE5eGjwVTZqg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.4", - "@angular-devkit/core": "12.1.4", - "@angular-devkit/schematics": "12.1.4", - "@schematics/angular": "12.1.4", + "@angular-devkit/architect": "0.1202.10", + "@angular-devkit/core": "12.2.10", + "@angular-devkit/schematics": "12.2.10", + "@schematics/angular": "12.2.10", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", - "debug": "4.3.1", + "debug": "4.3.2", "ini": "2.0.0", - "inquirer": "8.1.1", + "inquirer": "8.1.2", "jsonc-parser": "3.0.0", "npm-package-arg": "8.1.5", "npm-pick-manifest": "6.1.1", "open": "8.2.1", "ora": "5.4.1", - "pacote": "11.3.4", + "pacote": "11.3.5", "resolve": "1.20.0", "semver": "7.3.5", "symbol-observable": "4.0.0", "uuid": "8.3.2" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -218,27 +259,27 @@ } }, "@angular/common": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.1.4.tgz", - "integrity": "sha512-cyh2m5veGgWRFsrmPnwB/Ised90bFNZAjZepvW8WXrpEUa/tmi1yWU9+8ayRG7ztE08lyXncJSSut2Ss2PEhTA==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.10.tgz", + "integrity": "sha512-7IjD0frrKG/nt3/fo4mKDH0Tx5Nn8f2G8Ks/aq6xnJssy/V841COjua0ZyfPOkPS1r0VEaQJB5ieqMrp2T6MWg==", "dev": true, "requires": { "tslib": "^2.2.0" } }, "@angular/compiler": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.1.4.tgz", - "integrity": "sha512-csei4YTsdwYCWhr94AtW/Q3YyILLhjGVuV/zDZKQx5kB/3ukpUD+DppbblTo+NsLSk2BfsOepGUeCDMkIl9p3w==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.10.tgz", + "integrity": "sha512-5fuzX8P74z28CRYTamsZgsdUyh0c53shytZYfa0cGFXyV8VD/r8AMIyQ4y7Y5Fmt4Nr+65EVeYb3sI7IzYiueg==", "dev": true, "requires": { "tslib": "^2.2.0" } }, "@angular/compiler-cli": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.1.4.tgz", - "integrity": "sha512-RMEXJ92KO30waKoAha1qZHGLVyUimgisYVmaTwPlYJ534tAoilILkav8Wa4UMOJx1Dma0wTzbAqMYdghoQJXQA==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.10.tgz", + "integrity": "sha512-cPWxNMwPTM7IsEBxMrh4yY9XZi4gZRv7EmKWOfBw6hiW0SEmthIQWOvCaoL5CPsdUhInNxXWvwAoFggk/tfJ5g==", "dev": true, "requires": { "@babel/core": "^7.8.6", @@ -316,9 +357,9 @@ "dev": true }, "yargs": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", - "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", + "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -339,95 +380,101 @@ } }, "@angular/core": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.1.4.tgz", - "integrity": "sha512-dG7KtW0l3jI8lapmenSu1wV/d3VOphAjDxVqWOrwh+kI0da7677cEg0Ms5YIF8Nf/++WleyNxk6AIHbDIig+Sw==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.10.tgz", + "integrity": "sha512-xG1IbmEAV7gWpiY2MSFc87MlmB3yff8/TAlSE8Tj2ZFzb1lFjeFnrZ1y50Hi2AcVyX/KA1mx/RyJ0M7fmQ1ayw==", "dev": true, "requires": { "tslib": "^2.2.0" } }, "@angular/forms": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.1.4.tgz", - "integrity": "sha512-HlPZH2HllX2/XEdAT7PkAYIEXn69KanvjxFD40++Xx5a0lMsv7HleYqRdRZYkxKUNCJljL3UqvI5sZ5CCOoVGw==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.10.tgz", + "integrity": "sha512-ntTJOaLeH+7th5W4LEm3/yHsBvaFpfRgn0Uc88Th8p2gvorqCgpJMWogJIx/yESNolSFItY6k/x7kjuMBgm9mA==", "dev": true, "requires": { "tslib": "^2.2.0" } }, "@angular/language-service": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-12.1.4.tgz", - "integrity": "sha512-NooCGWiTY74DN3uFE8eI1ATtxx4TQzulbV7qNNG9Bz8QJyLRykYart7Ajxh0bF5upR1bjPmHr6MvgO6aI43VUQ==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-12.2.10.tgz", + "integrity": "sha512-o9KY39+1bw9xB6vsMWAbcPFWNdTQ/6TSKyQkmAyYca7T6LlNOe/qWln2655ZFPhyG6d9R8nbTi3X0MhMP+H7xQ==", "dev": true }, "@angular/material": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.1.4.tgz", - "integrity": "sha512-lfBuk+3fxOvyIf9PknVIIC1DxYOimru06FpXq74lNcrNZcX3qCdDe/KmNbR50Wy0aEC4cOPXxJuPqm7wT8z2vg==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.2.10.tgz", + "integrity": "sha512-iC0EA8ogpn/KJ+kr3TEfQJLYPAtrguMr21KAGwtKOOLng1HiEhH6qEqlc0PPYUUQ06i+8nJr/WWfL0ORKXh3fg==", "dev": true, "requires": { "tslib": "^2.2.0" } }, "@angular/platform-browser": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.1.4.tgz", - "integrity": "sha512-klJbU75lUGgwZkgyXsHU47JuYh8c7prukw7MIWLw7liHXPK//bLj8kOfKwifSIJ0xzDg9UfdNSGCQqGP5N0SaQ==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.10.tgz", + "integrity": "sha512-2pYoscOJijbqFsnYpKX6o4ojt4XfZiNhODTf9RDOPVKjVqFsRNVThg76kdKtN+N8q6N1z4I01x6aX4EeWqQqIA==", "dev": true, "requires": { "tslib": "^2.2.0" } }, "@angular/platform-browser-dynamic": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.1.4.tgz", - "integrity": "sha512-gEE7F45y+mExb9Bib9SQkWQICHHxbo884AhCw4ZcHWWv2aJl1Y09Rhp+ZE542wjoFFpB2o+BXguc3PcnXB/3Ww==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.10.tgz", + "integrity": "sha512-CLYHCdTCzpxvMwITRBLlUoa44orDdogMaQfKIMEQsWrynf+zGZKYe5chAut9P/A54PVPUtKeQrfEVFjmbdYR2w==", "dev": true, "requires": { "tslib": "^2.2.0" } }, "@angular/router": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.1.4.tgz", - "integrity": "sha512-wbw/w1yM/GiCnQPykQ7rHkywqQA5LPF5/MRa4Khi7BcpJXgutG9h/40HREsQzzYY46+qhXmST8A3E5PNgURsbw==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.10.tgz", + "integrity": "sha512-e9sqOdLNF3pVRZPZtD6OdvERdTWKP7Et8Mz4OSNT8GEe6SctRAaptTAqY09AGpi4BO2+LsxVBERYfhZw9bZ2bA==", "dev": true, "requires": { "tslib": "^2.2.0" } }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", "dev": true, "requires": { "@babel/highlight": "^7.14.5" } }, "@babel/compat-data": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.9.tgz", - "integrity": "sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", "dev": true }, "@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.8.tgz", + "integrity": "sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.14.8", "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", + "@babel/helper-module-transforms": "^7.14.8", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.14.8", "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -451,12 +498,12 @@ } }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "dev": true, "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -479,22 +526,22 @@ } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", + "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-explode-assignable-expression": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.5", + "@babel/compat-data": "^7.15.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" @@ -509,17 +556,28 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", - "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.7", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + } } }, "@babel/helper-create-regexp-features-plugin": { @@ -557,84 +615,110 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", + "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "dependencies": { + "@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + } + } } }, "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-transforms": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", - "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.8", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" + }, + "dependencies": { + "@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + } + } } }, "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-plugin-utils": { @@ -644,59 +728,70 @@ "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", + "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-wrap-function": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + } } }, "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, "requires": { - "@babel/types": "^7.14.8" + "@babel/types": "^7.15.4" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", + "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, "@babel/helper-validator-option": { @@ -706,26 +801,52 @@ "dev": true }, "@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", + "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-function-name": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "dependencies": { + "@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + } + } } }, "@babel/helpers": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz", - "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "dependencies": { + "@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + } + } } }, "@babel/highlight": { @@ -740,19 +861,19 @@ } }, "@babel/parser": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.9.tgz", - "integrity": "sha512-RdUTOseXJ8POjjOeEBEvNMIZU/nm4yu2rufRkcibzkkg7DmQvXU8v3M4Xk9G7uuI86CDGkKcuDWgioqZm+mScQ==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", "@babel/plugin-proposal-optional-chaining": "^7.14.5" } }, @@ -778,12 +899,12 @@ } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" } @@ -849,16 +970,16 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" + "@babel/plugin-transform-parameters": "^7.15.4" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -893,15 +1014,26 @@ } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + } } }, "@babel/plugin-proposal-unicode-property-regex": { @@ -1070,27 +1202,38 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", + "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", - "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", + "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", "globals": "^11.1.0" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + } } }, "@babel/plugin-transform-computed-properties": { @@ -1141,9 +1284,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", + "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -1189,27 +1332,27 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", + "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-module-transforms": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-simple-access": "^7.15.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", + "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", "babel-plugin-dynamic-import-node": "^2.3.3" } }, @@ -1252,9 +1395,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", + "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -1319,13 +1462,13 @@ } }, "@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz", + "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4" } }, "@babel/plugin-transform-sticky-regex": { @@ -1375,9 +1518,9 @@ } }, "@babel/preset-env": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.8.tgz", + "integrity": "sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg==", "dev": true, "requires": { "@babel/compat-data": "^7.14.7", @@ -1447,7 +1590,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.14.5", "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "babel-plugin-polyfill-corejs2": "^0.2.2", "babel-plugin-polyfill-corejs3": "^0.2.2", "babel-plugin-polyfill-regenerator": "^0.2.2", @@ -1477,9 +1620,9 @@ } }, "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -1497,29 +1640,29 @@ } }, "@babel/traverse": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.9.tgz", - "integrity": "sha512-bldh6dtB49L8q9bUyB7bC20UKgU+EFDwKJylwl234Kv+ySZeMD31Xeht6URyueQ6LrRRpF2tmkfcZooZR9/e8g==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.9", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.9", - "@babel/types": "^7.14.9", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.9.tgz", - "integrity": "sha512-4yoHbhDYzFa0GLfCzLp5GxH7vPPMAHdZjyE7M/OajM9037zhx0rf+iNsJwp4PT0MSFpwjG7BsHEbPkBQpZ6cYA==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", "dev": true, "requires": { - "@babel/types": "^7.14.9", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -1533,9 +1676,9 @@ } }, "@babel/types": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.9.tgz", - "integrity": "sha512-u0bLTnv3DFHeaQLYzb7oRJ1JHr1sv/SYDM7JSqHFFLwXG1wTZRughxFI5NCP8qBEo1rVVsn7Yg2Lvw49nne/Ow==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", @@ -1555,9 +1698,9 @@ "dev": true }, "@fqqb/timeline": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@fqqb/timeline/-/timeline-1.1.2.tgz", - "integrity": "sha512-KJZDrb5L/BodPhY5//cqbIrojs1uNhJDz4M+wNa1vjkP2Etou1ULuiiBxShSTLKFGoxEsmQR0OXEF+Vtpy5HNA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@fqqb/timeline/-/timeline-1.2.0.tgz", + "integrity": "sha512-qrTeAYzZcF/Cjos9teT+x5/e7ts4qeX6bEWUaZZzDQPzDuFq3xhq2N6U/5nry4oHk2xT0Wp5sZp4ZZE6KEruVg==", "dev": true }, "@istanbuljs/schema": { @@ -1566,6 +1709,12 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/resolve-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz", + "integrity": "sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA==", + "dev": true + }, "@jsdevtools/coverage-istanbul-loader": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", @@ -1580,13 +1729,10 @@ } }, "@ngtools/webpack": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.1.4.tgz", - "integrity": "sha512-hXc8dTnRfDB7o1Pd7a07aw0rjGmVLXU28+cTHQJliosgD3obcjfZ4QPA0k97vlQMtqVJawuShRfyiUKrpsJf8Q==", - "dev": true, - "requires": { - "enhanced-resolve": "5.8.2" - } + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.10.tgz", + "integrity": "sha512-8ptz2WqEeqFLOMbiYJ6x6XARjzWIrCHzRzpGwvKS28L5iMWeYuvX2EB48uKkMFy/8RJ0SkwyAJkFClPNJvDfrQ==", + "dev": true }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -1662,9 +1808,9 @@ } }, "@npmcli/node-gyp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", - "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", "dev": true }, "@npmcli/promise-spawn": { @@ -1677,14 +1823,13 @@ } }, "@npmcli/run-script": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", - "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", "dev": true, "requires": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", - "infer-owner": "^1.0.4", "node-gyp": "^7.1.0", "read-package-json-fast": "^2.0.1" } @@ -1714,9 +1859,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz", - "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz", + "integrity": "sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1753,13 +1898,13 @@ } }, "@schematics/angular": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.1.4.tgz", - "integrity": "sha512-xGqgGI6GWk4EFdKis8FmSESxoLgjnLQbaRE1t1KZCkSKJzqkOj0R9wiDrtZfcrbPxIkLL+3fAk2ThwwPznT6yw==", + "version": "12.2.10", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.10.tgz", + "integrity": "sha512-hjOWrC/RlZ97oYWO92f5VRu6LDzPHnowDcyGDGvI9wCrfipL4Y7Is6LgFAiVZxCHdRz71MCnES1IXSj5w6UuBA==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.4", - "@angular-devkit/schematics": "12.1.4", + "@angular-devkit/core": "12.2.10", + "@angular-devkit/schematics": "12.2.10", "jsonc-parser": "3.0.0" } }, @@ -1770,9 +1915,9 @@ "dev": true }, "@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true }, "@types/dygraphs": { @@ -1785,9 +1930,9 @@ } }, "@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.1.tgz", + "integrity": "sha512-XhZKznR3i/W5dXqUhgU9fFdJekufbeBd5DALmkuXoeFcjbQcPk+2cL+WLHf6Q81HWAnM2vrslIHpGVyCAviRwg==", "dev": true, "requires": { "@types/estree": "*", @@ -1839,9 +1984,9 @@ "dev": true }, "@types/node": { - "version": "16.4.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.11.tgz", - "integrity": "sha512-nWSFUbuNiPKJEe1IViuodSI+9cM+vpM8SWF/O6dJK7wmGRNq55U7XavJHrlRrPkSMuUZUFzg1xaZ1B+ZZCrRWw==", + "version": "16.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.1.tgz", + "integrity": "sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==", "dev": true }, "@types/parse-json": { @@ -2049,9 +2194,9 @@ "dev": true }, "@yamcs/opi": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@yamcs/opi/-/opi-1.2.1.tgz", - "integrity": "sha512-yS3BvVf+sNl/oAL6/WcXI1cgNm6jA/FGsgX8lbw5C0+iq7rURi7tDWqvOon0iyVvapilNmB+V7azKLbNhIidbQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@yamcs/opi/-/opi-1.2.3.tgz", + "integrity": "sha512-ch/lnJ+OZQ/T8JoKueBejSq2Osrim/ASqRaBeQ6VcGXTZ0xRrOt0RU00GL8oMKBhc7gVDVCBbZehLPEpX572mw==", "dev": true }, "@yarnpkg/lockfile": { @@ -2083,9 +2228,15 @@ } }, "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true }, "adjust-sourcemap-loader": { @@ -2129,9 +2280,9 @@ } }, "ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -2189,9 +2340,9 @@ "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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": { @@ -2220,9 +2371,9 @@ "dev": true }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "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", @@ -2352,29 +2503,34 @@ "dev": true }, "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "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", - "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" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -2382,15 +2538,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -2469,13 +2616,13 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz", - "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" + "core-js-compat": "^3.16.2" } }, "babel-plugin-polyfill-regenerator": { @@ -2689,16 +2836,16 @@ } }, "browserslist": { - "version": "4.16.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", - "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001248", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.793", + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", "escalade": "^3.1.1", - "node-releases": "^1.1.73" + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" } }, "buffer": { @@ -2818,9 +2965,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001248", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", - "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", + "version": "1.0.30001269", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001269.tgz", + "integrity": "sha512-UOy8okEVs48MyHYgV+RdW1Oiudl1H6KolybD6ZquD0VcrPSgj25omXO1S7rDydjpqaISCwA8Pyx+jUQKZwWO5w==", "dev": true }, "canonical-path": { @@ -2936,9 +3083,9 @@ } }, "cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true }, "cli-width": { @@ -3047,15 +3194,15 @@ "dev": true }, "colord": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.6.0.tgz", - "integrity": "sha512-8yMrtE20ZxH1YWvvSoeJFtvqY+GIAOfU+mZ3jx7ZSiEMasnAmNqD1BKUP3CuCWcy/XHgcXkLW6YU8C35nhOYVg==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.0.tgz", + "integrity": "sha512-D8guC3WXLzW892WdoQD+RhIRlfeQSZnTEOq+KxX6fak9ijrHt30oKF9L7jQovCA13pSIJJVFVEYzp4Y4f4k+Yg==", "dev": true }, "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "dev": true }, "combined-stream": { @@ -3196,9 +3343,9 @@ "dev": true }, "copy-webpack-plugin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.0.tgz", - "integrity": "sha512-k8UB2jLIb1Jip2nZbCz83T/XfhfjX6mB1yLJNYKrpYi7FQimfOoFv/0//iT6HV1K8FwUB5yUbCcnpLebJXJTug==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", "dev": true, "requires": { "fast-glob": "^3.2.5", @@ -3207,7 +3354,7 @@ "normalize-path": "^3.0.0", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1" + "serialize-javascript": "^6.0.0" }, "dependencies": { "ajv": { @@ -3251,18 +3398,18 @@ } }, "core-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz", - "integrity": "sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", "dev": true }, "core-js-compat": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.16.0.tgz", - "integrity": "sha512-5D9sPHCdewoUK7pSUPfTF7ZhLh8k9/CoJXWUEo+F1dZT5Z1DVgcuRqUKhjeKW+YLb8f21rTFgWwQJiNw1hoZ5Q==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.17.3", "semver": "7.0.0" }, "dependencies": { @@ -3275,15 +3422,15 @@ } }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "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", @@ -3406,15 +3553,20 @@ "postcss": "^7.0.5" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -3422,15 +3574,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -3441,9 +3584,9 @@ "dev": true }, "css-declaration-sorter": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz", - "integrity": "sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.3.tgz", + "integrity": "sha512-SvjQjNRZgh4ULK1LDJ2AduPKUKxIqmtU7ZAyi47BTV+M90Qvxr9AB6lKlLbDUfXqI9IQeYA8LbAsCZPpJEV3aA==", "dev": true, "requires": { "timsort": "^0.3.0" @@ -3465,15 +3608,20 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -3492,34 +3640,38 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "css-loader": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", - "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.2.0.tgz", + "integrity": "sha512-/rvHfYRjIpymZblf49w8jYcRo2y9gj6rV8UroHGmBxKrIyGLokpycyKzp9OkitvqT29ZSpzJ0Ic7SpnJX3sC8g==", "dev": true, "requires": { "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", "postcss": "^8.2.15", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", "semver": "^7.3.5" + } + }, + "css-minimizer-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", + "dev": true, + "requires": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "p-limit": "^3.0.2", + "postcss": "^8.3.5", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" }, "dependencies": { "ajv": { @@ -3539,61 +3691,15 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true - }, - "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" - } - } - } - }, - "css-minimizer-webpack-plugin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.1.tgz", - "integrity": "sha512-RGFIv6iZWUPO2T1vE5+5pNCSs2H2xtHYRdfZPiiNH8Of6QOn9BeFnZSoHiQMkmsxOO/JkPe4BpKfs7slFIWcTA==", - "dev": true, - "requires": { - "cssnano": "^5.0.0", - "jest-worker": "^27.0.2", - "p-limit": "^3.0.2", - "postcss": "^8.2.9", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - } - }, - "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==", - "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" - } + }, + "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" + } }, "schema-utils": { "version": "3.1.1", @@ -3665,15 +3771,20 @@ "postcss": "^7.0.5" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -3681,15 +3792,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -3725,9 +3827,9 @@ } }, "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, "cssdb": { @@ -3743,21 +3845,21 @@ "dev": true }, "cssnano": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.7.tgz", - "integrity": "sha512-7C0tbb298hef3rq+TtBbMuezBQ9VrFtrQEsPNuBKNVgWny/67vdRsnq8EoNu7TRjAHURgYvWlRIpCUmcMZkRzw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.8.tgz", + "integrity": "sha512-Lda7geZU0Yu+RZi2SGpjYuQz4HI4/1Y+BhdD0jL7NXAQ5larCzVn+PUGuZbDMYz904AXXCOgO5L1teSvgu7aFg==", "dev": true, "requires": { - "cssnano-preset-default": "^5.1.3", + "cssnano-preset-default": "^5.1.4", "is-resolvable": "^1.1.0", "lilconfig": "^2.0.3", "yaml": "^1.10.2" } }, "cssnano-preset-default": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", - "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.4.tgz", + "integrity": "sha512-sPpQNDQBI3R/QsYxQvfB4mXeEcWuw0wGtKtmS5eg8wudyStYMgKOQT39G07EbW1LB56AOYrinRS9f0ig4Y3MhQ==", "dev": true, "requires": { "css-declaration-sorter": "^6.0.3", @@ -3772,7 +3874,7 @@ "postcss-merge-longhand": "^5.0.2", "postcss-merge-rules": "^5.0.2", "postcss-minify-font-values": "^5.0.1", - "postcss-minify-gradients": "^5.0.1", + "postcss-minify-gradients": "^5.0.2", "postcss-minify-params": "^5.0.1", "postcss-minify-selectors": "^5.1.0", "postcss-normalize-charset": "^5.0.1", @@ -4087,18 +4189,18 @@ "dev": true }, "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "dev": true, "requires": { "domelementtype": "^2.2.0" } }, "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { "dom-serializer": "^1.0.1", @@ -4129,9 +4231,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.795", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.795.tgz", - "integrity": "sha512-4TPxrLf9Fzsi4rVgTlDm+ubxoXm3/TN67/LGHx/a4UkVubKILa6L26O6eTnHewixG/knzU9L3lLmfL39eElwlQ==", + "version": "1.3.872", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.872.tgz", + "integrity": "sha512-qG96atLFY0agKyEETiBFNhpRLSXGSXOBuhXWpbkYqrLKKASpRyRBUtfkn0ZjIf/yXfA7FA4nScVOMpXSHFlUCQ==", "dev": true }, "emoji-regex": { @@ -4184,9 +4286,9 @@ } }, "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -4235,12 +4337,124 @@ "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", "dev": true }, - "esbuild": { - "version": "0.12.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.17.tgz", - "integrity": "sha512-GshKJyVYUnlSXIZj/NheC2O0Kblh42CS7P1wJyTbbIHevTG4jYMS9NNw8EOd8dDWD0dzydYHS01MpZoUcQXB4g==", + "esbuild-android-arm64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.4.tgz", + "integrity": "sha512-elDJt+jNyoHFId0/dKsuVYUPke3EcquIyUwzJCH17a3ERglN3A9aMBI5zbz+xNZ+FbaDNdpn0RaJHCFLbZX+fA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.4.tgz", + "integrity": "sha512-zJQGyHRAdZUXlRzbN7W+7ykmEiGC+bq3Gc4GxKYjjWTgDRSEly98ym+vRNkDjXwXYD3gGzSwvH35+MiHAtWvLA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.4.tgz", + "integrity": "sha512-r8oYvAtqSGq8HNTZCAx4TdLE7jZiGhX9ooGi5AQAey37MA6XNaP8ZNlw9OCpcgpx3ryU2WctXwIqPzkHO7a8dg==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.4.tgz", + "integrity": "sha512-u9DRGkn09EN8+lCh6z7FKle7awi17PJRBuAKdRNgSo5ZrH/3m+mYaJK2PR2URHMpAfXiwJX341z231tSdVe3Yw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.4.tgz", + "integrity": "sha512-q3B2k68Uf6gfjATjcK16DqxvjqRQkHL8aPoOfj4op+lSqegdXvBacB1d8jw8PxbWJ8JHpdTLdAVUYU80kotQXA==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.4.tgz", + "integrity": "sha512-UUYJPHSiKAO8KoN3Ls/iZtgDLZvK5HarES96aolDPWZnq9FLx4dIHM/x2z4Rxv9IYqQ/DxlPoE2Co1UPBIYYeA==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.4.tgz", + "integrity": "sha512-+RnohAKiiUW4UHLGRkNR1AnENW1gCuDWuygEtd4jxTNPIoeC7lbXGor7rtgjj9AdUzFgOEvAXyNNX01kJ8NueQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.4.tgz", + "integrity": "sha512-BH5gKve4jglS7UPSsfwHSX79I5agC/lm4eKoRUEyo8lwQs89frQSRp2Xup+6SFQnxt3md5EsKcd2Dbkqeb3gPA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.4.tgz", + "integrity": "sha512-+A188cAdd6QuSRxMIwRrWLjgphQA0LDAQ/ECVlrPVJwnx+1i64NjDZivoqPYLOTkSPIKntiWwMhhf0U5/RrPHQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.4.tgz", + "integrity": "sha512-0xkwtPaUkG5xMTFGaQPe1AadSe5QAiQuD4Gix1O9k5Xo/U8xGIkw9UFUTvfEUeu71vFb6ZgsIacfP1NLoFjWNw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.4.tgz", + "integrity": "sha512-E1+oJPP7A+j23GPo3CEpBhGwG1bni4B8IbTA3/3rvzjURwUMZdcN3Fhrz24rnjzdLSHmULtOE4VsbT42h1Om4Q==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.4.tgz", + "integrity": "sha512-xEkI1o5HYxDzbv9jSox0EsDxpwraG09SRiKKv0W8pH6O3bt+zPSlnoK7+I7Q69tkvONkpIq5n2o+c55uq0X7cw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.4.tgz", + "integrity": "sha512-bjXUMcODMnB6hQicLBBmmnBl7OMDyVpFahKvHGXJfDChIi5udiIRKCmFUFIRn+AUAKVlfrofRKdyPC7kBsbvGQ==", + "dev": true, + "optional": true + }, + "esbuild-wasm": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.4.tgz", + "integrity": "sha512-2dN7njr9/2QzKLqbTEgXr73vDbSqffdJMv4EfaMQoy04cej0owbGHH5apPgED0wN9I5e7sBT0/Q81tVy3wQBlA==", "dev": true }, + "esbuild-windows-32": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.4.tgz", + "integrity": "sha512-z4CH07pfyVY0XF98TCsGmLxKCl0kyvshKDbdpTekW9f2d+dJqn5mmoUyWhpSVJ0SfYWJg86FoD9nMbbaMVyGdg==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.4.tgz", + "integrity": "sha512-uVL11vORRPjocGLYam67rwFLd0LvkrHEs+JG+1oJN4UD9MQmNGZPa4gBHo6hDpF+kqRJ9kXgQSeDqUyRy0tj/Q==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.4.tgz", + "integrity": "sha512-vA6GLvptgftRcDcWngD5cMlL4f4LbL8JjU2UMT9yJ0MT5ra6hdZNFWnOeOoEtY4GtJ6OjZ0i+81sTqhAB0fMkg==", + "dev": true, + "optional": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -4310,6 +4524,12 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -4603,9 +4823,9 @@ "dev": true }, "fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "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" @@ -4711,9 +4931,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", "dev": true }, "for-in": { @@ -4909,12 +5129,12 @@ } }, "glob-parent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz", - "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "glob-to-regexp": { @@ -4944,9 +5164,9 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "handle-thing": { @@ -5012,6 +5232,15 @@ "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, + "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", @@ -5070,10 +5299,21 @@ } } }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "hdr-histogram-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz", + "integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==", + "dev": true, + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", "dev": true }, "hosted-git-info": { @@ -5123,18 +5363,6 @@ } } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, "html-entities": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", @@ -5513,9 +5741,9 @@ } }, "inquirer": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.1.tgz", - "integrity": "sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.2.tgz", + "integrity": "sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", @@ -5528,7 +5756,7 @@ "mute-stream": "0.0.8", "ora": "^5.3.0", "run-async": "^2.4.0", - "rxjs": "^6.6.6", + "rxjs": "^7.2.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6" @@ -5574,6 +5802,15 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "requires": { + "tslib": "~2.1.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -5582,6 +5819,12 @@ "requires": { "has-flag": "^4.0.0" } + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true } } }, @@ -5640,12 +5883,13 @@ } }, "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "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.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-arrayish": { @@ -5669,32 +5913,10 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - }, - "dependencies": { - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - } - } - }, "is-core-module": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", - "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "requires": { "has": "^1.0.3" @@ -5721,10 +5943,13 @@ } }, "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true + "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-descriptor": { "version": "0.1.6", @@ -5770,9 +5995,9 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -5845,13 +6070,13 @@ } }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "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-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-resolvable": { @@ -5924,9 +6149,9 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "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": { @@ -5950,9 +6175,9 @@ } }, "jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", "dev": true, "requires": { "@types/node": "*", @@ -6143,9 +6368,9 @@ } }, "less-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.0.0.tgz", - "integrity": "sha512-JjioAkw9qyavL0BzMPUOHJa0a20fh+ipq/MNZH4OkU8qERsCMeZIWRE0FDBIx2O+cFguvY01vHh/lmBA9LyWDg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.0.1.tgz", + "integrity": "sha512-Crln//HpW9M5CbtdfWm3IO66Cvx1WhZQvNybXgfB2dD/6Sav9ppw+IWqs/FQKPBFO4B6X0X28Z0WNznshgwUzA==", "dev": true, "requires": { "klona": "^2.0.4" @@ -6326,9 +6551,9 @@ } }, "make-fetch-happen": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.4.tgz", - "integrity": "sha512-sQWNKMYqSmbAGXqJg2jZ+PmHh5JAybvwu0xM8mZR/bsTjGiTASj3ldXJV7KFHy1k/IJIBkjxQFoWIVsv9+PQMg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, "requires": { "agentkeepalive": "^4.1.3", @@ -6345,7 +6570,7 @@ "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.2", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", + "socks-proxy-agent": "^6.0.0", "ssri": "^8.0.0" } }, @@ -6404,9 +6629,9 @@ } }, "memfs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", - "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", + "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==", "dev": true, "requires": { "fs-monkey": "1.0.3" @@ -6506,18 +6731,18 @@ "dev": true }, "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", "dev": true }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "requires": { - "mime-db": "1.49.0" + "mime-db": "1.50.0" } }, "mimic-fn": { @@ -6527,14 +6752,12 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.2.1.tgz", + "integrity": "sha512-A0GBXpz8WIPgh2HfASJ0EeY8grd2dGxmC4R8uTujFJXZY7zFy0nvYSYW6SKCLKlz7y45BdHONfaxZQMIZpeF/w==", "dev": true, "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^3.1.0" }, "dependencies": { "ajv": { @@ -6590,9 +6813,9 @@ "dev": true }, "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -6608,9 +6831,9 @@ } }, "minipass-fetch": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.4.tgz", - "integrity": "sha512-TielGogIzbUEtd1LsjZFs47RWuHHfhl6TiCx1InVxApBAmQ8bL0dL5ilkLGcRvuyW/A9nE+Lvn855Ewz8S0PnQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "dev": true, "requires": { "encoding": "^0.1.12", @@ -6722,16 +6945,22 @@ "dev": true }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "dev": true, "optional": true }, + "nanocolors": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz", + "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==", + "dev": true + }, "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", "dev": true }, "nanomatch": { @@ -6754,9 +6983,9 @@ } }, "needle": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.8.0.tgz", - "integrity": "sha512-ZTq6WYkN/3782H1393me3utVYdq2XyqNUFBsprEE3VMAT0+hP/cItpnITpqsY6ep2yeFE4Tqtqwc74VqUlUYtw==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", "dev": true, "optional": true, "requires": { @@ -6790,9 +7019,9 @@ "dev": true }, "ng-packagr": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-12.2.0.tgz", - "integrity": "sha512-M/qq78Gb4q13t6SFX70W2DrPxyooSkLwXzhWozjD8yWGihx4q+54a72ODGx7jIrB4fQgrGDcMUTM7t1zGYir8Q==", + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-12.2.3.tgz", + "integrity": "sha512-2KHoglc7UgJMnzkytzZ1wU+IEkb6UrxoU4QZxnF5BSFh9vjUra2nCXH+EKkvxD3WTj0ikXmNIMeNWbwoZpGkgA==", "dev": true, "requires": { "@rollup/plugin-commonjs": "^20.0.0", @@ -6806,6 +7035,7 @@ "commander": "^8.0.0", "dependency-graph": "^0.11.0", "esbuild": "^0.12.15", + "esbuild-wasm": "^0.12.15", "find-cache-dir": "^3.3.1", "glob": "^7.1.6", "injection-js": "^2.4.0", @@ -6824,19 +7054,50 @@ }, "dependencies": { "commander": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.1.0.tgz", - "integrity": "sha512-mf45ldcuHSYShkplHHGKWb4TrmwQadxOn7v4WuhDJy0ZVoY5JFajaRDKD0PNe5qXzBX0rhovjTnP6Kz9LETcuA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.2.0.tgz", + "integrity": "sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==", + "dev": true + }, + "esbuild": { + "version": "0.12.29", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", + "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", + "dev": true, + "optional": true + }, + "esbuild-wasm": { + "version": "0.12.29", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.12.29.tgz", + "integrity": "sha512-amSuB/qOGnTFYLOxGHDGosQbOKZnrinniPHFf6ZxzeNH7WAjLkjXluKyKAtX2YuhTkUXm9XV9igl13iqYZ44fQ==", "dev": true } } }, + "nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "optional": true, + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, "node-forge": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", @@ -6872,10 +7133,17 @@ } } }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true, + "optional": true + }, "node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", + "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", "dev": true }, "node-sass-tilde-importer": { @@ -7323,12 +7591,12 @@ "dev": true }, "pacote": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.4.tgz", - "integrity": "sha512-RfahPCunM9GI7ryJV/zY0bWQiokZyLqaSNHXtbNSoLb7bwTvBbJBEyCJ01KWs4j1Gj7GmX8crYXQ1sNX6P2VKA==", + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", "dev": true, "requires": { - "@npmcli/git": "^2.0.1", + "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", "@npmcli/promise-spawn": "^1.2.0", "@npmcli/run-script": "^1.8.2", @@ -7349,6 +7617,12 @@ "tar": "^6.1.0" } }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -7476,6 +7750,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -7503,6 +7783,18 @@ "pinkie": "^2.0.0" } }, + "piscina": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz", + "integrity": "sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg==", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -7550,9 +7842,9 @@ "dev": true }, "postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", "dev": true, "requires": { "colorette": "^1.2.2", @@ -7570,15 +7862,20 @@ "postcss-selector-parser": "^6.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -7586,15 +7883,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -7618,15 +7906,20 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -7634,15 +7927,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -7657,15 +7941,20 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -7673,15 +7962,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -7695,15 +7975,20 @@ "postcss-values-parser": "^2.0.1" }, "dependencies": { - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "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": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -7711,15 +7996,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -7734,15 +8010,20 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -7750,15 +8031,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -7772,15 +8044,20 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -7788,15 +8065,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -7830,15 +8098,20 @@ "postcss": "^7.0.14" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -7846,15 +8119,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -7868,15 +8132,20 @@ "postcss-values-parser": "^2.0.1" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -7884,15 +8153,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -7912,15 +8172,20 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -7939,15 +8204,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -7967,15 +8223,20 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -7994,15 +8255,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8040,15 +8292,20 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8056,15 +8313,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8078,15 +8326,20 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8094,15 +8347,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8115,15 +8359,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8131,15 +8380,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8152,15 +8392,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8168,15 +8413,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8189,15 +8425,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8205,15 +8446,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8226,15 +8458,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8242,15 +8479,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8264,15 +8492,20 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8280,15 +8513,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8312,15 +8536,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8328,15 +8557,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8351,15 +8571,20 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8367,22 +8592,13 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "postcss-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.0.tgz", - "integrity": "sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.1.tgz", + "integrity": "sha512-lBmJMvRh1D40dqpWKr9Rpygwxn8M74U9uaCSeYGNKLGInbk9mXBt1ultHf2dH9Ghk6Ue4UXlXWwGMH9QdUJ5ug==", "dev": true, "requires": { "cosmiconfig": "^7.0.0", @@ -8399,15 +8615,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8415,15 +8636,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8436,15 +8648,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8452,15 +8669,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8498,13 +8706,13 @@ } }, "postcss-minify-gradients": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", - "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.2.tgz", + "integrity": "sha512-7Do9JP+wqSD6Prittitt2zDLrfzP9pqKs2EcLX7HJYxsxCOwrrcLt4x/ctQTsiOw+/8HYotAoqNkrzItL19SdQ==", "dev": true, "requires": { + "colord": "^2.6", "cssnano-utils": "^2.0.1", - "is-color-stop": "^1.1.0", "postcss-value-parser": "^4.1.0" } }, @@ -8575,15 +8783,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8591,15 +8804,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8706,15 +8910,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8722,15 +8931,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8743,15 +8943,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8759,15 +8964,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8781,15 +8977,20 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8797,15 +8998,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8854,15 +9046,20 @@ "postcss-selector-not": "^4.0.0" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -8870,15 +9067,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8898,15 +9086,20 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -8925,15 +9118,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8966,31 +9150,27 @@ "postcss": "^7.0.2" }, "dependencies": { - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, - "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==", + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -9004,15 +9184,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -9020,15 +9205,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -9042,15 +9218,20 @@ "postcss": "^7.0.2" }, "dependencies": { + "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": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -9058,15 +9239,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -9263,47 +9435,6 @@ } } }, - "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": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - } - }, - "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==", - "dev": true - }, - "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" - } - } - } - }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -9364,18 +9495,18 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "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==", "dev": true }, "regenerator-transform": { @@ -9414,17 +9545,17 @@ } }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", "dev": true, "requires": { - "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" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" } }, "regjsgen": { @@ -9434,9 +9565,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -9580,15 +9711,20 @@ "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==", + "dev": true + }, "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -9596,15 +9732,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -9636,18 +9763,6 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -9664,9 +9779,9 @@ "dev": true }, "rollup": { - "version": "2.55.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.55.1.tgz", - "integrity": "sha512-1P9w5fpb6b4qroePh8vHKGIvPNxwoCQhjJpIqfZGHLKpZ0xcU2/XBmFxFbc9697/6bmHpmFTLk5R1dAQhFSo0g==", + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -9736,9 +9851,9 @@ "dev": true }, "sass": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.1.tgz", - "integrity": "sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ==", + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.36.0.tgz", + "integrity": "sha512-fQzEjipfOv5kh930nu3Imzq3ie/sGDc/4KtQMJlt7RRdrkQSfe37Bwi/Rf/gfuYHsIuE1fIlDMvpyMcEwjnPvg==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0" @@ -9862,9 +9977,9 @@ } }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -10116,9 +10231,9 @@ } }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, "slash": { @@ -10128,9 +10243,9 @@ "dev": true }, "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true }, "snapdragon": { @@ -10286,9 +10401,9 @@ } }, "sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", + "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", "dev": true, "requires": { "debug": "^3.2.6", @@ -10296,7 +10411,7 @@ "faye-websocket": "^0.11.3", "inherits": "^2.0.4", "json3": "^3.3.3", - "url-parse": "^1.5.1" + "url-parse": "^1.5.3" }, "dependencies": { "debug": { @@ -10321,14 +10436,14 @@ } }, "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz", + "integrity": "sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==", "dev": true, "requires": { "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "debug": "^4.3.1", + "socks": "^2.6.1" } }, "source-list-map": { @@ -10507,14 +10622,14 @@ "dev": true }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "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.0" + "strip-ansi": "^6.0.1" } }, "string_decoder": { @@ -10535,12 +10650,12 @@ } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "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.0" + "ansi-regex": "^5.0.1" } }, "strip-eof": { @@ -10550,45 +10665,10 @@ "dev": true }, "style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - } - }, - "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==", - "dev": true - }, - "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" - } - } - } + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.2.1.tgz", + "integrity": "sha512-1k9ZosJCRFaRbY6hH49JFlRB0fVSbmnyq1iTPjNxUmGVjBNEmwrrHPenhlp+Lgo51BojHSf6pl2FcqYaN3PfVg==", + "dev": true }, "stylehacks": { "version": "5.0.1", @@ -10660,69 +10740,18 @@ } }, "svgo": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", - "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.7.0.tgz", + "integrity": "sha512-aDLsGkre4fTDCWvolyW+fs8ZJFABpzLXbtdK1y71CKnHzAnpDxKXPj2mNKj+pyOXUCzFHzuxRJ94XOFygOWV3w==", "dev": true, "requires": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", "css-select": "^4.1.3", - "css-tree": "^1.1.2", + "css-tree": "^1.1.3", "csso": "^4.2.0", + "nanocolors": "^0.1.12", "stable": "^0.1.8" - }, - "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" - } - }, - "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 - }, - "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-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" - } - } } }, "symbol-observable": { @@ -10732,9 +10761,9 @@ "dev": true }, "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "tar": { @@ -10752,9 +10781,9 @@ } }, "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", "dev": true, "requires": { "commander": "^2.20.0", @@ -10771,15 +10800,15 @@ } }, "terser-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dev": true, "requires": { "jest-worker": "^27.0.2", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", "terser": "^5.7.0" }, @@ -10933,9 +10962,9 @@ "dev": true }, "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true }, "tunnel-agent": { @@ -10976,31 +11005,31 @@ "dev": true }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "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==", "dev": true }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "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==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "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==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "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==", "dev": true }, "union-value": { @@ -11194,6 +11223,14 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + } } }, "watchpack": { @@ -11225,9 +11262,9 @@ } }, "webpack": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.44.0.tgz", - "integrity": "sha512-I1S1w4QLoKmH19pX6YhYN0NiSXaWY8Ou00oA+aMcr9IUGeF5azns+IKBkfoAAG9Bu5zOIzZt/mN35OffBya8AQ==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.50.0.tgz", + "integrity": "sha512-hqxI7t/KVygs0WRv/kTgUW8Kl3YC81uyWQSo/7WUs5LsuRw0htH/fCwbVBGCuiX/t4s7qzjXFcf41O8Reiypag==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", @@ -11236,6 +11273,7 @@ "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.0", @@ -11248,11 +11286,11 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" + "webpack-sources": "^3.2.0" }, "dependencies": { "ajv": { @@ -11284,21 +11322,11 @@ "ajv-keywords": "^3.5.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", + "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", + "dev": true } } }, @@ -11791,45 +11819,12 @@ "dev": true }, "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "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" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "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 - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "wildcard": { diff --git a/yamcs-web/src/main/webapp/package.json b/yamcs-web/src/main/webapp/package.json index 26714d1555a..2e640256c36 100644 --- a/yamcs-web/src/main/webapp/package.json +++ b/yamcs-web/src/main/webapp/package.json @@ -11,31 +11,31 @@ }, "private": true, "devDependencies": { - "@angular-devkit/build-angular": "^12.1.4", - "@angular/animations": "^12.1.4", - "@angular/cdk": "^12.1.4", - "@angular/cli": "^12.1.4", - "@angular/common": "^12.1.4", - "@angular/compiler": "^12.1.4", - "@angular/compiler-cli": "^12.1.4", - "@angular/core": "^12.1.4", - "@angular/forms": "^12.1.4", - "@angular/language-service": "^12.1.4", - "@angular/material": "^12.1.4", - "@angular/platform-browser": "^12.1.4", - "@angular/platform-browser-dynamic": "^12.1.4", - "@angular/router": "^12.1.4", - "@fqqb/timeline": "^1.1.2", + "@angular-devkit/build-angular": "^12.2.10", + "@angular/animations": "^12.2.10", + "@angular/cdk": "^12.2.10", + "@angular/cli": "^12.2.10", + "@angular/common": "^12.2.10", + "@angular/compiler": "^12.2.10", + "@angular/compiler-cli": "^12.2.10", + "@angular/core": "^12.2.10", + "@angular/forms": "^12.2.10", + "@angular/language-service": "^12.2.10", + "@angular/material": "^12.2.10", + "@angular/platform-browser": "^12.2.10", + "@angular/platform-browser-dynamic": "^12.2.10", + "@angular/router": "^12.2.10", + "@fqqb/timeline": "^1.2.0", "@types/dygraphs": "^2.1.3", "@types/showdown": "^1.9.4", - "@yamcs/opi": "^1.2.1", + "@yamcs/opi": "^1.2.3", "brace": "^0.11.1", "dygraphs": "^2.1.0", - "ng-packagr": "^12.2.0", + "ng-packagr": "^12.2.3", "roboto-fontface": "^0.10.0", "rxjs": "^6.6.3", "showdown": "^1.9.1", - "tslib": "^2.3.0", + "tslib": "^2.3.1", "typescript": "~4.2.4", "zone.js": "~0.11.4" }, diff --git a/yamcs-web/src/main/webapp/src/app/archive/ArchiveBrowserPage.ts b/yamcs-web/src/main/webapp/src/app/archive/ArchiveBrowserPage.ts index a7eef8ade7c..44c95232935 100644 --- a/yamcs-web/src/main/webapp/src/app/archive/ArchiveBrowserPage.ts +++ b/yamcs-web/src/main/webapp/src/app/archive/ArchiveBrowserPage.ts @@ -6,7 +6,7 @@ import { MatDialog } from '@angular/material/dialog'; import { MatSnackBar } from '@angular/material/snack-bar'; import { Title } from '@angular/platform-browser'; import { ActivatedRoute, Params, Router } from '@angular/router'; -import { AbsoluteTimeAxis, Event, EventLine, MouseTracker, Timeline, TimeLocator, Tool } from '@fqqb/timeline'; +import { Event, EventBand, MouseTracker, Timeline, TimeLocator, TimeRuler, Tool } from '@fqqb/timeline'; import { BehaviorSubject } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; import { IndexGroup } from '../client'; @@ -157,21 +157,21 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { if (queryParams.get('start') && queryParams.get('stop')) { const start = utils.toDate(queryParams.get('start')); const stop = utils.toDate(queryParams.get('stop')); - this.timeline.setBounds(start.getTime(), stop.getTime()); + this.timeline.setViewRange(start.getTime(), stop.getTime()); } else { // Show Today const start = this.yamcs.getMissionTime(); start.setUTCHours(0, 0, 0, 0); const stop = new Date(start.getTime()); stop.setUTCDate(start.getUTCDate() + 1); - this.timeline.setBounds(start.getTime(), stop.getTime()); + this.timeline.setViewRange(start.getTime(), stop.getTime()); } const locator = new TimeLocator(this.timeline, () => this.yamcs.getMissionTime().getTime()); locator.knobColor = 'salmon'; new MouseTracker(this.timeline); - const axis = new AbsoluteTimeAxis(this.timeline); + const axis = new TimeRuler(this.timeline); axis.label = 'UTC'; axis.timezone = 'UTC'; axis.frozen = true; @@ -232,7 +232,7 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { if (startPromise.packet?.length && stopPromise.packet?.length) { const start = utils.toDate(startPromise.packet[0].generationTime); const stop = utils.toDate(stopPromise.packet[0].generationTime); - this.timeline.setBounds(start.getTime(), stop.getTime()); + this.timeline.setViewRange(start.getTime(), stop.getTime()); } }).catch(err => this.messageService.showError(err)); } @@ -243,7 +243,7 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { const start = dt.getTime(); dt.setUTCDate(dt.getUTCDate() + 1); const stop = dt.getTime(); - this.timeline.setBounds(start, stop); + this.timeline.setViewRange(start, stop); } jumpToNow() { @@ -398,14 +398,14 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { const commandGroups = responses[3]; const eventGroups = responses[4]; - for (const line of this.timeline.getLines()) { - if (!(line instanceof AbsoluteTimeAxis)) { + for (const line of this.timeline.getBands()) { + if (!(line instanceof TimeRuler)) { this.timeline.removeChild(line); } } for (let i = 0; i < completenessGroups.length; i++) { if (i === 0) { - const spacer = new EventLine(this.timeline); + const spacer = new EventBand(this.timeline); spacer.label = 'Completeness'; spacer.backgroundColor = this.timeline.backgroundEvenColor; spacer.eventHeight = 30; @@ -429,10 +429,10 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { } events.push(event); } - const line = new EventLine(this.timeline); + const line = new EventBand(this.timeline); line.label = group.id.name; line.borderWidth = 0; - line.wrap = false; + line.multiline = false; line.events = events; line.marginTop = 0; line.marginBottom = i === completenessGroups.length - 1 ? 30 : 0; @@ -447,7 +447,7 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { if (this.filterForm.value['packets']) { for (let i = 0; i < this.packetNames.length; i++) { if (i === 0) { - const spacer = new EventLine(this.timeline); + const spacer = new EventBand(this.timeline); spacer.label = 'Packets'; spacer.backgroundColor = this.timeline.backgroundEvenColor; spacer.eventHeight = 30; @@ -476,10 +476,10 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { events.push(event); } } - const line = new EventLine(this.timeline); + const line = new EventBand(this.timeline); line.label = packetName; line.borderWidth = i === this.packetNames.length - 1 ? 1 : 0; - line.wrap = false; + line.multiline = false; line.events = events; line.marginTop = 0; line.marginBottom = i === this.packetNames.length - 1 ? 30 : 0; @@ -494,7 +494,7 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { for (let i = 0; i < parameterGroups.length; i++) { if (i === 0) { - const spacer = new EventLine(this.timeline); + const spacer = new EventBand(this.timeline); spacer.label = 'Parameters'; spacer.backgroundColor = this.timeline.backgroundEvenColor; spacer.eventHeight = 30; @@ -518,10 +518,10 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { } events.push(event); } - const line = new EventLine(this.timeline); + const line = new EventBand(this.timeline); line.label = group.id.name; line.borderWidth = 0; - line.wrap = false; + line.multiline = false; line.events = events; line.marginTop = 0; line.marginBottom = i === parameterGroups.length - 1 ? 30 : 0; @@ -535,7 +535,7 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { for (let i = 0; i < commandGroups.length; i++) { if (i === 0) { - const spacer = new EventLine(this.timeline); + const spacer = new EventBand(this.timeline); spacer.label = 'Commands'; spacer.backgroundColor = this.timeline.backgroundEvenColor; spacer.eventHeight = 30; @@ -559,10 +559,10 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { } events.push(event); } - const line = new EventLine(this.timeline); + const line = new EventBand(this.timeline); line.label = group.id.name; line.borderWidth = 0; - line.wrap = false; + line.multiline = false; line.events = events; line.marginTop = 0; line.marginBottom = i === commandGroups.length - 1 ? 30 : 0; @@ -576,7 +576,7 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { for (let i = 0; i < eventGroups.length; i++) { if (i === 0) { - const spacer = new EventLine(this.timeline); + const spacer = new EventBand(this.timeline); spacer.label = 'Events'; spacer.backgroundColor = this.timeline.backgroundEvenColor; spacer.eventHeight = 30; @@ -600,10 +600,10 @@ export class ArchiveBrowserPage implements AfterViewInit, OnDestroy { } events.push(event); } - const line = new EventLine(this.timeline); + const line = new EventBand(this.timeline); line.label = group.id.name; line.borderWidth = 0; - line.wrap = false; + line.multiline = false; line.events = events; line.marginTop = 0; line.marginBottom = i === eventGroups.length - 1 ? 30 : 0; diff --git a/yamcs-web/src/main/webapp/src/app/telemetry/displays/OpiDisplayViewer.ts b/yamcs-web/src/main/webapp/src/app/telemetry/displays/OpiDisplayViewer.ts index e9f48161952..417858b1aa7 100644 --- a/yamcs-web/src/main/webapp/src/app/telemetry/displays/OpiDisplayViewer.ts +++ b/yamcs-web/src/main/webapp/src/app/telemetry/displays/OpiDisplayViewer.ts @@ -1,4 +1,5 @@ -import { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, ViewChild } from '@angular/core'; +import { APP_BASE_HREF } from '@angular/common'; +import { ChangeDetectionStrategy, Component, ElementRef, Inject, OnDestroy, ViewChild } from '@angular/core'; import { Router } from '@angular/router'; import { AlarmSeverity, Display, PV, PVProvider, Sample } from '@yamcs/opi'; import { Subscription } from 'rxjs'; @@ -49,6 +50,7 @@ export class OpiDisplayViewer implements Viewer, PVProvider, OnDestroy { private router: Router, private synchronizer: Synchronizer, private messageService: MessageService, + @Inject(APP_BASE_HREF) private baseHref: string, ) { this.storageClient = yamcs.createStorageClient(); } @@ -154,6 +156,7 @@ export class OpiDisplayViewer implements Viewer, PVProvider, OnDestroy { public init(objectName: string) { const container: HTMLDivElement = this.displayContainer.nativeElement; this.display = new Display(container); + this.display.imagesPrefix = `${this.baseHref}static/`; let currentFolder = ''; if (objectName.lastIndexOf('/') !== -1) { diff --git a/yamcs-web/src/main/webapp/src/app/timeline/TimelineChartPage.ts b/yamcs-web/src/main/webapp/src/app/timeline/TimelineChartPage.ts index 8ea3929bb93..675d033067d 100644 --- a/yamcs-web/src/main/webapp/src/app/timeline/TimelineChartPage.ts +++ b/yamcs-web/src/main/webapp/src/app/timeline/TimelineChartPage.ts @@ -2,7 +2,7 @@ import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, OnDestro import { MatDialog } from '@angular/material/dialog'; import { Title } from '@angular/platform-browser'; import { ActivatedRoute, Router } from '@angular/router'; -import { AbsoluteTimeAxis, Event, EventLine, Line, MouseTracker, Timeline, TimeLocator } from '@fqqb/timeline'; +import { Event, EventBand, Line as Band, MouseTracker, Timeline, TimeLocator, TimeRuler } from '@fqqb/timeline'; import { BehaviorSubject } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; import { TimelineItem, TimelineView } from '../client/types/timeline'; @@ -42,7 +42,7 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { viewportRange$ = new BehaviorSubject(null); - private lines: Line[] = []; + private lines: Band[] = []; constructor( title: Title, @@ -107,14 +107,14 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { if (queryParams.get('start') && queryParams.get('stop')) { const start = utils.toDate(queryParams.get('start')); const stop = utils.toDate(queryParams.get('stop')); - this.timeline.setBounds(start.getTime(), stop.getTime()); + this.timeline.setViewRange(start.getTime(), stop.getTime()); } else { // Show Today const start = this.yamcs.getMissionTime(); start.setUTCHours(0, 0, 0, 0); const stop = new Date(start.getTime()); stop.setUTCDate(start.getUTCDate() + 1); - this.timeline.setBounds(start.getTime(), stop.getTime()); + this.timeline.setViewRange(start.getTime(), stop.getTime()); } const locator = new TimeLocator(this.timeline, () => this.yamcs.getMissionTime().getTime()); @@ -123,7 +123,7 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { new MouseTracker(this.timeline); this.timeline.addHeaderClickListener(evt => { - const band = evt.line.data.band; + const band = evt.band.data.band; const dialogRef = this.dialog.open(EditBandDialog, { width: '70%', height: '100%', @@ -172,19 +172,19 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { }); this.view$.next(view); - for (const line of this.timeline.getLines()) { + for (const line of this.timeline.getBands()) { this.timeline.removeChild(line); } if (view) { for (const band of (view.bands || [])) { if (band.type === 'TIME_RULER') { - const line = new AbsoluteTimeAxis(this.timeline); + const line = new TimeRuler(this.timeline); line.label = band.name; line.timezone = band.properties!.timezone; line.data = { band }; this.lines.push(line); } else if (band.type === 'ITEM_BAND') { - const line = new EventLine(this.timeline); + const line = new EventBand(this.timeline); line.label = band.name; line.data = { band }; @@ -201,13 +201,13 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { line.eventTextSize = properties.itemTextSize; line.marginBottom = properties.marginBottom; line.marginTop = properties.marginTop; - line.wrap = properties.multiline; + line.multiline = properties.multiline; line.spaceBetween = properties.spaceBetweenItems; line.lineSpacing = properties.spaceBetweenLines; this.lines.push(line); } else if (band.type === 'SPACER') { - const line = new EventLine(this.timeline); + const line = new EventBand(this.timeline); line.label = band.name; line.data = { band }; @@ -218,7 +218,7 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { this.lines.push(line); } else if (band.type === 'COMMAND_BAND') { - const line = new EventLine(this.timeline); + const line = new EventBand(this.timeline); line.label = band.name; line.data = { band }; @@ -230,7 +230,7 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { } refreshData() { - const queriedLines: EventLine[] = []; + const queriedLines: EventBand[] = []; const promises = []; // Load beyond the edges (for pan purposes) @@ -241,7 +241,7 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { for (const line of this.lines) { const band = line.data.band; if (band.type === 'ITEM_BAND') { - queriedLines.push(line as EventLine); + queriedLines.push(line as EventBand); promises.push(this.yamcs.yamcsClient.getTimelineItems(this.yamcs.instance!, { source: 'rdb', band: band.id, @@ -249,7 +249,7 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { stop: new Date(loadStop).toISOString(), })); } else if (band.type === 'COMMAND_BAND') { - queriedLines.push(line as EventLine); + queriedLines.push(line as EventBand); promises.push(this.yamcs.yamcsClient.getTimelineItems(this.yamcs.instance!, { source: 'commands', band: band.id, @@ -268,7 +268,7 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { } } - private populateEvents(line: EventLine, items: TimelineItem[]) { + private populateEvents(line: EventBand, items: TimelineItem[]) { const events: Event[] = []; for (const item of items) { const start = utils.toDate(item.start).getTime(); @@ -345,7 +345,7 @@ export class TimelineChartPage implements AfterViewInit, OnDestroy { const start = dt.getTime(); dt.setUTCDate(dt.getUTCDate() + 1); const stop = dt.getTime(); - this.timeline.setBounds(start, stop); + this.timeline.setViewRange(start, stop); } jumpToNow() { From 51941fa55a51e5e590b8efda3c0b8a383c1d0ceb Mon Sep 17 00:00:00 2001 From: Fabian Diet Date: Wed, 20 Oct 2021 09:50:24 +0200 Subject: [PATCH 12/24] Set TC sequence number equal to stack execution counter --- .../webapp/src/app/commanding/stacks/StackFilePage.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/yamcs-web/src/main/webapp/src/app/commanding/stacks/StackFilePage.ts b/yamcs-web/src/main/webapp/src/app/commanding/stacks/StackFilePage.ts index ba646d07f4f..4dea0cfc414 100644 --- a/yamcs-web/src/main/webapp/src/app/commanding/stacks/StackFilePage.ts +++ b/yamcs-web/src/main/webapp/src/app/commanding/stacks/StackFilePage.ts @@ -241,11 +241,13 @@ export class StackFilePage implements OnDestroy { } private async runEntry(entry: StackEntry) { + const executionNumber = ++this.executionCounter; return this.yamcs.yamcsClient.issueCommand(this.yamcs.instance!, this.yamcs.processor!, entry.name, { + sequenceNumber: executionNumber, args: entry.args, extra: entry.extra, }).then(response => { - entry.executionNumber = ++this.executionCounter; + entry.executionNumber = executionNumber; entry.id = response.id; // It's possible the WebSocket received data before we @@ -258,7 +260,7 @@ export class StackFilePage implements OnDestroy { // Refresh subject, to be sure this.entries$.next([...this.entries$.value]); }).catch(err => { - entry.executionNumber = ++this.executionCounter; + entry.executionNumber = executionNumber; entry.err = err.message || err; }); } @@ -310,7 +312,7 @@ export class StackFilePage implements OnDestroy { } private parseEntry(node: Element): StackEntry { - const args: {[key: string]: any} = {}; + const args: { [key: string]: any; } = {}; for (let i = 0; i < node.childNodes.length; i++) { const child = node.childNodes[i] as Element; if (child.nodeName === 'commandArgument') { From edc55c1e4a5ab3a9035220048aec850263e4a440 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Wed, 20 Oct 2021 11:43:10 +0200 Subject: [PATCH 13/24] Prepare release yamcs-5.5.4 --- Changelog | 12 ++++++++++-- distribution/pom.xml | 2 +- examples/ccsds-frames/pom.xml | 2 +- examples/cfdp/pom.xml | 2 +- examples/perftest1/pom.xml | 2 +- examples/perftest2/pom.xml | 2 +- examples/pom.xml | 2 +- examples/pus/pom.xml | 2 +- examples/replication1/pom.xml | 2 +- examples/replication2/pom.xml | 2 +- examples/replication3/pom.xml | 2 +- examples/simulation/pom.xml | 2 +- examples/snippets/pom.xml | 2 +- examples/templates/pom.xml | 2 +- packet-viewer/pom.xml | 2 +- pom.xml | 2 +- simulator/pom.xml | 2 +- yamcs-api/pom.xml | 2 +- yamcs-client/pom.xml | 2 +- yamcs-core/pom.xml | 2 +- yamcs-tse/pom.xml | 2 +- yamcs-web/pom.xml | 2 +- yamcs-xtce/pom.xml | 2 +- 23 files changed, 32 insertions(+), 24 deletions(-) diff --git a/Changelog b/Changelog index 6c342163787..41cfb4255e7 100644 --- a/Changelog +++ b/Changelog @@ -1,5 +1,13 @@ -Version 5.5.4 -- fixed the CLTU randomization sequence to conform to CCSDS 231.0 issue 4 when LDPC coding is enabled. +Version 5.5.4 released 20-Oct-2021 +- Fixed the CLTU randomization sequence to conform to CCSDS 231.0 issue 4 when LDPC coding is enabled. +- Accept numeric value of an enumeration command argument +- Fixed lost frame count calculation +- Allow DataSource=ground for parameters +- Fixed CFDP reliable option not showing +- Fixed duplicate data in the parameter archive +- Allow specification of generation time in set parameter value requests +- minor tweaks and fixes + Version 5.5.3 released 30-Jul-2021 - first version of the Yamcs Timeline diff --git a/distribution/pom.xml b/distribution/pom.xml index b5179e08a37..dd9f7a66825 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 distribution diff --git a/examples/ccsds-frames/pom.xml b/examples/ccsds-frames/pom.xml index 0518fd6b0e8..18329936585 100644 --- a/examples/ccsds-frames/pom.xml +++ b/examples/ccsds-frames/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 ccsds-frames diff --git a/examples/cfdp/pom.xml b/examples/cfdp/pom.xml index cdee619cc8a..9d32f7e4f9f 100644 --- a/examples/cfdp/pom.xml +++ b/examples/cfdp/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 cfdp diff --git a/examples/perftest1/pom.xml b/examples/perftest1/pom.xml index cf8f87d19cd..e10bb83873a 100644 --- a/examples/perftest1/pom.xml +++ b/examples/perftest1/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 perftest1 diff --git a/examples/perftest2/pom.xml b/examples/perftest2/pom.xml index d1e84635f95..8a3e454c687 100644 --- a/examples/perftest2/pom.xml +++ b/examples/perftest2/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 perftest2 diff --git a/examples/pom.xml b/examples/pom.xml index 9c28c20dc46..729144dc640 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 org.yamcs.examples diff --git a/examples/pus/pom.xml b/examples/pus/pom.xml index 6e7ea3c042b..0c395c889d0 100644 --- a/examples/pus/pom.xml +++ b/examples/pus/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 pus diff --git a/examples/replication1/pom.xml b/examples/replication1/pom.xml index 788ac0160f5..847bc8b69d7 100644 --- a/examples/replication1/pom.xml +++ b/examples/replication1/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 replication1 diff --git a/examples/replication2/pom.xml b/examples/replication2/pom.xml index 3c87fbc6634..050a5e10908 100644 --- a/examples/replication2/pom.xml +++ b/examples/replication2/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 replication2 diff --git a/examples/replication3/pom.xml b/examples/replication3/pom.xml index 2c80f9e160a..b0fca6896b5 100644 --- a/examples/replication3/pom.xml +++ b/examples/replication3/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 replication3 diff --git a/examples/simulation/pom.xml b/examples/simulation/pom.xml index 96c0c8467b2..f20f5ddb107 100644 --- a/examples/simulation/pom.xml +++ b/examples/simulation/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 simulation diff --git a/examples/snippets/pom.xml b/examples/snippets/pom.xml index aaf194899d7..24ea8df0bfb 100644 --- a/examples/snippets/pom.xml +++ b/examples/snippets/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 snippets diff --git a/examples/templates/pom.xml b/examples/templates/pom.xml index 4390e0af5d2..b4e3e5aef70 100644 --- a/examples/templates/pom.xml +++ b/examples/templates/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4-SNAPSHOT + 5.5.4 templates diff --git a/packet-viewer/pom.xml b/packet-viewer/pom.xml index da6ef8a960a..cd3ad44163f 100644 --- a/packet-viewer/pom.xml +++ b/packet-viewer/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 packet-viewer diff --git a/pom.xml b/pom.xml index cde95a6747e..d30c2d5b217 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 pom diff --git a/simulator/pom.xml b/simulator/pom.xml index ab40ffe2dfc..58d55f2e9dd 100644 --- a/simulator/pom.xml +++ b/simulator/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 simulator diff --git a/yamcs-api/pom.xml b/yamcs-api/pom.xml index 8797f9382cc..14d0d3864ed 100644 --- a/yamcs-api/pom.xml +++ b/yamcs-api/pom.xml @@ -4,7 +4,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 yamcs-api diff --git a/yamcs-client/pom.xml b/yamcs-client/pom.xml index 6de1269f05a..2e8f39f3eea 100644 --- a/yamcs-client/pom.xml +++ b/yamcs-client/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 yamcs-client diff --git a/yamcs-core/pom.xml b/yamcs-core/pom.xml index 655fd9a5939..714cb071926 100644 --- a/yamcs-core/pom.xml +++ b/yamcs-core/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 yamcs-core diff --git a/yamcs-tse/pom.xml b/yamcs-tse/pom.xml index 9e3a1158e57..89c6561c6b9 100644 --- a/yamcs-tse/pom.xml +++ b/yamcs-tse/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 yamcs-tse diff --git a/yamcs-web/pom.xml b/yamcs-web/pom.xml index 497774274ad..be62b59be65 100644 --- a/yamcs-web/pom.xml +++ b/yamcs-web/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 yamcs-web diff --git a/yamcs-xtce/pom.xml b/yamcs-xtce/pom.xml index fbca8379c1f..d576df64eee 100644 --- a/yamcs-xtce/pom.xml +++ b/yamcs-xtce/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.4-SNAPSHOT + 5.5.4 yamcs-xtce From 5b90104ff4a153c71217011abd43f0586652e36d Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Wed, 20 Oct 2021 11:52:07 +0200 Subject: [PATCH 14/24] Prepare next development iteration --- distribution/pom.xml | 2 +- examples/ccsds-frames/pom.xml | 2 +- examples/cfdp/pom.xml | 2 +- examples/perftest1/pom.xml | 2 +- examples/perftest2/pom.xml | 2 +- examples/pom.xml | 2 +- examples/pus/pom.xml | 2 +- examples/replication1/pom.xml | 2 +- examples/replication2/pom.xml | 2 +- examples/replication3/pom.xml | 2 +- examples/simulation/pom.xml | 2 +- examples/snippets/pom.xml | 2 +- examples/templates/pom.xml | 2 +- packet-viewer/pom.xml | 2 +- pom.xml | 2 +- simulator/pom.xml | 2 +- yamcs-api/pom.xml | 2 +- yamcs-client/pom.xml | 2 +- yamcs-core/pom.xml | 2 +- yamcs-tse/pom.xml | 2 +- yamcs-web/pom.xml | 2 +- yamcs-xtce/pom.xml | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/distribution/pom.xml b/distribution/pom.xml index dd9f7a66825..cf2df1b6579 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT distribution diff --git a/examples/ccsds-frames/pom.xml b/examples/ccsds-frames/pom.xml index 18329936585..dcce1b1e2c1 100644 --- a/examples/ccsds-frames/pom.xml +++ b/examples/ccsds-frames/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT ccsds-frames diff --git a/examples/cfdp/pom.xml b/examples/cfdp/pom.xml index 9d32f7e4f9f..42b8eeb693a 100644 --- a/examples/cfdp/pom.xml +++ b/examples/cfdp/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT cfdp diff --git a/examples/perftest1/pom.xml b/examples/perftest1/pom.xml index e10bb83873a..9702e9380c2 100644 --- a/examples/perftest1/pom.xml +++ b/examples/perftest1/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT perftest1 diff --git a/examples/perftest2/pom.xml b/examples/perftest2/pom.xml index 8a3e454c687..65868c186c6 100644 --- a/examples/perftest2/pom.xml +++ b/examples/perftest2/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT perftest2 diff --git a/examples/pom.xml b/examples/pom.xml index 729144dc640..cc1bd91c722 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT org.yamcs.examples diff --git a/examples/pus/pom.xml b/examples/pus/pom.xml index 0c395c889d0..ab5214a076d 100644 --- a/examples/pus/pom.xml +++ b/examples/pus/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT pus diff --git a/examples/replication1/pom.xml b/examples/replication1/pom.xml index 847bc8b69d7..1daced68b9f 100644 --- a/examples/replication1/pom.xml +++ b/examples/replication1/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT replication1 diff --git a/examples/replication2/pom.xml b/examples/replication2/pom.xml index 050a5e10908..f7dc268336c 100644 --- a/examples/replication2/pom.xml +++ b/examples/replication2/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT replication2 diff --git a/examples/replication3/pom.xml b/examples/replication3/pom.xml index b0fca6896b5..ce39cf20017 100644 --- a/examples/replication3/pom.xml +++ b/examples/replication3/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT replication3 diff --git a/examples/simulation/pom.xml b/examples/simulation/pom.xml index f20f5ddb107..32ebacc4fb6 100644 --- a/examples/simulation/pom.xml +++ b/examples/simulation/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT simulation diff --git a/examples/snippets/pom.xml b/examples/snippets/pom.xml index 24ea8df0bfb..b52ba89df68 100644 --- a/examples/snippets/pom.xml +++ b/examples/snippets/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT snippets diff --git a/examples/templates/pom.xml b/examples/templates/pom.xml index b4e3e5aef70..28cbc454271 100644 --- a/examples/templates/pom.xml +++ b/examples/templates/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.4 + 5.5.5-SNAPSHOT templates diff --git a/packet-viewer/pom.xml b/packet-viewer/pom.xml index cd3ad44163f..b631f675ad8 100644 --- a/packet-viewer/pom.xml +++ b/packet-viewer/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT packet-viewer diff --git a/pom.xml b/pom.xml index d30c2d5b217..6f337159306 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT pom diff --git a/simulator/pom.xml b/simulator/pom.xml index 58d55f2e9dd..b702aed275d 100644 --- a/simulator/pom.xml +++ b/simulator/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT simulator diff --git a/yamcs-api/pom.xml b/yamcs-api/pom.xml index 14d0d3864ed..899db8d8e16 100644 --- a/yamcs-api/pom.xml +++ b/yamcs-api/pom.xml @@ -4,7 +4,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT yamcs-api diff --git a/yamcs-client/pom.xml b/yamcs-client/pom.xml index 2e8f39f3eea..77fef9ba954 100644 --- a/yamcs-client/pom.xml +++ b/yamcs-client/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT yamcs-client diff --git a/yamcs-core/pom.xml b/yamcs-core/pom.xml index 714cb071926..3a6647d6aa3 100644 --- a/yamcs-core/pom.xml +++ b/yamcs-core/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT yamcs-core diff --git a/yamcs-tse/pom.xml b/yamcs-tse/pom.xml index 89c6561c6b9..5dad5d3a983 100644 --- a/yamcs-tse/pom.xml +++ b/yamcs-tse/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT yamcs-tse diff --git a/yamcs-web/pom.xml b/yamcs-web/pom.xml index be62b59be65..47d92c894b6 100644 --- a/yamcs-web/pom.xml +++ b/yamcs-web/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT yamcs-web diff --git a/yamcs-xtce/pom.xml b/yamcs-xtce/pom.xml index d576df64eee..9a3aca83037 100644 --- a/yamcs-xtce/pom.xml +++ b/yamcs-xtce/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.4 + 5.5.5-SNAPSHOT yamcs-xtce From b0b9a2c2fb8a50fe8be28ded99eb43ae09153b47 Mon Sep 17 00:00:00 2001 From: Fabian Diet Date: Wed, 20 Oct 2021 14:06:24 +0200 Subject: [PATCH 15/24] Fix args not visible in "Command History" view --- .../app/commanding/command-history/CommandHistoryRecord.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/yamcs-web/src/main/webapp/src/app/commanding/command-history/CommandHistoryRecord.ts b/yamcs-web/src/main/webapp/src/app/commanding/command-history/CommandHistoryRecord.ts index aca647639dd..104163fc521 100644 --- a/yamcs-web/src/main/webapp/src/app/commanding/command-history/CommandHistoryRecord.ts +++ b/yamcs-web/src/main/webapp/src/app/commanding/command-history/CommandHistoryRecord.ts @@ -45,6 +45,13 @@ export class CommandHistoryRecord { this.sequenceNumber = entry.sequenceNumber; this.commandName = entry.commandName; + for (const assignment of (entry.assignments || [])) { + this.assignments.push(assignment); + if (assignment.userInput) { + this.userAssignments.push(assignment); + } + } + for (const attr of entry.attr) { if (attr.name === 'username') { this.username = attr.value.stringValue!; From 16a617c7cf31fe049dfbad54fed857a6cb7fce4c Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Wed, 20 Oct 2021 14:50:23 +0200 Subject: [PATCH 16/24] Prepare release yamcs-5.5.5 --- Changelog | 3 +++ distribution/pom.xml | 2 +- examples/ccsds-frames/pom.xml | 2 +- examples/cfdp/pom.xml | 2 +- examples/perftest1/pom.xml | 2 +- examples/perftest2/pom.xml | 2 +- examples/pom.xml | 2 +- examples/pus/pom.xml | 2 +- examples/replication1/pom.xml | 2 +- examples/replication2/pom.xml | 2 +- examples/replication3/pom.xml | 2 +- examples/simulation/pom.xml | 2 +- examples/simulation/src/main/yamcs/etc/yamcs.yaml | 2 ++ examples/snippets/pom.xml | 2 +- examples/templates/pom.xml | 2 +- packet-viewer/pom.xml | 2 +- pom.xml | 2 +- simulator/pom.xml | 2 +- yamcs-api/pom.xml | 2 +- yamcs-client/pom.xml | 2 +- yamcs-core/pom.xml | 2 +- yamcs-tse/pom.xml | 2 +- yamcs-web/pom.xml | 2 +- yamcs-xtce/pom.xml | 2 +- 24 files changed, 27 insertions(+), 22 deletions(-) diff --git a/Changelog b/Changelog index 41cfb4255e7..031dcb1e1b4 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,6 @@ +Version 5.5.5 released 20-Oct-2021 +- yamcs-web: fixed display of command arguments in the command history + Version 5.5.4 released 20-Oct-2021 - Fixed the CLTU randomization sequence to conform to CCSDS 231.0 issue 4 when LDPC coding is enabled. - Accept numeric value of an enumeration command argument diff --git a/distribution/pom.xml b/distribution/pom.xml index cf2df1b6579..21bce97fd1c 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 distribution diff --git a/examples/ccsds-frames/pom.xml b/examples/ccsds-frames/pom.xml index dcce1b1e2c1..627c14dcc57 100644 --- a/examples/ccsds-frames/pom.xml +++ b/examples/ccsds-frames/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 ccsds-frames diff --git a/examples/cfdp/pom.xml b/examples/cfdp/pom.xml index 42b8eeb693a..6f4f25448cc 100644 --- a/examples/cfdp/pom.xml +++ b/examples/cfdp/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 cfdp diff --git a/examples/perftest1/pom.xml b/examples/perftest1/pom.xml index 9702e9380c2..ebf315ccd56 100644 --- a/examples/perftest1/pom.xml +++ b/examples/perftest1/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 perftest1 diff --git a/examples/perftest2/pom.xml b/examples/perftest2/pom.xml index 65868c186c6..be7a9e7a012 100644 --- a/examples/perftest2/pom.xml +++ b/examples/perftest2/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 perftest2 diff --git a/examples/pom.xml b/examples/pom.xml index cc1bd91c722..2ff725790b1 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 org.yamcs.examples diff --git a/examples/pus/pom.xml b/examples/pus/pom.xml index ab5214a076d..7e222085659 100644 --- a/examples/pus/pom.xml +++ b/examples/pus/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 pus diff --git a/examples/replication1/pom.xml b/examples/replication1/pom.xml index 1daced68b9f..cbacc9e5be6 100644 --- a/examples/replication1/pom.xml +++ b/examples/replication1/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 replication1 diff --git a/examples/replication2/pom.xml b/examples/replication2/pom.xml index f7dc268336c..3bd4d323e66 100644 --- a/examples/replication2/pom.xml +++ b/examples/replication2/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 replication2 diff --git a/examples/replication3/pom.xml b/examples/replication3/pom.xml index ce39cf20017..c25e3f3afba 100644 --- a/examples/replication3/pom.xml +++ b/examples/replication3/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 replication3 diff --git a/examples/simulation/pom.xml b/examples/simulation/pom.xml index 32ebacc4fb6..c69a4b61023 100644 --- a/examples/simulation/pom.xml +++ b/examples/simulation/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 simulation diff --git a/examples/simulation/src/main/yamcs/etc/yamcs.yaml b/examples/simulation/src/main/yamcs/etc/yamcs.yaml index e96d6082f06..cecf37fb814 100644 --- a/examples/simulation/src/main/yamcs/etc/yamcs.yaml +++ b/examples/simulation/src/main/yamcs/etc/yamcs.yaml @@ -1,6 +1,8 @@ # System-wide services services: - class: org.yamcs.http.HttpServer + args: + nThreads: 0 #instances (or domains). One yarch database will be created for each of them # instance specific properties go into the file yamcs.{instance}.yaml diff --git a/examples/snippets/pom.xml b/examples/snippets/pom.xml index b52ba89df68..5c29dd80e00 100644 --- a/examples/snippets/pom.xml +++ b/examples/snippets/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 snippets diff --git a/examples/templates/pom.xml b/examples/templates/pom.xml index 28cbc454271..d57ffa45166 100644 --- a/examples/templates/pom.xml +++ b/examples/templates/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5-SNAPSHOT + 5.5.5 templates diff --git a/packet-viewer/pom.xml b/packet-viewer/pom.xml index b631f675ad8..d2ade69b946 100644 --- a/packet-viewer/pom.xml +++ b/packet-viewer/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 packet-viewer diff --git a/pom.xml b/pom.xml index 6f337159306..3b85ca7dc0e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 pom diff --git a/simulator/pom.xml b/simulator/pom.xml index b702aed275d..0da51355133 100644 --- a/simulator/pom.xml +++ b/simulator/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 simulator diff --git a/yamcs-api/pom.xml b/yamcs-api/pom.xml index 899db8d8e16..200efc3fbd8 100644 --- a/yamcs-api/pom.xml +++ b/yamcs-api/pom.xml @@ -4,7 +4,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 yamcs-api diff --git a/yamcs-client/pom.xml b/yamcs-client/pom.xml index 77fef9ba954..9985d793e6d 100644 --- a/yamcs-client/pom.xml +++ b/yamcs-client/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 yamcs-client diff --git a/yamcs-core/pom.xml b/yamcs-core/pom.xml index 3a6647d6aa3..79fe3ffc5e9 100644 --- a/yamcs-core/pom.xml +++ b/yamcs-core/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 yamcs-core diff --git a/yamcs-tse/pom.xml b/yamcs-tse/pom.xml index 5dad5d3a983..5b0376149df 100644 --- a/yamcs-tse/pom.xml +++ b/yamcs-tse/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 yamcs-tse diff --git a/yamcs-web/pom.xml b/yamcs-web/pom.xml index 47d92c894b6..b55cfb67032 100644 --- a/yamcs-web/pom.xml +++ b/yamcs-web/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 yamcs-web diff --git a/yamcs-xtce/pom.xml b/yamcs-xtce/pom.xml index 9a3aca83037..4468d002cfc 100644 --- a/yamcs-xtce/pom.xml +++ b/yamcs-xtce/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.5-SNAPSHOT + 5.5.5 yamcs-xtce From 33126f63425e94cf8bb0d021bb688d9fb8fc077f Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Mon, 25 Oct 2021 09:37:42 +0200 Subject: [PATCH 17/24] Prepare next development iteration --- distribution/pom.xml | 2 +- examples/ccsds-frames/pom.xml | 2 +- examples/cfdp/pom.xml | 2 +- examples/perftest1/pom.xml | 2 +- examples/perftest2/pom.xml | 2 +- examples/pom.xml | 2 +- examples/pus/pom.xml | 2 +- examples/replication1/pom.xml | 2 +- examples/replication2/pom.xml | 2 +- examples/replication3/pom.xml | 2 +- examples/simulation/pom.xml | 2 +- examples/snippets/pom.xml | 2 +- examples/templates/pom.xml | 2 +- packet-viewer/pom.xml | 2 +- pom.xml | 2 +- simulator/pom.xml | 2 +- yamcs-api/pom.xml | 2 +- yamcs-client/pom.xml | 2 +- yamcs-core/pom.xml | 2 +- yamcs-tse/pom.xml | 2 +- yamcs-web/pom.xml | 2 +- yamcs-xtce/pom.xml | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/distribution/pom.xml b/distribution/pom.xml index 21bce97fd1c..5c5fc4e1e96 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT distribution diff --git a/examples/ccsds-frames/pom.xml b/examples/ccsds-frames/pom.xml index 627c14dcc57..9d85188241d 100644 --- a/examples/ccsds-frames/pom.xml +++ b/examples/ccsds-frames/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT ccsds-frames diff --git a/examples/cfdp/pom.xml b/examples/cfdp/pom.xml index 6f4f25448cc..3bafda17750 100644 --- a/examples/cfdp/pom.xml +++ b/examples/cfdp/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT cfdp diff --git a/examples/perftest1/pom.xml b/examples/perftest1/pom.xml index ebf315ccd56..035ff066079 100644 --- a/examples/perftest1/pom.xml +++ b/examples/perftest1/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT perftest1 diff --git a/examples/perftest2/pom.xml b/examples/perftest2/pom.xml index be7a9e7a012..daa68b1a21f 100644 --- a/examples/perftest2/pom.xml +++ b/examples/perftest2/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT perftest2 diff --git a/examples/pom.xml b/examples/pom.xml index 2ff725790b1..ff0fd5ad4fb 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT org.yamcs.examples diff --git a/examples/pus/pom.xml b/examples/pus/pom.xml index 7e222085659..b079fcc1354 100644 --- a/examples/pus/pom.xml +++ b/examples/pus/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT pus diff --git a/examples/replication1/pom.xml b/examples/replication1/pom.xml index cbacc9e5be6..d4d554900ba 100644 --- a/examples/replication1/pom.xml +++ b/examples/replication1/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT replication1 diff --git a/examples/replication2/pom.xml b/examples/replication2/pom.xml index 3bd4d323e66..3c91baa5776 100644 --- a/examples/replication2/pom.xml +++ b/examples/replication2/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT replication2 diff --git a/examples/replication3/pom.xml b/examples/replication3/pom.xml index c25e3f3afba..a1b5a76b24a 100644 --- a/examples/replication3/pom.xml +++ b/examples/replication3/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT replication3 diff --git a/examples/simulation/pom.xml b/examples/simulation/pom.xml index c69a4b61023..13ace3a2c2b 100644 --- a/examples/simulation/pom.xml +++ b/examples/simulation/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT simulation diff --git a/examples/snippets/pom.xml b/examples/snippets/pom.xml index 5c29dd80e00..885fee341c5 100644 --- a/examples/snippets/pom.xml +++ b/examples/snippets/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT snippets diff --git a/examples/templates/pom.xml b/examples/templates/pom.xml index d57ffa45166..a56a26aa6db 100644 --- a/examples/templates/pom.xml +++ b/examples/templates/pom.xml @@ -5,7 +5,7 @@ org.yamcs.examples examples - 5.5.5 + 5.5.6-SNAPSHOT templates diff --git a/packet-viewer/pom.xml b/packet-viewer/pom.xml index d2ade69b946..e57f13070b5 100644 --- a/packet-viewer/pom.xml +++ b/packet-viewer/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT packet-viewer diff --git a/pom.xml b/pom.xml index 3b85ca7dc0e..28ccbfc378d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT pom diff --git a/simulator/pom.xml b/simulator/pom.xml index 0da51355133..a4ec700acb8 100644 --- a/simulator/pom.xml +++ b/simulator/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT simulator diff --git a/yamcs-api/pom.xml b/yamcs-api/pom.xml index 200efc3fbd8..3e0b40950fd 100644 --- a/yamcs-api/pom.xml +++ b/yamcs-api/pom.xml @@ -4,7 +4,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT yamcs-api diff --git a/yamcs-client/pom.xml b/yamcs-client/pom.xml index 9985d793e6d..f26756b57e3 100644 --- a/yamcs-client/pom.xml +++ b/yamcs-client/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT yamcs-client diff --git a/yamcs-core/pom.xml b/yamcs-core/pom.xml index 79fe3ffc5e9..3a4be7c379b 100644 --- a/yamcs-core/pom.xml +++ b/yamcs-core/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT yamcs-core diff --git a/yamcs-tse/pom.xml b/yamcs-tse/pom.xml index 5b0376149df..9348a5ed5f5 100644 --- a/yamcs-tse/pom.xml +++ b/yamcs-tse/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT yamcs-tse diff --git a/yamcs-web/pom.xml b/yamcs-web/pom.xml index b55cfb67032..11a3bb677c6 100644 --- a/yamcs-web/pom.xml +++ b/yamcs-web/pom.xml @@ -3,7 +3,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT yamcs-web diff --git a/yamcs-xtce/pom.xml b/yamcs-xtce/pom.xml index 4468d002cfc..2250c8478f4 100644 --- a/yamcs-xtce/pom.xml +++ b/yamcs-xtce/pom.xml @@ -5,7 +5,7 @@ org.yamcs yamcs - 5.5.5 + 5.5.6-SNAPSHOT yamcs-xtce From e1ae05ef7be4f53d8bf1133e5c03ba19495ab060 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Thu, 4 Nov 2021 12:42:49 +0100 Subject: [PATCH 18/24] fixed typo --- .../org/yamcs/parameterarchive/MultiParameterRetrieval.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/MultiParameterRetrieval.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/MultiParameterRetrieval.java index 513ea3544bf..264ac6dd9f0 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/MultiParameterRetrieval.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/MultiParameterRetrieval.java @@ -65,7 +65,7 @@ public void retrieve(Consumer consumer) throws RocksDBExce } merger.flush(); } catch (ConsumerAbortException e) { - log.debug("Stoped early due to receiving ConsumerAbortException"); + log.debug("Stopped early due to receiving ConsumerAbortException"); } finally { queue.forEach(it -> it.close()); } From faf43dedd11da710e950bb438335119244f60801 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Sat, 6 Nov 2021 04:24:25 +0100 Subject: [PATCH 19/24] added some logging --- .../parameterarchive/MultiParameterRetrieval.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/MultiParameterRetrieval.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/MultiParameterRetrieval.java index 264ac6dd9f0..a10637438f4 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/MultiParameterRetrieval.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/MultiParameterRetrieval.java @@ -8,8 +8,7 @@ import java.util.function.Consumer; import org.rocksdb.RocksDBException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.yamcs.logging.Log; import org.yamcs.parameter.ParameterValue; import org.yamcs.protobuf.Pvalue.ParameterStatus; import org.yamcs.utils.TimeEncoding; @@ -20,19 +19,23 @@ public class MultiParameterRetrieval { final AggrrayBuilder[] aggarrayBuilders; SegmentEncoderDecoder vsEncoder = new SegmentEncoderDecoder(); - private final Logger log = LoggerFactory.getLogger(MultiParameterRetrieval.class); + private final Log log; public MultiParameterRetrieval(ParameterArchive parchive, MultipleParameterRequest mpvr) { this.parchive = parchive; this.mpvr = mpvr; this.aggarrayBuilders = new AggrrayBuilder[0]; + this.log = new Log(this.getClass(), parchive.getYamcsInstance()); } public void retrieve(Consumer consumer) throws RocksDBException, IOException { + log.trace("Starting a parameter retrieval: {}", mpvr); + ParameterGroupIdDb pgDb = parchive.getParameterGroupIdDb(); PriorityQueue queue = new PriorityQueue<>(new IteratorComparator(mpvr.ascending)); int[] parameterGroupIds = mpvr.parameterGroupIds; + for (int i = 0; i < mpvr.parameterIds.length; i++) { ParameterId paraId = mpvr.parameterIds[i]; @@ -48,8 +51,11 @@ public void retrieve(Consumer consumer) throws RocksDBExce } } } + log.trace("Got {} parallel iterators", queue.size()); + Merger merger = new Merger(mpvr, consumer); + try { while (!queue.isEmpty()) { ParameterIterator it = queue.poll(); @@ -69,6 +75,7 @@ public void retrieve(Consumer consumer) throws RocksDBExce } finally { queue.forEach(it -> it.close()); } + log.trace("Retrieval finished"); } private void queueIterator(PriorityQueue queue, From 4275710ffb4777f88863753cd01dacb16b1a4cde Mon Sep 17 00:00:00 2001 From: Mark Rose Date: Sun, 31 Oct 2021 21:21:42 -0700 Subject: [PATCH 20/24] Fix #628. Fix segment queue and realtime archiver problems Fix segment queue so that the queue is full when there is one slot free, so that the head==tail test is only satisfied when the queue is empty. Fix realtime archiver so that segments are archived as soon as they are either from a prior segment and the current time is past the sorting threshold into the new segment, or they are full and they end prior to the current time minus the sorting threshold. This avoids a problem where segments are never archived, causing the cache to eventually fill up. Added unit tests that fail without the new code changes. --- yamcs-core/pom.xml | 6 + .../RealtimeArchiveFiller.java | 86 ++++- .../RealtimeArchiveFillerTest.java | 315 ++++++++++++++++++ .../parameterarchive/SegmentQueueTest.java | 44 +++ 4 files changed, 435 insertions(+), 16 deletions(-) create mode 100644 yamcs-core/src/test/java/org/yamcs/parameterarchive/RealtimeArchiveFillerTest.java diff --git a/yamcs-core/pom.xml b/yamcs-core/pom.xml index 3a4be7c379b..94aa7370c49 100644 --- a/yamcs-core/pom.xml +++ b/yamcs-core/pom.xml @@ -80,6 +80,12 @@ jython-standalone test + + org.mockito + mockito-core + 4.0.0 + test + diff --git a/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java b/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java index 28d66d11fb1..4481c62d14c 100644 --- a/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java +++ b/yamcs-core/src/main/java/org/yamcs/parameterarchive/RealtimeArchiveFiller.java @@ -59,6 +59,7 @@ public class RealtimeArchiveFiller extends AbstractArchiveFiller { final private Log log; ExecutorService executor; Map queues = new HashMap<>(); + private YamcsServer yamcsServer; // int flushInterval; // seconds @@ -100,10 +101,34 @@ static Spec getSpec() { return spec; } + + /** + * Gets the Yamcs server reference. Code in this class should call this method + * rather than YamcsServer.getServer() so the server can be mocked + * for unit testing. + * + * @return the Yamcs server reference + */ + private synchronized YamcsServer getYamcsServer() { + if (yamcsServer == null) { + yamcsServer = YamcsServer.getServer(); + } + return yamcsServer; + } + + /** + * Sets the Yamcs server to use. Default scope for unit testing. Should only + * be called by unit tests. + * + * @param yamcsServer the Yamcs server to use, perhaps a mock object + */ + synchronized void setYamcsServer(YamcsServer yamcsServer) { + this.yamcsServer = yamcsServer; + } protected void start() { // subscribe to the realtime processor - realtimeProcessor = YamcsServer.getServer().getProcessor(yamcsInstance, processorName); + realtimeProcessor = getYamcsServer().getProcessor(yamcsInstance, processorName); if (realtimeProcessor == null) { throw new ConfigurationException("No processor named '" + processorName + "' in instance " + yamcsInstance); } @@ -129,7 +154,7 @@ public void shutDown() throws InterruptedException { } executor.shutdown(); if (!executor.awaitTermination(30, TimeUnit.SECONDS)) { - log.warn("Timedout before flusing all pending segments"); + log.warn("Timed out before flushing all pending segments"); } } @@ -154,14 +179,14 @@ protected void processParameters(long t, BasicParameterList pvList) { "Time jumped in the past; current timestamp: {}, new timestamp: {}. Flushing old data.", TimeEncoding.toString(segStart), TimeEncoding.toString(t)); segQueue.flush(pgs -> scheduleWriteToArchive(pgs)); - } else if (t < segQueue.getStart() - sortingThreshold) { + } else if (t < segStart - sortingThreshold) { log.warn("Dropping old data with timestamp {} (minimum allowed is {})." + "Unsorted data received in the realtime filler? Consider using a backfiller instead", TimeEncoding.toString(t), TimeEncoding.toString(segStart - sortingThreshold)); return; } else { - segQueue.sendToArchive(segStart - sortingThreshold, pgs -> scheduleWriteToArchive(pgs)); + segQueue.sendToArchive(t - sortingThreshold, pgs -> scheduleWriteToArchive(pgs)); } } @@ -272,13 +297,23 @@ public long getStart() { return segments[head].getSegmentStart(); } + /** + * Add the record to the queue. + *

+ * Given the queue state s1, s2, s3... sn, it is inserted into the sk such that the + * t is in the same interval as sk and either sk is not full, or t + * If not such a segment exists, a new segment is created and inserted in the queue (if the queue is not full). + *

+ * Returns true if the record has been added or false if the queue was full. + */ public synchronized boolean addRecord(long t, List values) { boolean added = false; int k = head; long tintv = getInterval(t); - for (; k != tail; k = (k + 1) & MASK) { + for (; k != tail; k = inc(k)) { PGSegment seg = segments[k]; long kintv = seg.getInterval(); if (kintv < tintv) { @@ -298,7 +333,10 @@ public synchronized boolean addRecord(long t, List values) } if (!added) {// new segment to be added on position k - if (segments[tail] != null) { + // If there is only one slot free, then the queue is already full. + // if segments[tail] is not null, it means it hasn't been written to the archive yet (async operation), + // we do not want to overwrite it because it won't be found in the retrieval + if (inc(tail) == head || segments[tail] != null) { return false; } @@ -306,10 +344,10 @@ public synchronized boolean addRecord(long t, List values) seg.addRecord(t, values); // shift everything between k and tail to the right - for (int i = k; i < tail; i = (i + 1) & MASK) { - segments[(i + 1) & MASK] = segments[i]; + for (int i = k; i != tail; i = inc(i)) { + segments[inc(i)] = segments[i]; } - tail = (tail + 1) & MASK; + tail = inc(tail); // insert on position k segments[k] = seg; @@ -318,6 +356,8 @@ public synchronized boolean addRecord(long t, List values) return true; } + + /** * send to archive all segments which are either from an older interval than t1 or are full and their end is * smaller than t1. @@ -335,7 +375,7 @@ void sendToArchive(long t1, Function> f) { break; } int _head = head; - head = (head + 1) & MASK; + head = inc(head); toArchive(_head, f); } } @@ -343,7 +383,7 @@ void sendToArchive(long t1, Function> f) { synchronized void flush(Function> f) { while (head != tail) { toArchive(head, f); - head = (head + 1) & MASK; + head = inc(head); } } @@ -387,8 +427,8 @@ private List getSegmentsAscending(int pid) { List r = new ArrayList<>(); int k = head; - while (k != tail && segments[(k - 1) & MASK] != null) { - k = (k - 1) & MASK; + while (k != tail && segments[dec(k)] != null) { + k = dec(k); } while (k != tail) { @@ -401,7 +441,7 @@ private List getSegmentsAscending(int pid) { if (pvs != null) { r.add(pvs); } - k = (k + 1) & MASK; + k = inc(k); } return r; @@ -410,7 +450,7 @@ private List getSegmentsAscending(int pid) { private List getSegmentsDescending(int pid) { List r = new ArrayList<>(); - int k = (tail - 1) & MASK; + int k = dec(tail); while (true) { PGSegment seg = segments[k]; @@ -421,10 +461,24 @@ private List getSegmentsDescending(int pid) { if (pvs != null) { r.add(pvs); } - k = (k - 1) & MASK; + k = dec(k); } return r; } + + /** + * Circularly increment k + */ + static final int inc(int k) { + return (k + 1) & MASK; + } + + /** + * Circularly decrement k + */ + static final int dec(int k) { + return (k - 1) & MASK; + } } } diff --git a/yamcs-core/src/test/java/org/yamcs/parameterarchive/RealtimeArchiveFillerTest.java b/yamcs-core/src/test/java/org/yamcs/parameterarchive/RealtimeArchiveFillerTest.java new file mode 100644 index 00000000000..770cc4f37bf --- /dev/null +++ b/yamcs-core/src/test/java/org/yamcs/parameterarchive/RealtimeArchiveFillerTest.java @@ -0,0 +1,315 @@ +package org.yamcs.parameterarchive; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.TimeUnit; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.rocksdb.RocksDBException; +import org.yamcs.ConfigurationException; +import org.yamcs.Processor; +import org.yamcs.YConfiguration; +import org.yamcs.YamcsServer; +import org.yamcs.parameter.BasicParameterValue; +import org.yamcs.parameter.ParameterRequestManager; +import org.yamcs.parameter.ParameterValue; +import org.yamcs.parameterarchive.RealtimeArchiveFiller.SegmentQueue; +import org.yamcs.protobuf.Pvalue.AcquisitionStatus; +import org.yamcs.utils.TimeEncoding; +import org.yamcs.utils.ValueUtility; +import org.yaml.snakeyaml.Yaml; + +/** + * Implements unit tests for {@link RealtimeArchiveFiller}. + */ +public class RealtimeArchiveFillerTest { + + /** The size of an interval, in milliseconds. (2^23 seconds) */ + private static final long INTERVAL_SIZE_MILLIS = 8388608000L; + + /** The amount of a backward time jump that will trigger a cache flush. */ + private static final long PAST_JUMP_THRESHOLD_SECS = 86400; + private static final long PAST_JUMP_THRESHOLD_MILLIS = PAST_JUMP_THRESHOLD_SECS * 1000; + + /** The Yamcs instant at the start of 2021. */ + private static final long YEAR_2021_START_INSTANT = 1609472533000L; + + @Mock + private ParameterArchive parameterArchive; + + @Mock + private ParameterIdDb parameterIdDb; + + @Mock + private ParameterGroupIdDb parameterGroupIdDb; + + @Mock + private YamcsServer yamcsServer; + + @Mock + private Processor processor; + + @Mock + private ParameterRequestManager parameterRequestManager; + + @Before + public void setup() { + MockitoAnnotations.openMocks(this); + when(processor.getParameterRequestManager()).thenReturn(parameterRequestManager); + when(parameterArchive.getYamcsInstance()).thenReturn("realtime"); + when(parameterArchive.getParameterIdDb()).thenReturn(parameterIdDb); + when(parameterArchive.getParameterGroupIdDb()).thenReturn(parameterGroupIdDb); + + // TimeEncoding is used when logging messages by RealtimeArchiveFiller. + TimeEncoding.setUp(); + } + + /** + * Tests that when there are no parameter values added to the archiver + * that no segments are written. + * + * @throws InterruptedException if the archiver is interrupted during shutdown + * @throws RocksDBException if there is an error writing to RocksDB + * @throws IOException if there is an I/O error writing segments + */ + @Test + public void testNoParametersToArchive() throws InterruptedException, RocksDBException, IOException { + when(yamcsServer.getProcessor(anyString(), anyString())).thenReturn(processor); + RealtimeArchiveFiller filler = getFiller(1000); + filler.start(); + filler.shutDown(); + verify(parameterArchive, never()).writeToArchive(any(PGSegment.class)); + } + + /** + * Tests that when no processor is configured the archiver fails to start. + */ + @Test(expected = ConfigurationException.class) + public void testNoProcessor() { + RealtimeArchiveFiller filler = getFiller(1000); + filler.start(); + } + + /** + * Tests that all segments are flushed when the archiver is shut down. In this + * case there is a single value archived, which should be in one segment. + * + * @throws InterruptedException if the archiver is interrupted during shutdown + * @throws RocksDBException if there is an error writing to RocksDB + * @throws IOException if there is an I/O error writing segments + */ + @Test + public void testFlushOnShutdown() throws InterruptedException, RocksDBException, IOException { + when(yamcsServer.getProcessor(anyString(), anyString())).thenReturn(processor); + RealtimeArchiveFiller filler = getFiller(1000); + filler.start(); + List values = getValues(0, 0, "/myproject/value"); + filler.processParameters(values); + filler.shutDown(); + + verify(parameterArchive, times(1)).writeToArchive(any(PGSegment.class)); + } + + /** + * Tests that a new value added older than the pastJumpThreshold + * causes a complete cache flush before adding the value. + * + * @throws InterruptedException if the executor is interrupted while shutting down + * @throws IOException if there is an error writing to the archive + * @throws RocksDBException if there is an error writing to the database + */ + @Test + public void testFlushBeforeVeryOldValues() throws InterruptedException, RocksDBException, IOException { + when(yamcsServer.getProcessor(anyString(), anyString())).thenReturn(processor); + RealtimeArchiveFiller filler = getFiller(1000); + filler.start(); + List values = getValues(YEAR_2021_START_INSTANT + PAST_JUMP_THRESHOLD_MILLIS + 1, + YEAR_2021_START_INSTANT + PAST_JUMP_THRESHOLD_MILLIS + 1, "/myproject/value"); + filler.processParameters(values); + + values = getValues(YEAR_2021_START_INSTANT, YEAR_2021_START_INSTANT, "/myproject/value"); + filler.processParameters(values); + + // Shut down the executor to make sure the write of the first segment completes. + filler.executor.shutdown(); + filler.executor.awaitTermination(10, TimeUnit.SECONDS); + verify(parameterArchive, times(1)).writeToArchive(any(PGSegment.class)); + + // And the archiver should now have one segment for the old data. + assertEquals(1, filler.getSegments(0, 0, false).size()); + } + + /** + * Tests that values older than the sorting threshold are not added. + * + * @throws InterruptedException if the executor is interrupted while shutting down + * @throws IOException if there is an error writing to the archive + * @throws RocksDBException if there is an error writing to the database + */ + @Test + public void testIgnoreOldValues() throws InterruptedException, RocksDBException, IOException { + when(yamcsServer.getProcessor(anyString(), anyString())).thenReturn(processor); + RealtimeArchiveFiller filler = getFiller(1000); + filler.start(); + List values = getValues(5000, 5000, "/myproject/value"); + filler.processParameters(values); + + // Add a value that is older than the last time minues the sorting threshold. + values = getValues(3000, 3000, "/myproject/value"); + filler.processParameters(values); + + // Shut down and capture the segment that was written. + filler.shutDown(); + ArgumentCaptor segCaptor = ArgumentCaptor.forClass(PGSegment.class); + verify(parameterArchive).writeToArchive(segCaptor.capture()); + + PGSegment seg = segCaptor.getValue(); + assertEquals(5000, seg.getSegmentStart()); + assertEquals(5000, seg.getSegmentEnd()); + } + + /** + * Tests that when adding a new value, if there is a segment from a prior interval + * that ends before the new time minus the sorting threshold, that the old segment + * is archived. + * + * @throws InterruptedException if the executor is interrupted while shutting down + * @throws IOException if there is an error writing to the archive + * @throws RocksDBException if there is an error writing to the database + */ + @Test + public void testPriorIntervalSegmentIsArchived() throws InterruptedException, RocksDBException, IOException { + when(yamcsServer.getProcessor(anyString(), anyString())).thenReturn(processor); + RealtimeArchiveFiller filler = getFiller(1000); + filler.start(); + List values = getValues(INTERVAL_SIZE_MILLIS+1, INTERVAL_SIZE_MILLIS+1, "/myproject/value"); + filler.processParameters(values); + + // Add a value that is older than the last time minues the sorting threshold. + values = getValues(3000, 3000, "/myproject/value"); + filler.processParameters(values); + + // Shut down the executor to make sure the write of the first segment completes. + filler.executor.shutdown(); + filler.executor.awaitTermination(10, TimeUnit.SECONDS); + verify(parameterArchive, times(1)).writeToArchive(any(PGSegment.class)); + + // And the archiver should now have one segment for the old data. + assertEquals(1, filler.getSegments(0, 0, false).size()); + } + + /** + * Tests that when adding a new value, a prior segment that ends before the + * current time minus the sorting threshold is archived. + * + * @throws InterruptedException if the executor is interrupted while shutting down + * @throws IOException if there is an error writing to the archive + * @throws RocksDBException if there is an error writing to the database + */ + @Test + public void testFullIntervalOutsideSortingThresholdIsArchived() throws InterruptedException, RocksDBException, IOException { + when(parameterArchive.getMaxSegmentSize()).thenReturn(2); + when(yamcsServer.getProcessor(anyString(), anyString())).thenReturn(processor); + RealtimeArchiveFiller filler = getFiller(1000); + filler.start(); + + // Add two values to fill up a segment. + List values = getValues(0, 0, "/myproject/value"); + filler.processParameters(values); + values = getValues(1, 1, "/myproject/value"); + filler.processParameters(values); + + // Add a new value after the sorting threshold has elapsed. + values = getValues(1002, 1002, "/myproject/value"); + filler.processParameters(values); + + // Shut down the executor to make sure the write of the first segment completes. + filler.executor.shutdown(); + filler.executor.awaitTermination(10, TimeUnit.SECONDS); + verify(parameterArchive, times(1)).writeToArchive(any(PGSegment.class)); + + // And the archiver should now have one segment for the old data. + assertEquals(1, filler.getSegments(0, 0, false).size()); + } + + /** + * Tests that when the cache is full, a new value cannot be added, but that + * all segments are flushed when the archive is shut down. + * + * @throws InterruptedException if the executor is interrupted while shutting down + * @throws IOException if there is an error writing to the archive + * @throws RocksDBException if there is an error writing to the database + */ + @Test + public void testAddWhenCacheIsFull() throws InterruptedException, RocksDBException, IOException { + when(parameterArchive.getMaxSegmentSize()).thenReturn(2); + when(yamcsServer.getProcessor(anyString(), anyString())).thenReturn(processor); + RealtimeArchiveFiller filler = getFiller(1000); + filler.start(); + + for (int i=0; i < SegmentQueue.QSIZE - 1; ++i) { + // Add two values to fill a segment. + List values = getValues(2*i, 2*i, "/myproject/value"); + filler.processParameters(values); + values = getValues(2*i + 1, 2*i + 1, "/myproject/value"); + filler.processParameters(values); + } + + // The queue should now be full. Adding another value should fail. + assertEquals(SegmentQueue.QSIZE - 1, filler.getSegments(0, 0, false).size()); + List values = getValues(2*SegmentQueue.QSIZE, 2*SegmentQueue.QSIZE, + "/myproject/value"); + filler.processParameters(values); + assertEquals(SegmentQueue.QSIZE - 1, filler.getSegments(0, 0, false).size()); + + // Shut down and make sure all segments are flushed. + filler.shutDown(); + verify(parameterArchive, times(SegmentQueue.QSIZE - 1)).writeToArchive(any(PGSegment.class)); + } + + private RealtimeArchiveFiller getFiller(long sortingThreshold) { + String configStr = String.format( + "sortingThreshold: %d\n" + + "pastJumpThreshold: %d\n", + sortingThreshold, PAST_JUMP_THRESHOLD_SECS); + YConfiguration config = YConfiguration.wrap(new Yaml().load(configStr)); + RealtimeArchiveFiller filler = new RealtimeArchiveFiller(parameterArchive, config); + filler.setYamcsServer(yamcsServer); + return filler; + } + + private List getValues(long genTime, long acqTime, String... names) { + List values = new ArrayList<>(); + for (String name : names) { + ParameterValue value = new ParameterValue(name); + value.setGenerationTime(genTime); + value.setAcquisitionTime(acqTime); + value.setAcquisitionStatus(AcquisitionStatus.ACQUIRED); + value.setRawSignedInteger(123); + value.setEngValue(value.getRawValue()); + values.add(value); + } + return values; + } + + List getParaList(long time) { + ParameterValue pv = new ParameterValue("test1"); + pv.setEngValue(ValueUtility.getUint64Value(time)); + pv.setGenerationTime(time); + return Arrays.asList(pv); + } + +} diff --git a/yamcs-core/src/test/java/org/yamcs/parameterarchive/SegmentQueueTest.java b/yamcs-core/src/test/java/org/yamcs/parameterarchive/SegmentQueueTest.java index 0df79761167..e8e14ca2e06 100644 --- a/yamcs-core/src/test/java/org/yamcs/parameterarchive/SegmentQueueTest.java +++ b/yamcs-core/src/test/java/org/yamcs/parameterarchive/SegmentQueueTest.java @@ -13,6 +13,10 @@ import org.yamcs.utils.ValueUtility; public class SegmentQueueTest { + + /** The size of an interval, in milliseconds. (2^23 seconds) */ + private static final long INTERVAL_SIZE_MILLIS = 8388608000L; + @Test public void test1() { @@ -63,6 +67,46 @@ public void testAcrossIntervals() { testEquals(pvsegList, Arrays.asList(Arrays.asList(t1 - 1, t1), Arrays.asList(t1 + 1, t1 + 2))); } + + /** + * Tests that with an empty queue no segments are returned. + */ + @Test + public void testEmptyQueue() { + SegmentQueue sq = new SegmentQueue(1, IntArray.wrap(1), 2); + assertTrue(sq.isEmpty()); + assertEquals(0, sq.getPVSegments(1, false).size()); + assertEquals(0, sq.getPVSegments(1, true).size()); + } + + /** + * Tests that the queue is full when one slot is still open, so that head!=tail. + */ + @Test + public void testQueueCapacity() { + SegmentQueue sq = new SegmentQueue(1, IntArray.wrap(1), 2); + + // Add one value in each separate interval, until the cache has only one + // slot free. + for (int i=0; i < SegmentQueue.QSIZE - 1; ++i) { + List plist = getParaList(i * INTERVAL_SIZE_MILLIS); + assertTrue(sq.addRecord(i * INTERVAL_SIZE_MILLIS, plist)); + assertEquals(i+1, sq.size()); + assertEquals(i+1, sq.getPVSegments(1, false).size()); + assertEquals(i+1, sq.getPVSegments(1, true).size()); + } + + // Inserting another value in a new interval should fail, since then the queue would + // be full, with head==tail, which looks the same as an empty queue. + assertEquals(sq.size(), SegmentQueue.QSIZE - 1); + List plist = getParaList(SegmentQueue.QSIZE * INTERVAL_SIZE_MILLIS); + assertFalse(sq.addRecord(SegmentQueue.QSIZE * INTERVAL_SIZE_MILLIS, plist)); + assertFalse(sq.isEmpty()); + + // We should be able to retrieve all segments in the queue. + assertEquals(SegmentQueue.QSIZE-1, sq.getPVSegments(1, false).size()); + assertEquals(SegmentQueue.QSIZE-1, sq.getPVSegments(1, true).size()); + } private void testEquals(List pvsegList, List> l) { assertEquals(l.size(), pvsegList.size()); From 4ce8672380c47e3ea396f9eeb84f1a282ddd723a Mon Sep 17 00:00:00 2001 From: Fabian Diet Date: Sat, 6 Nov 2021 13:56:47 +0100 Subject: [PATCH 21/24] Move dependency version to root pom --- pom.xml | 5 +++++ yamcs-core/pom.xml | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 28ccbfc378d..c2860c63bc8 100644 --- a/pom.xml +++ b/pom.xml @@ -160,6 +160,11 @@ janino 2.7.6 + + org.mockito + mockito-core + 4.0.0 + org.python jython-standalone diff --git a/yamcs-core/pom.xml b/yamcs-core/pom.xml index 94aa7370c49..d6972f8c572 100644 --- a/yamcs-core/pom.xml +++ b/yamcs-core/pom.xml @@ -83,7 +83,6 @@ org.mockito mockito-core - 4.0.0 test From f68ec0ef23860d47a97711ea9e49b63e268613d4 Mon Sep 17 00:00:00 2001 From: Fabian Diet Date: Sat, 6 Nov 2021 13:57:19 +0100 Subject: [PATCH 22/24] Fix Sphinx 3 incompatibility with recent docutils --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 3a094a12be0..275a55437ec 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ -Sphinx==3.0.3 +Sphinx sphinxcontrib-fulltoc protobuf pyyaml From 4082ce0c561bec126458b1121213d8194e7d9b35 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Thu, 11 Nov 2021 05:23:07 +0100 Subject: [PATCH 23/24] Spreadsheet MDB improvements Allow absolute positions for parameters in the container sheet --- yamcs-core/mdb/refmdb.xls | Bin 187904 -> 188416 bytes .../java/org/yamcs/xtce/xlsv7/V7Loader.java | 25 +++++++++++------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/yamcs-core/mdb/refmdb.xls b/yamcs-core/mdb/refmdb.xls index d500dca53b2fac564355ea942cc77777cf0eea47..09880b652cf1fa5f5a884345198235a7e223e735 100644 GIT binary patch delta 32201 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

-!Pl}+(=N5vCp@hQ#JYxYrd`%B z&a}�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 N{c8MQAGpnv{tr)#g{A-i delta 32485 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 diff --git a/yamcs-core/src/main/java/org/yamcs/xtce/xlsv7/V7Loader.java b/yamcs-core/src/main/java/org/yamcs/xtce/xlsv7/V7Loader.java index ea8ecc4aa4a..c41d2f6bb14 100644 --- a/yamcs-core/src/main/java/org/yamcs/xtce/xlsv7/V7Loader.java +++ b/yamcs-core/src/main/java/org/yamcs/xtce/xlsv7/V7Loader.java @@ -1275,22 +1275,27 @@ protected void loadContainersSheet(SpaceSystem spaceSystem, String sheetName) { private int addEntry(SequenceContainer container, int absoluteoffset, int counter, Cell[] cells) { String paraname = getContent(cells, CN_CONT_ENTRY); - int relpos = 0; + Position rapos = Position.RELATIVE_ZERO; if (hasColumn(cells, CN_CONT_RELPOS)) { - relpos = Integer.decode(getContent(cells, CN_CONT_RELPOS)); + rapos = getPosition(ctx, getContent(cells, CN_CMD_POSITION)); } int pos; ReferenceLocationType location; - // absoluteOffset = -1 means we have to add relative entries. - // We prefer absolute if possible because we can process them without processing the previous ones - if (absoluteoffset != -1) { - absoluteoffset += relpos; - pos = absoluteoffset; - location = ReferenceLocationType.CONTAINER_START; + if (rapos.relative) { + // absoluteOffset = -1 means we have to add relative entries. + // We prefer absolute if possible because we can process them without processing the previous ones + if (absoluteoffset != -1) { + absoluteoffset += rapos.pos; + pos = absoluteoffset; + location = ReferenceLocationType.CONTAINER_START; + } else { + pos = rapos.pos; + location = ReferenceLocationType.PREVIOUS_ENTRY; + } } else { - pos = relpos; - location = ReferenceLocationType.PREVIOUS_ENTRY; + pos = rapos.pos; + location = ReferenceLocationType.CONTAINER_START; } // the repeat string will contain the number of times a measurement (or container) should be // repeated. It is a String because at this point it can be either a number or a reference to another From f83cebff023384cf9c2dbddc07dcb62fec251d45 Mon Sep 17 00:00:00 2001 From: Mathew Benson Date: Tue, 25 Jan 2022 14:31:09 -0600 Subject: [PATCH 24/24] Added the checkSequence argument to CfsPacketPreprocessor --- .../main/java/org/yamcs/tctm/cfs/CfsPacketPreprocessor.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/yamcs-core/src/main/java/org/yamcs/tctm/cfs/CfsPacketPreprocessor.java b/yamcs-core/src/main/java/org/yamcs/tctm/cfs/CfsPacketPreprocessor.java index 481e4aa323a..9f9862422b6 100644 --- a/yamcs-core/src/main/java/org/yamcs/tctm/cfs/CfsPacketPreprocessor.java +++ b/yamcs-core/src/main/java/org/yamcs/tctm/cfs/CfsPacketPreprocessor.java @@ -58,6 +58,8 @@ * */ public class CfsPacketPreprocessor extends AbstractPacketPreprocessor { + protected static final String CONFIG_KEY_CHECK_SEQUENCE = "checkSequence"; + private Map seqCounts = new HashMap<>(); static final int MINIMUM_LENGTH = 12; private boolean checkForSequenceDiscontinuity = true; @@ -71,6 +73,8 @@ public CfsPacketPreprocessor(String yamcsInstance, YConfiguration config) { if (!config.containsKey(CONFIG_KEY_TIME_ENCODING)) { this.timeEpoch = TimeEpochs.GPS; } + + this.checkForSequenceDiscontinuity = config.getBoolean(CONFIG_KEY_CHECK_SEQUENCE, true); } @Override