From b70d47474697cdea57530318621e565ea99acd71 Mon Sep 17 00:00:00 2001 From: fritzSF Date: Fri, 3 Nov 2023 17:59:06 +0100 Subject: [PATCH 01/22] [STTNHUB-290] HTML & CSS for the multi-day events display in the list view (#655) * [NHUB-351], Advanced search changes and Modal improvements * fix lint * fix lint 2 * small fix * css fix * theme update * CSS fixes and improvements * theme and logo handling improvements * Theme CSS updates and Fixes * UI fixes based on feedback * Misc UI fixes * New Coverage icons * logo.html update * Various layout improvements * [CPCN-329] Broken design of Request more seats and Download dialog * [NHUB-394], [CPCN-293], [NHUB-402] * NHUB-410 * [NHUB-421] Optimize list items for larger screen sizes * [NHUB-412] Introduce a Planning item icon in the NH Agenda list views * Quick filters improvements * lint fix * Changed wording for Quick filter reset * Mobile layout improvements * small CSS fix * Small theme updates & fixes * CSS error fix * [NHUB-434] Improve the display of Wire list items with images on Mobile phones * [STTNHUB-290] HTML & CSS for the multi-day events display in the list view --- assets/styles/article-list.scss | 159 ++++++++++++++++++++++++++++ assets/styles/custom-variables.scss | 7 +- design_app/src/pages/Wire.jsx | 150 +++++++++++++++++++++++++- 3 files changed, 310 insertions(+), 6 deletions(-) diff --git a/assets/styles/article-list.scss b/assets/styles/article-list.scss index 371260ead..edff4e377 100644 --- a/assets/styles/article-list.scss +++ b/assets/styles/article-list.scss @@ -821,3 +821,162 @@ a.wire-articles__versions { } } } + +.list-group-header { + display: flex; + flex-grow: 1; + flex-direction: row; + align-items: center; + justify-content: flex-start; + background-color: var(--content-list-item-color-bg); + border-radius: var(--content-list-item-border-radius); + //box-shadow: var(--card-item-shadow); + padding: var(--space--1) var(--space--1-5) var(--space--1) var(--space--1-5); + border: 1px solid var(--color-line--x-light); + margin-inline-end: var(--space--2); + margin-inline-start: var(--space--2); + transition: all .2s ease-out; + min-height: 40px; + gap: var(--space--1); +} + +.list-group-header__title { + font-size: var(--text-size--medium); + color: var(--color-text--muted); + font-weight: 600; + display: flex; + align-items: center; + gap: var(--space--1); + .list-group-header__title-info { + font-weight: 400; + } +} + +.list-group-header__coverage-group { + display: flex; + align-items: center; + gap: var(--space--1); + padding-inline-end: var(--space--1); + border-inline-end: 1px dotted var(--color-line--medium); + margin-inline-start: var(--space--0-5); +} +.list-group-header__coverage-item { + display: flex; + align-items: center; + gap: var(--space--1); + padding-inline-start: var(--space--1); + border-inline-start: 1px dotted var(--color-line--medium); + .list-group-header__coverage-number { + display: inline-flex; + font-size: var(--text-size--medium); + font-weight: 600; + gap: 2px; + &::before, + &::after { + font-weight: 300; + color: var(--color-text--muted); + } + &::before { + content: '('; + } + &::after { + content: ')'; + } + } +} + +.multiday-label { + --colored-border-width: 10px; + --multiday-label-height: 20px; + display: inline-flex; + align-items: center; + background-color: var(--multiday-label-color-bg); + color: var(--multiday-label-color-fg); + font-size: var(--multiday-label-font-size); + position: relative; + line-height: 1; + height: var(--multiday-label-height); + text-transform: uppercase; + //border-radius: var(--border-radius--xs); + padding-inline: var(--space--1); + white-space: nowrap; + gap: var(--space--0-5); + .multiday-label__label { + font-weight: 300; + letter-spacing: 0.1em; + } + .multiday-label__value { + font-weight: 600; + display: inline-flex; + align-items: center; + gap: 2px; + .multiday-label__value-divide { + font-weight: 400; + } + } + &.multiday-label--end { + border-radius: 0 var(--border-radius--xs) var(--border-radius--xs) 0; + padding-inline-start: var(--space--0-5); + margin-inline-start: var(--colored-border-width); + &:before { + content:""; + position: absolute; + inset-inline-end: 100%; + inset-block-start: 0px; + width: 0px; + height: 0px; + border-block-start: calc(var(--multiday-label-height) / 2) solid transparent; + border-inline-end: var(--colored-border-width) solid var(--multiday-label-color-bg); + border-block-end: calc(var(--multiday-label-height) / 2) solid transparent; + } + } + &.multiday-label--start { + border-radius: var(--border-radius--xs) 0 0 var(--border-radius--xs); + padding-inline-end: var(--space--0-5); + margin-inline-end: var(--colored-border-width); + &:after { + z-index: 2; + content:""; + position: absolute; + inset-inline-start: 100%; + inset-block-start: 0px; + width: 0px; + height: 0px; + border-block-start: calc(var(--multiday-label-height) / 2) solid transparent; + border-inline-start: var(--colored-border-width) solid var(--multiday-label-color-bg); + border-block-end: calc(var(--multiday-label-height) / 2) solid transparent; + } + } + &.multiday-label--mid { + border-radius: 0; + padding-inline: var(--space--0-5); + margin-inline: var(--colored-border-width); + &:before { + content:""; + position: absolute; + inset-inline-end: 100%; + inset-block-start: 0px; + width: 0px; + height: 0px; + border-block-start: calc(var(--multiday-label-height) / 2) solid transparent; + border-inline-end: var(--colored-border-width) solid var(--multiday-label-color-bg); + border-block-end: calc(var(--multiday-label-height) / 2) solid transparent; + } + &:after { + z-index: 2; + content:""; + position: absolute; + inset-inline-start: 100%; + inset-block-start: 0px; + width: 0px; + height: 0px; + border-block-start: calc(var(--multiday-label-height) / 2) solid transparent; + border-inline-start: var(--colored-border-width) solid var(--multiday-label-color-bg); + border-block-end: calc(var(--multiday-label-height) / 2) solid transparent; + } + } +} + +.list-group-header__actions { + margin-inline-start: auto; +} \ No newline at end of file diff --git a/assets/styles/custom-variables.scss b/assets/styles/custom-variables.scss index 04bf8c1b5..9267514be 100644 --- a/assets/styles/custom-variables.scss +++ b/assets/styles/custom-variables.scss @@ -644,13 +644,16 @@ $container-max-widths: ( // COMPONENT: SEARCH RESULT PANEL (Tags list) --search-result-tags-list-color-bg: var(--color-background--muted-2); - --search-result-tags-list-shadow-inner: inset 0 1px 2px hsla(0, 0%, 0%, 0.06), inset 0 -1px 2px hsla(0, 0%, 0%, 0.04) + --search-result-tags-list-shadow-inner: inset 0 1px 2px hsla(0, 0%, 0%, 0.06), inset 0 -1px 2px hsla(0, 0%, 0%, 0.04); + // COMPONENT: MULTI-DAY LABEL + --multiday-label-color-bg: hsl(89, 66%, 30%); + --multiday-label-color-fg: hsl(0, 0%, 100%); + --multiday-label-font-size: var(--text-size--small); } .line-shadow-end--light { box-shadow: var(--line-shadow-end--light); - box-shadow: inset ; } .btn { diff --git a/design_app/src/pages/Wire.jsx b/design_app/src/pages/Wire.jsx index 0159883d0..62879b295 100644 --- a/design_app/src/pages/Wire.jsx +++ b/design_app/src/pages/Wire.jsx @@ -674,7 +674,7 @@ function Wire() {
Correct me later on and see what fields appear
-
+
@@ -685,7 +685,6 @@ function Wire() {
Correctme - The Canadian Press @@ -738,7 +737,7 @@ function Wire() {
Maecenas faucibus mollis interdum natoque penatibus
-
+
@@ -749,7 +748,6 @@ function Wire() {
Correctme - The Canadian Press @@ -791,6 +789,83 @@ function Wire() { {/* AGENDA Item for testing */} +
+ 2 +
+ More hidden + (1 Event & Planning) +
+
+
+ + 1 +
+
+ + 2 +
+
+
+ +
+
+ +
+
+
+

+
+ +
+
Agenda item for testing, isco spice up last day of transfers in Germany
+

+
+
+ +
+
+ 20/06/2023 to 23/06/2023 + + + Day: + + 1 + / + 4 + + + + +
+
+ + + + {/* */} + + + +
+
+ + Messezentrum Salzburg GmbH, Am Messezentrum 1, Salzburg, Austria +
+
+
+

DÜSSELDORF, Germany (AP) — Portugal left back João Cancelo’s switch to Bayern Munich and former Real Madrid star Isco Alarcón's potential signing by Union Berlin brought excitement to the last day of the winter transfer period in Germany. After seeing...

+
+
+
+
+ +
+ + +
+
+
@@ -808,6 +883,73 @@ function Wire() {
20/06/2023 to 23/06/2023 + + + Day: + + 2 + / + 4 + + + + +
+
+ + + + {/* */} + + + +
+
+ + Messezentrum Salzburg GmbH, Am Messezentrum 1, Salzburg, Austria +
+
+
+

DÜSSELDORF, Germany (AP) — Portugal left back João Cancelo’s switch to Bayern Munich and former Real Madrid star Isco Alarcón's potential signing by Union Berlin brought excitement to the last day of the winter transfer period in Germany. After seeing...

+
+
+
+
+ +
+ + +
+
+ +
+
+
+

+
+ +
+
Agenda item for testing, isco spice up last day of transfers in Germany
+

+
+
+ +
+
+ 20/06/2023 to 23/06/2023 + + + Day: + + 4 + / + 4 + + + +
From c23720290bb8f7fda1d8249ffc888830ccd93c11 Mon Sep 17 00:00:00 2001 From: Petr Jasek Date: Mon, 6 Nov 2023 11:14:28 +0100 Subject: [PATCH 02/22] raise default subject aggregation limit CPCN-400 --- newsroom/wire/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newsroom/wire/__init__.py b/newsroom/wire/__init__.py index 27dec2caf..1bda87f3c 100644 --- a/newsroom/wire/__init__.py +++ b/newsroom/wire/__init__.py @@ -118,7 +118,7 @@ def init_app(app: BaseNewsroomApp): { "genre": {"terms": {"field": "genre.name", "size": 50}}, "service": {"terms": {"field": "service.name", "size": 50}}, - "subject": {"terms": {"field": "subject.name", "size": 20}}, + "subject": {"terms": {"field": "subject.name", "size": 50}}, "urgency": {"terms": {"field": "urgency"}}, "place": {"terms": {"field": "place.name", "size": 50}}, }, From 0dfc3663707d525e7b752a1bc8b855868e15acfc Mon Sep 17 00:00:00 2001 From: Petr Jasek Date: Mon, 6 Nov 2023 13:32:24 +0100 Subject: [PATCH 03/22] Revert "raise default subject aggregation limit" This reverts commit c23720290bb8f7fda1d8249ffc888830ccd93c11. --- newsroom/wire/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newsroom/wire/__init__.py b/newsroom/wire/__init__.py index 1bda87f3c..27dec2caf 100644 --- a/newsroom/wire/__init__.py +++ b/newsroom/wire/__init__.py @@ -118,7 +118,7 @@ def init_app(app: BaseNewsroomApp): { "genre": {"terms": {"field": "genre.name", "size": 50}}, "service": {"terms": {"field": "service.name", "size": 50}}, - "subject": {"terms": {"field": "subject.name", "size": 50}}, + "subject": {"terms": {"field": "subject.name", "size": 20}}, "urgency": {"terms": {"field": "urgency"}}, "place": {"terms": {"field": "place.name", "size": 50}}, }, From 48465f778499776050e1c3f5b3f1c466f2a7595d Mon Sep 17 00:00:00 2001 From: Konstantin Markov Date: Mon, 6 Nov 2023 15:55:41 +0200 Subject: [PATCH 04/22] Fix no company selected bug (#646) --- assets/users/components/EditUser.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/users/components/EditUser.tsx b/assets/users/components/EditUser.tsx index d4db8549f..6b6004864 100644 --- a/assets/users/components/EditUser.tsx +++ b/assets/users/components/EditUser.tsx @@ -303,7 +303,7 @@ const EditUserComponent: React.ComponentType = (props: IProps) => { title={gettext('Products')} testId="toggle--products" > - {(() => { + {user.company != null ? (() => { if (productsFromSections.length < 1) { return (
{gettext('No products available')}
@@ -361,7 +361,11 @@ const EditUserComponent: React.ComponentType = (props: IProps) => { ); } - })()} + })() : ( +
+ {gettext('If a company hasn\'t been selected, you can\'t select any products.')} +
+ )} ); })()} From 56f16329f73f32c2cf76eb1fc99eb6395a96d54b Mon Sep 17 00:00:00 2001 From: Ketan <73937490+devketanpro@users.noreply.github.com> Date: Tue, 7 Nov 2023 18:40:00 +0530 Subject: [PATCH 05/22] As a user I want to export my selected events in csv format [CPCN-15] (#653) * add new formatter CSV * refactore code * handle case when origization is none * handle all_day and no_end_time cases * remove print * fix flake8 * handle datetime object * minor change * handle mutiple items in one csv file * fix test cases * add new config multi in formatter * fix flake8 * minor change * refactore code and use type annotations * minor change * fix mypy * update type definitions * add missing type * refactore coder --- newsroom/agenda/__init__.py | 1 + newsroom/agenda/formatters/__init__.py | 1 + newsroom/agenda/formatters/csv_formatter.py | 125 ++++++++++++++++++++ newsroom/formatter.py | 3 + newsroom/wire/formatters/base.py | 1 + newsroom/wire/views.py | 5 + tests/core/test_csv_formatter.py | 90 ++++++++++++++ 7 files changed, 226 insertions(+) create mode 100644 newsroom/agenda/formatters/csv_formatter.py create mode 100644 tests/core/test_csv_formatter.py diff --git a/newsroom/agenda/__init__.py b/newsroom/agenda/__init__.py index 8eddaaf99..bfe93942c 100644 --- a/newsroom/agenda/__init__.py +++ b/newsroom/agenda/__init__.py @@ -37,6 +37,7 @@ def init_app(app): ) app.download_formatter("ical", formatters.iCalFormatter(), "iCalendar", ["agenda"]) + app.download_formatter("Csv", formatters.CSVFormatter(), "CSV", ["agenda"]) app.add_template_global(url_for_agenda) app.add_template_global(get_coverage_email_text) app.add_template_global(get_coverage_content_type_name, "get_coverage_content_type") diff --git a/newsroom/agenda/formatters/__init__.py b/newsroom/agenda/formatters/__init__.py index a34970432..86dedef27 100644 --- a/newsroom/agenda/formatters/__init__.py +++ b/newsroom/agenda/formatters/__init__.py @@ -1 +1,2 @@ from .ical_formatter import iCalFormatter # noqa +from .csv_formatter import CSVFormatter # noqa diff --git a/newsroom/agenda/formatters/csv_formatter.py b/newsroom/agenda/formatters/csv_formatter.py new file mode 100644 index 000000000..c0b483d5a --- /dev/null +++ b/newsroom/agenda/formatters/csv_formatter.py @@ -0,0 +1,125 @@ +from newsroom.formatter import BaseFormatter +import csv +import io +import arrow +from werkzeug.utils import secure_filename +from newsroom.utils import parse_dates +from datetime import datetime +from typing import List, Dict, Any, Union, Tuple + + +class CSVFormatter(BaseFormatter): + VERSION = "1.0" + PRODID = "Newshub" + FILE_EXTENSION = "csv" + MIMETYPE = "text/csv" + MULTI = True + + def format_item(self, item, item_type=None): + event_item = self.format_event(item) + return self.serialize_to_csv([event_item]) + + def format_events(self, items: List[Dict[str, Any]], item_type: Union[str, None] = None) -> Tuple[bytes, str]: + formatted_events = [] + for item in items: + parse_dates(item) + formatted_events.append(self.format_event(item)) + return self.serialize_to_csv(formatted_events), secure_filename( + f"{datetime.now().strftime('%Y-%m-%d-%H:%M:%S')}-{'multi'}.{self.FILE_EXTENSION}" + ) + + def serialize_to_csv(self, items: List[Dict[str, Any]]) -> bytes: + csv_string = io.StringIO() + fieldnames: List[str] = list(items[0].keys()) + csv_writer: csv.DictWriter = csv.DictWriter(csv_string, delimiter=",", fieldnames=fieldnames) + csv_writer.writeheader() + for item in items: + csv_writer.writerow(item) + + csv_string.seek(0) # Reset the buffer position + return csv_string.getvalue().encode("utf-8") + + def format_event(self, item: Dict[str, Any]) -> Dict[str, Any]: + event = item.get("event", {}) + return { + "Event name": item.get("name", ""), + "Description": item.get("definition_long", item.get("definition_short", "")), + "Language": item.get("language", ""), + "Event start date": self.format_date(item, "start"), + "Event end date": self.format_date(item, "end"), + "Event time": self.format_time(item), + "Event timezone": item.get("dates", {}).get("tz", ""), + "Location": self.format_location(item, "name"), + "Country": self.format_location(item, "country"), + "Subject": self.format_list(event, "subject"), + "Website": event.get("links")[0] if event.get("links") else "", + "Category": self.format_list(event, "anpa_category"), + "Event type": item.get("item_type", ""), + "Organization name": event.get("event_contact_info")[0].get("organisation", " ") + if event.get("event_contact_info") + else "", + "Contact": self.format_contact_info(item), + "Coverage type": self.format_coverage(item, "coverage_type"), + "Coverage status": self.format_coverage(item, "coverage_status"), + } + + def datetime(self, value: Any) -> datetime: + """Make sure dates are datetime instances.""" + return arrow.get(value).datetime + + def format_date(self, item: Dict[str, Any], date_type: str) -> str: + date_obj = self.datetime(item.get("dates", {}).get(date_type)) + if date_obj: + return date_obj.strftime("%Y-%m-%d") + return "" + + def format_time(self, item: Dict[str, Any]) -> str: + date_obj = item.get("dates", {}) + if date_obj.get("all_day"): + return "" + elif date_obj.get("no_end_time"): + return f"{self.datetime(date_obj.get('start')).strftime('%H:%M:%S')}" + else: + return f"{self.datetime(date_obj.get('start')).strftime('%H:%M:%S')}-{self.datetime(date_obj.get('end')).strftime('%H:%M:%S')}" + + def format_location(self, item: Dict[str, Any], field: str) -> str: + """ + format location info + """ + if item.get("location"): + for loc in item["location"]: + return loc.get(field, "") if not field == "country" else loc.get("address", {}).get(field) + return "" + + def format_list(self, item: Dict[str, Any], key: str) -> str: + values = [v.get("name", "") for v in item.get(key, [])] + return ",".join(values) + + def format_contact_info(self, item: Dict[str, Any]) -> str: + """ + format contact information + """ + event_contact_info = item.get("event", {}).get("event_contact_info", []) + if event_contact_info: + for contact in event_contact_info: + contact_values = [ + contact.get("honorific", ""), + contact.get("first_name", ""), + contact.get("last_name", ""), + contact.get("organisation", ""), + ",".join(contact.get("contact_email", [])), + ",".join(contact.get("mobile", [])), + ] + return ",".join(contact_values) + return "" + + def format_coverage(self, item: Dict[str, Any], field: str) -> str: + """ + format coverage information + """ + coverages = item.get("event", {}).get("coverages", {}) + value = [] + if coverages: + for coverage in coverages: + value.append(coverage.get(field, "")) + return ",".join(value) diff --git a/newsroom/formatter.py b/newsroom/formatter.py index cfd076f84..d7ef872ad 100644 --- a/newsroom/formatter.py +++ b/newsroom/formatter.py @@ -17,6 +17,9 @@ class BaseFormatter: #: File extension to use for downloaded file. FILE_EXTENSION = None + #: Multi to use for download multiple file. + MULTI = False + def format_item(self, item, item_type=None, items=[]): raise NotImplementedError diff --git a/newsroom/wire/formatters/base.py b/newsroom/wire/formatters/base.py index 904de3ed4..0c510d5d6 100644 --- a/newsroom/wire/formatters/base.py +++ b/newsroom/wire/formatters/base.py @@ -13,6 +13,7 @@ class BaseFormatter(metaclass=FormatterRegistry): MIMETYPE = None FILE_EXTENSION = None MEDIATYPE = "text" + MULTI = False def format_filename(self, item): assert self.FILE_EXTENSION diff --git a/newsroom/wire/views.py b/newsroom/wire/views.py index 204a44d39..a20a36aff 100644 --- a/newsroom/wire/views.py +++ b/newsroom/wire/views.py @@ -304,6 +304,11 @@ def download(_ids): _file.seek(0) mimetype = formatter.get_mimetype(item) attachment_filename = secure_filename(formatter.format_filename(item)) + elif formatter.MULTI and len(items) != 1: + # if we have multiple items, so in this case we stored their data in one csv file. + csv_data, attachment_filename = formatter.format_events(items, item_type=item_type) + _file.write(csv_data) + _file.seek(0) else: with zipfile.ZipFile(_file, mode="w") as zf: for item in items: diff --git a/tests/core/test_csv_formatter.py b/tests/core/test_csv_formatter.py new file mode 100644 index 000000000..76684e5af --- /dev/null +++ b/tests/core/test_csv_formatter.py @@ -0,0 +1,90 @@ +from .test_push_events import test_event +from flask import json +import copy +from newsroom.utils import get_entity_or_404 +from newsroom.agenda.formatters import CSVFormatter +import csv + + +event = copy.deepcopy(test_event) +event["coverages"] = [ + { + "planning_id": "urn:newsml:stt.fi:20280911:631023", + "coverage_id": "ID_EVENT_286323", + "scheduled": "2028-09-11T00:00:00+0000", + "coverage_type": "text", + "workflow_status": "draft", + "coverage_status": "coverage intended", + "slugline": "Testi/Luotsi", + }, + { + "planning_id": "urn:newsml:stt.fi:20280911:631025", + "coverage_id": "ID_WORKREQUEST_187845", + "scheduled": "2023-10-03T22:00:00+0000", + "coverage_type": "picture", + "workflow_status": "draft", + "coverage_status": "coverage intended", + "slugline": "Testi/Luotsi", + "genre": [{"qcode": "sttimage:20", "name": "Kuvaaja paikalla"}], + }, +] +event["subject"] = [ + {"name": "Statistics & Economic Indicators", "qcode": "150", "scheme": "event_types", "code": "150"}, + {"name": "Economic Indicators", "qcode": "3", "scheme": "categories", "code": "3"}, +] +event["anpa_category"].append({"name": "Economic News", "qcode": "b", "code": "b"}) + + +def test_csv_formatter_item(client, app): + client.post("/push", data=json.dumps(event), content_type="application/json") + parsed = get_entity_or_404(event["guid"], "agenda") + formatter = CSVFormatter() + assert formatter.format_filename(parsed).endswith("new-press-conference.csv") + csv_data = formatter.format_item(parsed, item_type="agenda") + csv_string = csv_data.decode("utf-8") + csv_lines = csv_string.split("\n") + csv_reader = csv.reader(csv_lines) + + header = next(csv_reader) + expected_header_fields = [ + "Event name", + "Description", + "Language", + "Event start date", + "Event end date", + "Event time", + "Event timezone", + "Location", + "Country", + "Subject", + "Website", + "Category", + "Event type", + "Organization name", + "Contact", + "Coverage type", + "Coverage status", + ] + assert header == expected_header_fields + + data_fields = next(csv_reader) + expected_data_values = [ + "Prime minister press conference", + "Ministers will check the environmental issues", + "en-CA", + "2018-05-28", + "2018-05-28", + "04:00:00-05:00:00", + "Australia/Sydney", + "Sydney", + "Australia", + "Statistics & Economic Indicators,Economic Indicators", + "www.earthhour.com", + "Australian General News,Economic News", + "event", + "AAP", + "Professor,Tom,Jones,AAP,jones@foo.com,", + "text,picture", + "coverage intended,coverage intended", + ] + assert data_fields == expected_data_values From 40acbd97123710597e4714b5bccb862089777a7f Mon Sep 17 00:00:00 2001 From: Konstantin Markov Date: Tue, 7 Nov 2023 15:57:23 +0200 Subject: [PATCH 06/22] Search disapearing fix (#656) --- assets/wire/components/filters/FilterGroup.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/assets/wire/components/filters/FilterGroup.tsx b/assets/wire/components/filters/FilterGroup.tsx index b0844171f..06b704d34 100644 --- a/assets/wire/components/filters/FilterGroup.tsx +++ b/assets/wire/components/filters/FilterGroup.tsx @@ -8,6 +8,11 @@ import FilterItem from './FilterItem'; import {WithPagination} from 'components/pagination/WithPagination'; import {searchIcon} from 'search/components/search-icon'; +/** + * If the filter count is less than 50 we + * shouldn't render the search. + */ +const SEARCHBAR_THRESHOLD = 50; const LIMIT = 5; type IBucket = {key: string, doc_count: string}; @@ -70,16 +75,17 @@ export default function FilterGroup({group, activeFilter, aggregations, toggleFi const activeBuckets: Array = (get(activeFilter, group.field) || []) .map((filter: any) => ({key: filter})); const bucketPath: string = get(group, 'agg_path') || `${group.field}.buckets`; - const buckets = uniqBy( + const allBuckets = uniqBy( cloneDeep(get(aggregations, bucketPath) || group.buckets || []).concat(activeBuckets) as Array, 'key', - ) + ); + const bucketsBySearchTerm = allBuckets .sort(compareFunction) .filter(({key}: any) => searchTerm.length > 0 ? key.toString().toLocaleLowerCase().includes(searchTerm) : true); return ( - {buckets.length > 50 && ( + {allBuckets.length > SEARCHBAR_THRESHOLD && (
@@ -110,8 +116,8 @@ export default function FilterGroup({group, activeFilter, aggregations, toggleFi const step = pageNo === 1 ? 0 : (pageNo - 1) * pageSize; return Promise.resolve({ - itemCount: buckets?.length ?? 0, - items: (buckets ?? []).slice(step, pageSize + step), + itemCount: bucketsBySearchTerm?.length ?? 0, + items: (bucketsBySearchTerm ?? []).slice(step, pageSize + step), }); }} > From 6b118c054a453099cc264c65257642af38101b9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ja=C5=A1ek?= Date: Wed, 8 Nov 2023 10:01:38 +0100 Subject: [PATCH 07/22] fix error message when doing an action from home page (#657) which calls analytics but itemsById were not set there. NHUB-430 --- assets/home/reducers.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/assets/home/reducers.ts b/assets/home/reducers.ts index 6d12a50ba..2020b591b 100644 --- a/assets/home/reducers.ts +++ b/assets/home/reducers.ts @@ -10,6 +10,7 @@ import {BOOKMARK_ITEMS, REMOVE_BOOKMARK} from '../wire/actions'; import {CLOSE_MODAL, MODAL_FORM_VALID, RENDER_MODAL, SET_USER} from '../actions'; import {modalReducer} from '../reducers'; import {topicsReducer} from '../topics/reducer'; +import {IArticle} from 'interfaces'; export interface IPersonalizedDashboardsWithData { dashboard_id?: string; @@ -23,6 +24,7 @@ interface IState { topics: Array; products: Array; itemsByCard: any; + itemsById: {[_id: string]: IArticle}; activeCard: any; uiConfig: any; userProducts: Array; @@ -34,6 +36,7 @@ const initialState: IState = { topics: [], products: [], itemsByCard: {}, + itemsById: {}, activeCard: null, uiConfig: {}, userProducts: [], @@ -106,8 +109,13 @@ export default function homeReducer(state: IState & any = initialState, action: } case SET_CARD_ITEMS: { + const itemsById = {...state.itemsById}; + + setItemsById(itemsById, action.payload.items); + return { ...state, + itemsById, itemsByCard: { ...state.itemsByCard, [action.payload.card]: action.payload.items, @@ -116,8 +124,15 @@ export default function homeReducer(state: IState & any = initialState, action: } case SET_MULTIPLE_CARD_ITEMS: { + const itemsById = {...state.itemsById}; + + for (const card in action.payload) { + setItemsById(itemsById, action.payload[card]); + } + return { ...state, + itemsById, itemsByCard: { ...state.itemsByCard, ...action.payload, @@ -134,3 +149,9 @@ export default function homeReducer(state: IState & any = initialState, action: return {...state, topics: topicsReducer(state.topics, action)}; } } + +function setItemsById(itemsById: IState['itemsById'], items: Array) { + items.forEach((item: IArticle) => { + itemsById[item._id] = item; + }); +} From 7516aef3a7fc8222ef5da35b5b88380eddafed23 Mon Sep 17 00:00:00 2001 From: MarkLark86 Date: Mon, 20 Nov 2023 09:33:05 +1100 Subject: [PATCH 08/22] [CPCN-27] Show segment instead of version for transcripts (#659) * [CPCN-27] Show segment instead of version for transcripts * Improve ts types * fix lint * add `extra.type?: 'transcript'` to IArticle interface --- assets/interfaces/common.ts | 28 ++++ assets/interfaces/content.ts | 10 +- assets/interfaces/index.ts | 2 +- assets/wire/actions.ts | 21 ++- .../wire/components/ListItemNextVersion.tsx | 61 ++++++--- .../components/ListItemPreviousVersions.tsx | 75 ++++++----- assets/wire/components/WireListItem.tsx | 121 +++++++++--------- .../components/fields/PreviousVersions.tsx | 28 ++-- assets/wire/tests/actions.spec.ts | 25 +++- assets/wire/utils.ts | 20 ++- 10 files changed, 241 insertions(+), 150 deletions(-) diff --git a/assets/interfaces/common.ts b/assets/interfaces/common.ts index 85e6858ff..c9c2140a2 100644 --- a/assets/interfaces/common.ts +++ b/assets/interfaces/common.ts @@ -1,3 +1,7 @@ +import {IUser} from './user'; +import {IArticle} from './content'; +import {IAgendaItem} from './agenda'; + export type TDatetime = string; // ISO8601 format export interface IFilterGroup { @@ -25,3 +29,27 @@ export interface ICountry { } export type IListConfig = {[key: string]: string | number | boolean}; + +interface IBaseAction { + _id: string; + id: string; + name: string; + shortcut: boolean; + icon: string; + tooltip: string; + multi: boolean; + visited?(user: IUser['_id'], item: IArticle | IAgendaItem): void; + when?(props: any, item: IArticle | IAgendaItem): boolean; +} + +interface ISingleItemAction extends IBaseAction { + multi: false; + action(item: IArticle | IAgendaItem, group: string, plan: IAgendaItem): void; +} + +interface IMultiItemAction extends IBaseAction { + multi: true; + action(items: Array): void; +} + +export type IItemAction = ISingleItemAction | IMultiItemAction; diff --git a/assets/interfaces/content.ts b/assets/interfaces/content.ts index 15ff65a09..da719f32c 100644 --- a/assets/interfaces/content.ts +++ b/assets/interfaces/content.ts @@ -13,11 +13,19 @@ export interface IArticle { _id: string; guid: string; type: IContentType; - associations: {[key: string]: IArticle}; + ancestors?: Array; + nextversion?: IArticle['_id']; + associations?: {[key: string]: IArticle}; renditions?: {[key: string]: IRendition}; slugline: string; headline: string; anpa_take_key?: string; source: string; versioncreated: string; + extra?: { + type?: 'transcript'; + [key: string]: any; + }; + es_highlight?: {[field: string]: Array} + deleted?: boolean; // Used only in the front-end, populated by wire/reducer } diff --git a/assets/interfaces/index.ts b/assets/interfaces/index.ts index ecb07c9f8..257f3960e 100644 --- a/assets/interfaces/index.ts +++ b/assets/interfaces/index.ts @@ -1,4 +1,4 @@ -export {TDatetime, IFilterGroup, ISection, ICountry, IListConfig} from './common'; +export {TDatetime, IFilterGroup, ISection, ICountry, IListConfig, IItemAction} from './common'; export {ICompany, ICompanyType, IAuthProvider, IService} from './company'; export {IClientConfig} from './config'; export {INavigation} from './navigation'; diff --git a/assets/wire/actions.ts b/assets/wire/actions.ts index cffc1ce62..5a6a42e91 100644 --- a/assets/wire/actions.ts +++ b/assets/wire/actions.ts @@ -1,5 +1,6 @@ import {get, isEmpty} from 'lodash'; +import {IArticle} from 'interfaces'; import server from 'server'; import analytics from 'analytics'; @@ -387,11 +388,9 @@ export function removeBookmarks(items: any) { * @param {Object} item * @return {Promise} */ -export function fetchVersions(item: any) { - return () => server.get(`/wire/${item._id}/versions`) - .then((data: any) => { - return data._items; - }); +export function fetchVersions(item: IArticle): Promise> { + return server.get(`/wire/${item._id}/versions`) + .then((data: {_items: Array}) => (data._items)); } /** @@ -524,14 +523,12 @@ export function fetchNewItems() { .then((response: any) => dispatch(setNewItems(response))); } -export function fetchNext(item: any) { - return () => { - if (!item.nextversion) { - return Promise.reject(); - } +export function fetchNext(item: IArticle): Promise { + if (item.nextversion == null) { + return Promise.reject(); + } - return server.get(`/wire/${item.nextversion}?format=json`); - }; + return server.get(`/wire/${item.nextversion}?format=json`); } export const TOGGLE_FILTER = 'TOGGLE_FILTER'; diff --git a/assets/wire/components/ListItemNextVersion.tsx b/assets/wire/components/ListItemNextVersion.tsx index b4e3906be..6a7ef16bb 100644 --- a/assets/wire/components/ListItemNextVersion.tsx +++ b/assets/wire/components/ListItemNextVersion.tsx @@ -1,35 +1,59 @@ import React from 'react'; -import PropTypes from 'prop-types'; import {connect} from 'react-redux'; +import {IArticle} from 'interfaces'; import {gettext} from 'utils'; +import {getVersionsLabelText} from 'wire/utils'; import ItemVersion from './ItemVersion'; import {fetchNext, openItem} from '../actions'; -class ListItemNextVersion extends React.Component { - static propTypes: any; - constructor(props: any) { +interface IOwnProps { + item: IArticle; + displayConfig: {[field: string]: boolean}; +} + +interface IState { + next: IArticle | null; +} + +interface IDispatchProps { + openItem(item: IArticle): void; +} + +type IProps = IDispatchProps & IOwnProps; + +const mapDispatchToProps = (dispatch: any) => ({ + openItem: (item: IArticle) => dispatch(openItem(item)), +}); + + +class ListItemNextVersion extends React.Component { + constructor(props: IProps) { super(props); this.state = {next: null}; this.open = this.open.bind(this); - this.fetch(props); + this.fetch(); } - componentWillReceiveProps(nextProps: any) { - if (nextProps.item.nextversion !== this.props.item.nextversion) { - this.fetch(nextProps); + componentDidUpdate(prevProps: Readonly) { + if (prevProps.item.nextversion !== this.props.item.nextversion) { + this.fetch(); } } - fetch(props: any) { - props.dispatch(fetchNext(props.item)) - .then((next: any) => this.setState({next})) + fetch() { + fetchNext(this.props.item) + .then((next) => this.setState({next})) .catch(() => this.setState({next: null})); } - open(version: any, event: any) { + open(version: IArticle, event: React.MouseEvent) { + if (this.state.next == null) { + return; + } + event.stopPropagation(); - this.props.dispatch(openItem(this.state.next)); + this.props.openItem(this.state.next); } render() { @@ -37,12 +61,13 @@ class ListItemNextVersion extends React.Component { return null; } + const versionLabelText = getVersionsLabelText(this.props.item); const baseClass = 'wire-column__preview'; return (
- {gettext('Next version')} + {gettext('Next {{ versionsLabel }}', {versionsLabel: versionLabelText})} { } } -ListItemNextVersion.propTypes = { - item: PropTypes.object.isRequired, - dispatch: PropTypes.func.isRequired, - displayConfig: PropTypes.object, -}; - -const component: React.ComponentType = connect()(ListItemNextVersion); +const component = connect(null, mapDispatchToProps)(ListItemNextVersion); export default component; diff --git a/assets/wire/components/ListItemPreviousVersions.tsx b/assets/wire/components/ListItemPreviousVersions.tsx index 55799e1f0..fd63eb5bc 100644 --- a/assets/wire/components/ListItemPreviousVersions.tsx +++ b/assets/wire/components/ListItemPreviousVersions.tsx @@ -1,40 +1,64 @@ import React from 'react'; -import PropTypes from 'prop-types'; import {connect} from 'react-redux'; +import {IArticle, IListConfig} from 'interfaces'; import {gettext} from 'utils'; +import {getVersionsLabelText} from 'wire/utils'; import {fetchVersions, openItem} from '../actions'; import ItemVersion from './ItemVersion'; +interface IOwnProps { + item: IArticle; + isPreview: boolean; + inputId?: string; + displayConfig?: IListConfig; + matchedIds?: Array +} + +interface IState { + versions: Array; + loading: boolean; + error: boolean; +} + +interface IDispatchProps { + openItem(item: IArticle): void; +} + +type IProps = IDispatchProps & IOwnProps; + +const mapDispatchToProps = (dispatch: any) => ({ + openItem: (item: IArticle) => dispatch(openItem(item)), +}); + -class ListItemPreviousVersions extends React.Component { +class ListItemPreviousVersions extends React.Component { baseClass: string; - static propTypes: any; - static defaultProps: any; + static defaultProps = {matchedIds: []}; - constructor(props: any) { + constructor(props: IProps) { super(props); this.state = {versions: [], loading: true, error: false}; this.baseClass = this.props.isPreview ? 'wire-column__preview' : 'wire-articles'; this.open = this.open.bind(this); - this.fetch(props); + this.fetch(); } - componentWillReceiveProps(nextProps: any) { - if (nextProps.item._id !== this.props.item._id) { - this.fetch(nextProps); + componentDidUpdate(prevProps: Readonly) { + if (prevProps.item._id !== this.props.item._id) { + this.fetch(); } } - open(version: any, event: any) { + open(version: IArticle, event: React.MouseEvent) { event.stopPropagation(); - this.props.dispatch(openItem(version)); + this.props.openItem(version); } - fetch(props: any) { - props.dispatch(fetchVersions(props.item)) - .then((versions: any) => this.setState({versions, loading: false})) + fetch() { + fetchVersions(this.props.item) + .then((versions) => this.setState({versions, loading: false})) .catch(() => this.setState({error: true})); } @@ -47,6 +71,7 @@ class ListItemPreviousVersions extends React.Component { ); } + const versionLabelText = getVersionsLabelText(this.props.item, this.state.versions.length > 1); const versions = this.state.versions.map((version: any) => ( { this.props.item.ancestors ?
{this.props.isPreview && ( - {gettext('Previous versions')} + + {gettext('Previous {{ versionsLabel }}', {versionsLabel: versionLabelText})} + )} {versions}
: null @@ -71,22 +98,6 @@ class ListItemPreviousVersions extends React.Component { } } -ListItemPreviousVersions.propTypes = { - item: PropTypes.shape({ - _id: PropTypes.string, - ancestors: PropTypes.array, - }).isRequired, - isPreview: PropTypes.bool.isRequired, - dispatch: PropTypes.func, - inputId: PropTypes.string, - displayConfig: PropTypes.object, - matchedIds: PropTypes.array, -}; - -ListItemPreviousVersions.defaultProps = { - matchedIds: [], -}; - -const component: React.ComponentType = connect()(ListItemPreviousVersions); +const component = connect(null, mapDispatchToProps)(ListItemPreviousVersions); export default component; diff --git a/assets/wire/components/WireListItem.tsx b/assets/wire/components/WireListItem.tsx index eb055326f..60623e3b4 100644 --- a/assets/wire/components/WireListItem.tsx +++ b/assets/wire/components/WireListItem.tsx @@ -1,24 +1,22 @@ import React from 'react'; -import PropTypes from 'prop-types'; import classNames from 'classnames'; -import {get} from 'lodash'; +import {IArticle, IItemAction, IUser, IListConfig, IAgendaItem} from 'interfaces'; import { gettext, wordCount, characterCount, LIST_ANIMATIONS, getSlugline, - getConfig, } from 'utils'; import { - getFeatureMedia, getImageForList, showItemVersions, shortText, isKilled, getCaption, shortHighlightedtext, + getVersionsLabelText, } from 'wire/utils'; import ActionButton from 'components/ActionButton'; @@ -31,49 +29,88 @@ import {Embargo} from './fields/Embargo'; import {UrgencyItemBorder, UrgencyLabel} from './fields/UrgencyLabel'; import {FieldComponents} from './fields'; -export const DISPLAY_WORD_COUNT = getConfig('display_word_count'); -export const DISPLAY_CHAR_COUNT = getConfig('display_char_count'); - const DEFAULT_META_FIELDS = ['source', 'charcount', 'versioncreated']; const DEFAULT_COMPACT_META_FIELDS = ['versioncreated']; -function getShowVersionText(isExpanded: any, itemCount: any, matchCount: any, isExtended: any) { +function getShowVersionText( + item: IArticle, + isExpanded: boolean, + itemCount: number, + matchCount: number, + isExtended: boolean +): string { + const versionLabelText = getVersionsLabelText(item, itemCount > 1); + if (isExpanded) { return (isExtended && matchCount) ? gettext( - 'Hide previous versions ({{ count }}) - {{ matches }} matches', + 'Hide previous {{ versionsLabel }} ({{ count }}) - {{ matches }} matches', { + versionsLabel: versionLabelText, matches: matchCount, count: itemCount, } ) : gettext( - 'Hide previous versions ({{ count }})', - {count: itemCount} + 'Hide previous {{ versionsLabel }} ({{ count }})', + { + versionsLabel: versionLabelText, + count: itemCount, + } ); } else { return (isExtended && matchCount) ? gettext( - 'Show previous versions ({{ count }}) - {{ matches }} matches', + 'Show previous {{ versionsLabel }} ({{ count }}) - {{ matches }} matches', { + versionsLabel: versionLabelText, matches: matchCount, count: itemCount, } ) : gettext( - 'Show previous versions ({{ count }})', - {count: itemCount} + 'Show previous {{ versionsLabel }} ({{ count }})', + { + versionsLabel: versionLabelText, + count: itemCount, + } ); } } -class WireListItem extends React.Component { - static propTypes: any; - static defaultProps: any; - wordCount: any; - characterCount: any; - dom: any; - constructor(props: any) { +interface IProps { + item: IArticle; + isActive: boolean; + isSelected: boolean; + isRead: boolean; + showActions: boolean; + isExtended: boolean; + matchedIds: Array; + isSearchFiltered: boolean; + showShortcutActionIcons: boolean; + user: IUser['_id']; + context: string; + contextName: string; + listConfig: IListConfig; + filterGroupLabels: {[field: string]: string}; + actions: Array; + onClick(item: IArticle): void; + onDoubleClick(item: IArticle): void; + onActionList(event: React.MouseEvent, item: IArticle, group?: string, plan?: IAgendaItem): void; + toggleSelected(): void; +} + +interface IState { + previousVersions: boolean; +} + +class WireListItem extends React.Component { + static defaultProps = {matchedIds: []}; + wordCount: number; + characterCount: number; + dom: {article: HTMLElement | null}; + + constructor(props: IProps) { super(props); this.wordCount = wordCount(props.item); this.characterCount = characterCount(props.item); @@ -84,7 +121,7 @@ class WireListItem extends React.Component { this.dom = {article: null}; } - onKeyDown(event: any) { + onKeyDown(event: React.KeyboardEvent) { switch (event.key) { case ' ': // on space toggle selected item this.props.toggleSelected(); @@ -97,7 +134,7 @@ class WireListItem extends React.Component { event.preventDefault(); } - togglePreviousVersions(event: any) { + togglePreviousVersions(event: React.MouseEvent) { event.stopPropagation(); this.setState({previousVersions: !this.state.previousVersions}); } @@ -108,7 +145,7 @@ class WireListItem extends React.Component { } } - stopPropagation(event: any) { + stopPropagation(event: React.MouseEvent) { event.stopPropagation(); } @@ -121,7 +158,7 @@ class WireListItem extends React.Component { listConfig, } = this.props; - if (get(this.props, 'item.deleted')) { + if (this.props.item.deleted === true) { return ( { onClick={this.togglePreviousVersions} > {getShowVersionText( + this.props.item, this.state.previousVersions, - item.ancestors.length, + item.ancestors?.length ?? 0, matchedAncestors.length, isExtended )} @@ -349,35 +387,4 @@ class WireListItem extends React.Component { } } -WireListItem.propTypes = { - item: PropTypes.object.isRequired, - isActive: PropTypes.bool.isRequired, - isSelected: PropTypes.bool.isRequired, - isRead: PropTypes.bool.isRequired, - onClick: PropTypes.func.isRequired, - onDoubleClick: PropTypes.func.isRequired, - onActionList: PropTypes.func.isRequired, - showActions: PropTypes.bool.isRequired, - toggleSelected: PropTypes.func.isRequired, - actions: PropTypes.arrayOf( - PropTypes.shape({ - name: PropTypes.string, - action: PropTypes.func, - }) - ), - isExtended: PropTypes.bool.isRequired, - user: PropTypes.string, - context: PropTypes.string, - contextName: PropTypes.string, - listConfig: PropTypes.object, - matchedIds: PropTypes.array, - isSearchFiltered: PropTypes.bool, - showShortcutActionIcons: PropTypes.bool, - filterGroupLabels: PropTypes.object, -}; - -WireListItem.defaultProps = { - matchedIds: [], -}; - export default WireListItem; diff --git a/assets/wire/components/fields/PreviousVersions.tsx b/assets/wire/components/fields/PreviousVersions.tsx index f281fa9a9..e7064dca0 100644 --- a/assets/wire/components/fields/PreviousVersions.tsx +++ b/assets/wire/components/fields/PreviousVersions.tsx @@ -1,8 +1,16 @@ import React from 'react'; -import PropTypes from 'prop-types'; + +import {IArticle} from 'interfaces'; import {gettext} from 'utils'; +import {getVersionsLabelText} from 'wire/utils'; + +interface IProps { + item: IArticle; + isItemDetail: boolean; + inputRef: string; +} -export function PreviousVersions ({item, isItemDetail, inputRef}: any) { +export function PreviousVersions({item, isItemDetail, inputRef}: IProps) { if (isItemDetail) { return null; } @@ -11,23 +19,17 @@ export function PreviousVersions ({item, isItemDetail, inputRef}: any) { const previousVersions = document.getElementById(inputRef); previousVersions && previousVersions.scrollIntoView(); }; + const numVersions = item.ancestors?.length ?? 0; + const versionLabelText = getVersionsLabelText(item, numVersions === 0 || numVersions > 1); return (
- {gettext('{{ count }} previous versions', { - count: item.ancestors - ? item.ancestors.length - : '0', + {gettext('{{ count }} previous {{ versionsLabel }}', { + count: numVersions, + versionsLabel: versionLabelText, })}
); } - - -PreviousVersions.propTypes = { - isItemDetail: PropTypes.bool, - item: PropTypes.object, - inputRef: PropTypes.string, -}; diff --git a/assets/wire/tests/actions.spec.ts b/assets/wire/tests/actions.spec.ts index 19c400acc..684fcd35f 100644 --- a/assets/wire/tests/actions.spec.ts +++ b/assets/wire/tests/actions.spec.ts @@ -2,6 +2,7 @@ import thunk from 'redux-thunk'; import fetchMock from 'fetch-mock'; import {createStore, applyMiddleware} from 'redux'; +import {IArticle} from 'interfaces'; import server from 'server'; import wireApp from '../reducers'; @@ -16,6 +17,17 @@ import { } from 'search/actions'; import {initData} from '../actions'; +const testArticle: IArticle = { + _id: 'foo', + guid: 'foo', + type: 'text', + associations: {}, + slugline: 'test-article', + headline: 'My test article', + source: 'sofab', + versioncreated: '2023-06-27T11:07:17+0000', +}; + describe('wire actions', () => { let store: any; const response: any = { @@ -114,7 +126,7 @@ describe('wire actions', () => { it('can open item', () => { fetchMock.post('/history/new', {}); - store.dispatch(actions.openItem({_id: 'foo'})); + store.dispatch(actions.openItem(testArticle)); expect(store.getState().openItem._id).toBe('foo'); expect(fetchMock.called('/history/new')).toBeTruthy(); fetchMock.reset(); @@ -127,7 +139,7 @@ describe('wire actions', () => { expect(action).toEqual('open'); expect(section).toEqual('wire'); }); - store.dispatch(actions.openItem({_id: 'foo'})); + store.dispatch(actions.openItem(testArticle)); expect(store.getState().openItem._id).toBe('foo'); fetchMock.reset(); }); @@ -147,7 +159,7 @@ describe('wire actions', () => { const item: any = {_id: 'foo'}; fetchMock.get(`/wire/${item._id}/versions`, {_items: [{_id: 'bar'}, {_id: 'baz'}]}); - return store.dispatch(actions.fetchVersions(item)) + return actions.fetchVersions(item) .then((versions: any) => { expect(versions.length).toBe(2); expect(versions[0]._id).toBe('bar'); @@ -155,18 +167,17 @@ describe('wire actions', () => { }); it('can fetch next item version', () => { - const item: any = {nextversion: 'bar'}; const next: any = {}; fetchMock.get('/wire/bar?format=json', next); - return store.dispatch(actions.fetchNext(item)) - .then((_next: any) => { + return actions.fetchNext({...testArticle, nextversion: 'bar'}) + .then((_next) => { expect(_next).toEqual(next); }); }); it('can reject if item has no next version', () => { - return store.dispatch(actions.fetchNext({})).then(() => { + return actions.fetchNext(testArticle).then(() => { expect(true).toBe(false); // this should not be called }, () => { expect(fetchMock.called()).toBeFalsy(); diff --git a/assets/wire/utils.ts b/assets/wire/utils.ts index 41f748810..98b0471e4 100644 --- a/assets/wire/utils.ts +++ b/assets/wire/utils.ts @@ -1,7 +1,7 @@ import {get, isEmpty, isEqual, pickBy} from 'lodash'; import {IArticle, IContentType, IRendition} from '../interfaces'; -import {getTextFromHtml, getConfig, isDisplayed} from 'utils'; +import {getTextFromHtml, getConfig, isDisplayed, gettext} from 'utils'; export const DISPLAY_ABSTRACT = getConfig('display_abstract'); @@ -70,14 +70,14 @@ export function getOtherMedia(item: IArticle): Array | null { return null; } - return Object.keys(item.associations || {}) - .filter((key) => ( + return Object.entries(item.associations ?? {}) + .filter(([key, mediaItem]) => ( !key.startsWith('editor_') && key !== 'featuremedia' && - item.associations[key] != null && - ['video', 'audio'].includes(item.associations[key].type) + mediaItem != null && + ['video', 'audio'].includes(mediaItem.type) )) - .map((key) => item.associations[key]); + .map((args) => args[1]); } /** @@ -339,3 +339,11 @@ export function getContentTypes(item: IArticle): Set { export const hasAudio = (item: any) => hasMedia(item, 'audio'); export const hasVideo = (item: any) => hasMedia(item, 'video'); + +export function getVersionsLabelText(item: IArticle, plural?: boolean): string { + if (item.extra?.type === 'transcript') { + return plural ? gettext('segments') : gettext('segment'); + } + + return plural ? gettext('versions') : gettext('version'); +} From 1c1ebe118b7484c630b1c982246ef4550b1c4780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ja=C5=A1ek?= Date: Mon, 20 Nov 2023 09:58:02 +0100 Subject: [PATCH 09/22] avoid unique error messages (#658) * avoid unique error messages so it won't create a new error on sentry every time but can aggregate those together. * add user id to notification --- newsroom/company_expiry_alerts.py | 9 ++++----- newsroom/monitoring/email_alerts.py | 9 ++++----- .../send_scheduled_notifications.py | 16 ++++++++-------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/newsroom/company_expiry_alerts.py b/newsroom/company_expiry_alerts.py index 5ed287a04..a4d931e61 100644 --- a/newsroom/company_expiry_alerts.py +++ b/newsroom/company_expiry_alerts.py @@ -15,7 +15,7 @@ from superdesk import get_resource_service from superdesk.utc import utcnow from superdesk.celery_task_utils import get_lock_id -from superdesk.lock import lock, unlock, remove_locks +from superdesk.lock import lock, unlock from newsroom.celery_app import celery from newsroom.settings import get_settings_collection, GENERAL_SETTINGS_LOOKUP @@ -31,16 +31,15 @@ def send_alerts(self): lock_name = get_lock_id("newsroom", "company_expiry") if not lock(lock_name, expire=610): - logger.error("{} Job already running".format(self.log_msg)) + logger.error("Company expiry alert task already running") return try: self.worker() except Exception as e: logger.exception(e) - - unlock(lock_name) - remove_locks() + finally: + unlock(lock_name) logger.info("{} Completed sending alerts.".format(self.log_msg)) diff --git a/newsroom/monitoring/email_alerts.py b/newsroom/monitoring/email_alerts.py index fbec0385e..d4490ef1e 100644 --- a/newsroom/monitoring/email_alerts.py +++ b/newsroom/monitoring/email_alerts.py @@ -19,7 +19,7 @@ from superdesk import get_resource_service, Command from superdesk.utc import utcnow, utc_to_local, local_to_utc from superdesk.celery_task_utils import get_lock_id -from superdesk.lock import lock, unlock, remove_locks +from superdesk.lock import lock, unlock from newsroom.celery_app import celery from newsroom.settings import get_settings_collection, GENERAL_SETTINGS_LOOKUP @@ -48,7 +48,7 @@ def run(self, immediate=False): "monitoring_{0}".format("scheduled" if not immediate else "immediate"), ) if not lock(lock_name, expire=610): - logger.error("{} Job already running".format(self.log_msg)) + logger.error("Monitoring email alerts task already running") return try: @@ -64,9 +64,8 @@ def run(self, immediate=False): self.scheduled_worker(now_to_minute) except Exception as e: logger.exception(e) - - unlock(lock_name) - remove_locks() + finally: + unlock(lock_name) logger.info("{} Completed sending Monitoring Scheduled Alerts.".format(self.log_msg)) diff --git a/newsroom/notifications/send_scheduled_notifications.py b/newsroom/notifications/send_scheduled_notifications.py index 10164200f..e21ee7713 100644 --- a/newsroom/notifications/send_scheduled_notifications.py +++ b/newsroom/notifications/send_scheduled_notifications.py @@ -8,7 +8,7 @@ from superdesk import get_resource_service, Command from superdesk.utc import utcnow, utc_to_local from superdesk.celery_task_utils import get_lock_id -from superdesk.lock import lock, unlock, remove_locks +from superdesk.lock import lock, unlock from newsroom.types import User, NotificationSchedule, Company, NotificationQueue, NotificationQueueTopic, Topic from newsroom.utils import get_user_dict, get_company_dict @@ -32,13 +32,13 @@ def run(self, force: bool = False): lock_name = get_lock_id("newsroom", "send_scheduled_notifications") if not lock(lock_name, expire=610): - logger.error(f"{self.log_msg} Job already running") + logger.error("Send scheduled notifications task already running") return - self.run_schedules(force) - - unlock(lock_name) - remove_locks() + try: + self.run_schedules(force) + finally: + unlock(lock_name) logger.info(f"{self.log_msg} Completed sending scheduled notifications") @@ -51,8 +51,8 @@ def run_schedules(self, force: bool): schedules: List[NotificationQueue] = get_resource_service("notification_queue").get(req=None, lookup={}) except Exception as e: - logger.error(f"{self.log_msg} Failed to retrieve data to run schedules") logger.exception(e) + logger.error("Failed to retrieve data to run schedules") return for schedule in schedules: @@ -76,7 +76,7 @@ def run_schedules(self, force: bool): self.process_schedule(schedule, user, company, now_utc, user_topic_map.get(user["_id"]) or {}, force) except Exception as e: logger.exception(e) - logger.error(f"{self.log_msg} Failed to run schedule for user {user_id}") + logger.error("Failed to run schedule for user %s", user_id) def process_schedule( self, From 2720c5eec15bdacf2176e7510414140167f99dc7 Mon Sep 17 00:00:00 2001 From: Nikola Stojanovic <68916411+dzonidoo@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:59:49 +0100 Subject: [PATCH 10/22] Change the text on the Sort by drop down options (#661) --- assets/search/components/SearchResultsBar/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/search/components/SearchResultsBar/index.tsx b/assets/search/components/SearchResultsBar/index.tsx index 93c9bcccc..fc1ef087f 100644 --- a/assets/search/components/SearchResultsBar/index.tsx +++ b/assets/search/components/SearchResultsBar/index.tsx @@ -37,11 +37,11 @@ class SearchResultsBarComponent extends React.Component { this.topicNotNull = new URLSearchParams(window.location.search).get('topic') != null; this.sortValues = [ { - value: gettext('Date ↑'), + value: gettext('Newest first'), sortFunction: () => this.setSortQuery('versioncreated:desc'), }, { - value: gettext('Date ↓'), + value: gettext('Oldest first'), sortFunction: () => this.setSortQuery('versioncreated:asc'), }, { From a3b1af0aa977f08c3f9d57edf053926315b06f0b Mon Sep 17 00:00:00 2001 From: Nikola Stojanovic <68916411+dzonidoo@users.noreply.github.com> Date: Thu, 23 Nov 2023 09:54:36 +0100 Subject: [PATCH 11/22] Wire-Filter e2e (#648) * create wire-filter test * changes after review * changes after reivew --- assets/wire/components/WireListItem.tsx | 2 + assets/wire/components/filters/FilterItem.tsx | 2 +- assets/wire/components/filters/FiltersTab.tsx | 7 +- e2e/cypress/e2e/wire/wire_action.cy.js | 76 +++++++++++++++++++ e2e/cypress/support/pages/filter_panel.js | 23 ++++++ e2e/cypress/support/pages/wire.js | 13 ++++ 6 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 e2e/cypress/e2e/wire/wire_action.cy.js create mode 100644 e2e/cypress/support/pages/filter_panel.js diff --git a/assets/wire/components/WireListItem.tsx b/assets/wire/components/WireListItem.tsx index 60623e3b4..53cb74688 100644 --- a/assets/wire/components/WireListItem.tsx +++ b/assets/wire/components/WireListItem.tsx @@ -197,6 +197,8 @@ class WireListItem extends React.Component { onClick={() => onClick(item)} onDoubleClick={() => onDoubleClick(item)} onKeyDown={this.onKeyDown} + data-test-id="wire-item" + data-test-value={item._id} >
diff --git a/assets/wire/components/filters/FilterItem.tsx b/assets/wire/components/filters/FilterItem.tsx index 4d4310851..ec9802be4 100644 --- a/assets/wire/components/filters/FilterItem.tsx +++ b/assets/wire/components/filters/FilterItem.tsx @@ -5,7 +5,7 @@ export default function FilterItem({bucket, group, toggleFilter, groupFilter}: a const isActive = groupFilter.indexOf(bucket.key) !== -1; return ( -
+
{ {!isResetActive && !this.props.resultsFiltered ? null : ([
- @@ -45,13 +69,14 @@ function TextInput({ name={name} className="form-control" value={value} - onChange={onChange} + onChange={readOnly === true ? undefined : onChange} required={required} maxLength={maxLength} disabled={readOnly} placeholder={placeholder} min={min} autoFocus={autoFocus} + onKeyDown={onKeyDown} {...props} /> {error &&
{error}
} @@ -81,6 +106,4 @@ TextInput.propTypes = { TextInput.defaultProps = {autoFocus: false}; -const component: React.ComponentType = TextInput; - -export default component; +export default TextInput; diff --git a/assets/components/TextListInput.tsx b/assets/components/TextListInput.tsx index 9506ee77b..abf49536c 100644 --- a/assets/components/TextListInput.tsx +++ b/assets/components/TextListInput.tsx @@ -80,7 +80,7 @@ class TextListInput extends React.Component { {!readOnly && { + onKeyDown={(event) => { if (event.keyCode === KEYCODES.ENTER || event.keyCode === KEYCODES.DOWN) { event.preventDefault(); diff --git a/assets/interfaces/user.ts b/assets/interfaces/user.ts index 232115fd9..1dc3561a3 100644 --- a/assets/interfaces/user.ts +++ b/assets/interfaces/user.ts @@ -44,3 +44,6 @@ export interface IUser { last_run_time?: TDatetime; }; } + +type IUserProfileEditable = Pick; +export type IUserProfileUpdates = Partial; \ No newline at end of file diff --git a/assets/reducers.ts b/assets/reducers.ts index 9d65bb4bc..2cc5e6905 100644 --- a/assets/reducers.ts +++ b/assets/reducers.ts @@ -40,7 +40,14 @@ import {REMOVE_NEW_ITEMS, SET_NEW_ITEM} from './agenda/actions'; import {SET_ERROR_MESSAGE, toggleValue} from 'utils'; import {topicsReducer} from './topics/reducer'; -export function modalReducer(state?: any, action?: any): any { +export interface IModalState { + modal: string; + data: any; + modalProps: any; + formValid?: boolean; +} + +export function modalReducer(state?: IModalState, action?: any): IModalState | undefined { if (!action) { return state; } @@ -54,19 +61,19 @@ export function modalReducer(state?: any, action?: any): any { }; case CLOSE_MODAL: - return null; + return undefined; case MODAL_FORM_VALID: - return { + return state ? { ...state, formValid: true, - }; + } : state; case MODAL_FORM_INVALID: - return { + return state ? { ...state, formValid: false, - }; + } : state; default: return state; diff --git a/assets/user-profile/actions.ts b/assets/user-profile/actions.ts index 719735c04..7a6caadd5 100644 --- a/assets/user-profile/actions.ts +++ b/assets/user-profile/actions.ts @@ -7,6 +7,7 @@ import {store as userProfileStore} from './store'; import {getLocale} from '../utils'; import {reloadMyTopics as reloadMyAgendaTopics} from '../agenda/actions'; import {reloadMyTopics as reloadMyWireTopics} from '../wire/actions'; +import {IUserProfileUpdates} from 'interfaces/user'; export const GET_TOPICS = 'GET_TOPICS'; export function getTopics(topics: any) { @@ -19,8 +20,8 @@ export function getUser(user: any) { } export const EDIT_USER = 'EDIT_USER'; -export function editUser(event: any) { - return {type: EDIT_USER, event}; +export function editUser(payload: IUserProfileUpdates) { + return {type: EDIT_USER, payload}; } export const INIT_DATA = 'INIT_DATA'; @@ -299,7 +300,7 @@ export function fetchFolders() { const userTopicsUrl = getFoldersUrl(state, false); return Promise.all([ - state.company !== 'None' ? server.get(companyTopicsUrl).then(({_items}: {_items: Array}) => _items) : Promise.resolve([]), + state.company ? server.get(companyTopicsUrl).then(({_items}: {_items: Array}) => _items) : Promise.resolve([]), server.get(userTopicsUrl).then(({_items}: {_items: Array}) => _items), ]).then(([companyFolders, userFolders]) => { dispatch({ diff --git a/assets/user-profile/components/profile/UserProfile.tsx b/assets/user-profile/components/profile/UserProfile.tsx index d840bd56d..0bbe0dfa8 100644 --- a/assets/user-profile/components/profile/UserProfile.tsx +++ b/assets/user-profile/components/profile/UserProfile.tsx @@ -16,18 +16,21 @@ import { setError, openEditTopicNotificationsModal, } from '../../actions'; +import {IUserProfileState} from 'user-profile/reducers'; +import {IUserProfileUpdates} from 'interfaces/user'; interface IProps { user: IUser; - errors: {[key: string]: string}; - onChange(event: React.ChangeEvent): void; + errors: {[field in keyof IUserProfileUpdates]: string[]}; + onChange(updates: IUserProfileUpdates): void; saveUser(): void; setError(errors: {[key: string]: string}): void; fetchUser(userId: IUser['_id']): void; openEditTopicNotificationsModal(): void; + authProviderFeatures: IUserProfileState['authProviderFeatures']; } -class UserProfile extends React.Component { +class UserProfile extends React.PureComponent { static propTypes: any; constructor(props: any) { super(props); @@ -63,7 +66,7 @@ class UserProfile extends React.Component { } render() { - const {user, onChange, errors} = this.props; + const {user, onChange, errors, authProviderFeatures} = this.props; const onCancel = () => this.props.fetchUser(this.props.user._id); const localeOptions = getLocaleInputOptions(); return ( @@ -76,8 +79,8 @@ class UserProfile extends React.Component { name='first_name' label={gettext('First Name')} value={user.first_name} - onChange={onChange} - error={errors ? errors.first_name : null} /> + onChange={(event) => onChange({first_name: event.target.value})} + error={errors?.first_name} />
@@ -85,8 +88,8 @@ class UserProfile extends React.Component { name='last_name' label={gettext('Last Name')} value={user.last_name} - onChange={onChange} - error={errors ? errors.last_name : null} /> + onChange={(event) => onChange({last_name: event.target.value})} + error={errors?.last_name} />
@@ -98,13 +101,26 @@ class UserProfile extends React.Component { />
+ {authProviderFeatures?.change_password === true && ( + + )} +
+ onChange={(event) => onChange({phone: event.target.value})} + error={errors?.phone} />
@@ -112,8 +128,8 @@ class UserProfile extends React.Component { name='mobile' label={gettext('Mobile')} value={user.mobile} - onChange={onChange} - error={errors ? errors.mobile : null} /> + onChange={(event) => onChange({mobile: event.target.value})} + error={errors?.mobile} />
@@ -121,8 +137,8 @@ class UserProfile extends React.Component { name='role' label={gettext('Role')} value={user.role} - onChange={onChange} - error={errors ? errors.role : null} /> + onChange={(event) => onChange({role: event.target.value})} + error={errors?.role} />
@@ -130,7 +146,7 @@ class UserProfile extends React.Component { name='receive_app_notifications' label={gettext('Receive App Notifications')} value={!!user.receive_app_notifications} - onChange={onChange} + onChange={(event) => onChange({receive_app_notifications: event.target.checked})} />
@@ -139,11 +155,10 @@ class UserProfile extends React.Component { name='receive_email' label={gettext('Receive Email Notifications')} value={!!user.receive_email} - onChange={onChange} + onChange={(event) => onChange({receive_email: event.target.checked})} />
-

@@ -174,7 +189,7 @@ class UserProfile extends React.Component { name='locale' label={gettext('Language')} value={user.locale} - onChange={onChange} + onChange={(event) => onChange({locale: event.target.value})} options={localeOptions} defaultOption={getDefaultLocale()} /> @@ -202,15 +217,16 @@ class UserProfile extends React.Component { } } -const mapStateToProps = (state: any) => ({ +const mapStateToProps = (state: IUserProfileState) => ({ user: state.editedUser, errors: state.errors ?? {}, + authProviderFeatures: state.authProviderFeatures, }); const mapDispatchToProps = (dispatch: any) => ({ saveUser: () => dispatch(saveUser()), fetchUser: (userId: IUser['_id']) => dispatch(fetchUser(userId)), - onChange: (event: React.ChangeEvent) => dispatch(editUser(event)), + onChange: (updates: IUserProfileUpdates) => dispatch(editUser(updates)), setError: (errors: {[key: string]: string}) => dispatch(setError(errors)), openEditTopicNotificationsModal: () => dispatch(openEditTopicNotificationsModal()), }); diff --git a/assets/user-profile/reducers.ts b/assets/user-profile/reducers.ts index ab449eda4..27afdad01 100644 --- a/assets/user-profile/reducers.ts +++ b/assets/user-profile/reducers.ts @@ -14,26 +14,48 @@ import { FOLDER_DELETED, } from './actions'; -import {RENDER_MODAL, CLOSE_MODAL, MODAL_FORM_VALID, MODAL_FORM_INVALID, ADD_EDIT_USERS} from 'actions'; -import {GET_COMPANY_USERS} from 'companies/actions'; -import {SET_USER_COMPANY_MONITORING_LIST} from 'monitoring/actions'; +import {RENDER_MODAL, CLOSE_MODAL, MODAL_FORM_VALID, MODAL_FORM_INVALID} from 'actions'; -import {modalReducer} from 'reducers'; +import {IModalState, modalReducer} from 'reducers'; import {GET_NAVIGATIONS, QUERY_NAVIGATIONS} from 'navigations/actions'; import {SET_TOPICS} from '../search/actions'; -import {ITopicFolder} from 'interfaces'; - -export interface IUserProfileStore { - allSections?: Array; - companySections?: any; - seats?: any; +import {ISection, ITopic, ITopicFolder, IUser} from 'interfaces'; + +export interface IUserProfileState { + user: IUser | null; + editedUser: Partial | null; + company: string | null; + topics: ITopic[]; + topicsById: {[_id: ITopic['_id']]: ITopic}; + activeTopicId: ITopic['_id'] | null; + isLoading: boolean; + selectedMenu: 'profile' | 'topics' | 'events' | 'monitoring'; + dropdown: boolean; + displayModal: boolean; + navigations: []; + selectedItem: ITopic | null; + editorFullscreen: boolean; + locators: []; + companyFolders: ITopicFolder[]; + userFolders: ITopicFolder[]; + authProviderFeatures?: { + change_password: boolean; + verify_password: boolean; + }; + errors: {[key: string]: string[]} | null; + modal?: IModalState; + userSections?: ISection[]; + monitoringList?: Array; + monitoringAdministrator?: string; + uiConfigs?: any; + groups?: Array; } -const initialState: any = { +const initialState: IUserProfileState = { user: null, editedUser: null, company: null, - topics: null, + topics: [], topicsById: {}, activeTopicId: null, isLoading: false, @@ -46,15 +68,15 @@ const initialState: any = { locators: [], companyFolders: [], userFolders: [], + errors: {}, }; -export default function itemReducer(state: any = initialState, action: any): IUserProfileStore { - let newSelected, newState; +export default function itemReducer(state: IUserProfileState = initialState, action: any): IUserProfileState { switch (action.type) { case GET_TOPICS: { const topicsById = Object.assign({}, state.topicsById); - const topics = action.topics.map((topic: any) => { + const topics = action.topics.map((topic: ITopic) => { topicsById[topic._id] = topic; return topic; }); @@ -98,11 +120,7 @@ export default function itemReducer(state: any = initialState, action: any): IUs } case EDIT_USER: { - - const target = action.event.target; - const field = target.name; - const editedUser = Object.assign({}, state.editedUser); - editedUser[field] = target.type === 'checkbox' ? target.checked : target.value; + const editedUser = Object.assign({}, state.editedUser, action.payload); return {...state, editedUser, errors: null}; } @@ -119,6 +137,10 @@ export default function itemReducer(state: any = initialState, action: any): IUs monitoringAdministrator: action.data.monitoring_administrator, uiConfigs: action.data.ui_configs, groups: action.data.groups || [], + authProviderFeatures: { + verify_password: action.data.authProviderFeatures?.verify_password === true, + change_password: action.data.authProviderFeatures?.change_password === true, + }, }; } @@ -176,33 +198,6 @@ export default function itemReducer(state: any = initialState, action: any): IUs editorFullscreen: action.payload, }; - case GET_COMPANY_USERS: - return {...state, monitoringProfileUsers: action.data}; - - case SET_USER_COMPANY_MONITORING_LIST: - newSelected = state.selectedItem && (action.data || []).find((w: any) => w._id === state.selectedItem._id); - newState = { - ...state, - monitoringList: action.data, - - }; - - if (newSelected) { - newState.selectedItem = newSelected; - } - - return newState; - - case ADD_EDIT_USERS: { - return { - ...state, - editUsers: [ - ...(state.editUsers || []), - ...action.data, - ] - }; - } - case RECIEVE_FOLDERS: return { ...state, diff --git a/assets/users/components/EditUser.tsx b/assets/users/components/EditUser.tsx index 6b6004864..95df497fd 100644 --- a/assets/users/components/EditUser.tsx +++ b/assets/users/components/EditUser.tsx @@ -29,7 +29,6 @@ import {getUserStateLabelDetails} from 'company-admin/components/CompanyUserList import {companyProductSeatsSelector, companySectionListSelector, sectionListSelector} from 'company-admin/selectors'; import {IUser} from 'interfaces/user'; -import {IUserProfileStore} from 'user-profile/reducers'; import ActionButton from 'components/ActionButton'; const getCompanyOptions = (companies: Array) => companies.map((company) => ({value: company._id, text: company.name})); @@ -40,6 +39,12 @@ interface IReduxStoreProps { seats: any; } +interface IUserProfileStore { + allSections?: Array; + companySections?: any; + seats?: any; +} + interface IProps extends IReduxStoreProps { original: IUser; user: IUser; diff --git a/mypy-requirements.txt b/mypy-requirements.txt index 256fe9421..565df631d 100644 --- a/mypy-requirements.txt +++ b/mypy-requirements.txt @@ -1,10 +1,13 @@ -mypy==0.901 -types-Flask==0.1.2 -types-Jinja2==0.1.3 -types-itsdangerous==1.1.3 -types-python-dateutil==0.1.2 -types-pytz==0.1.0 -types-requests==0.1.8 -types-tzlocal==0.1.0 -types-Werkzeug==0.1.8 -typing-extensions==3.10.0.0 \ No newline at end of file +mypy +types-Flask +types-Jinja2 +types-itsdangerous +types-python-dateutil +types-pytz +types-requests +types-tzlocal +types-Werkzeug +types-protobuf +typing-extensions + +-r requirements.txt diff --git a/newsroom/agenda/views.py b/newsroom/agenda/views.py index 62be8604d..c07a4fe65 100644 --- a/newsroom/agenda/views.py +++ b/newsroom/agenda/views.py @@ -117,14 +117,14 @@ def search(): def get_view_data() -> Dict: user = get_user_required() topics = get_user_topics(user["_id"]) if user else [] - company = get_company(user) or {} + company = get_company(user) products = get_products_by_company(company, product_type="agenda") if company else [] check_user_has_products(user, products) return { "user": user, - "company": str(user["company"]) if user and user.get("company") else None, + "company": str(user.get("company")) if user and user.get("company") else None, "topics": [t for t in topics if t.get("topic_type") == "agenda"], "formats": [ {"format": f["format"], "name": f["name"]} @@ -139,8 +139,8 @@ def get_view_data() -> Dict: if company else [], "saved_items": get_resource_service("agenda").get_saved_items_count(), - "events_only": company.get("events_only", False), - "restrict_coverage_info": company.get("restrict_coverage_info", False), + "events_only": company.get("events_only", False) if company else False, + "restrict_coverage_info": company.get("restrict_coverage_info", False) if company else False, "locators": get_vocabulary("locators"), "ui_config": get_resource_service("ui_config").get_section_config("agenda"), "groups": app.config.get("AGENDA_GROUPS", []), diff --git a/newsroom/auth/firebase.py b/newsroom/auth/firebase.py new file mode 100644 index 000000000..e69de29bb diff --git a/newsroom/auth/forms.py b/newsroom/auth/forms.py index 93ae48c38..639f417b4 100644 --- a/newsroom/auth/forms.py +++ b/newsroom/auth/forms.py @@ -47,6 +47,12 @@ class ResetPasswordForm(FlaskForm): Length(min=8), EqualTo("new_password2", message=lazy_gettext("Passwords must match.")), ] - old_password = PasswordField(lazy_gettext("Old password"), validators=[]) + old_password = PasswordField( + lazy_gettext("Current password"), + validators=[], + ) new_password = PasswordField(lazy_gettext("New password"), validators=match_password2) new_password2 = PasswordField(lazy_gettext("Confirm new password"), validators=[DataRequired()]) + + email = StringField(lazy_gettext("Email"), validators=[]) # for autocomplete + firebase_status = StringField("firebase_status", validators=[]) # for firebase status code diff --git a/newsroom/auth/oauth.py b/newsroom/auth/oauth.py index 20f0ca1de..e46a0e15e 100644 --- a/newsroom/auth/oauth.py +++ b/newsroom/auth/oauth.py @@ -87,7 +87,7 @@ def redirect_with_error(error_str): return redirect_with_error(gettext("Account is disabled")) auth_provider = get_company_auth_provider(company) - if auth_provider["auth_type"] != AuthProviderType.GOOGLE_OAUTH.value: + if auth_provider.type != AuthProviderType.GOOGLE_OAUTH: return redirect_with_error(gettext("Invalid login type, Oauth not enabled for your user")) # If the user is not yet validated, then validate it now diff --git a/newsroom/auth/providers.py b/newsroom/auth/providers.py new file mode 100644 index 000000000..efebde00f --- /dev/null +++ b/newsroom/auth/providers.py @@ -0,0 +1,62 @@ +import abc + +from newsroom.types import AuthProviderConfig, AuthProviderType + + +class AuthProviderFeatures(object): + verify_email: bool + change_password: bool + + def __init__(self, *, verify_email=False, change_password=False): + self.verify_email = verify_email + self.change_password = change_password + + def __iter__(self): + """Needed for export to json for client.""" + return iter( + [ + ("verify_email", self.verify_email), + ("change_password", self.change_password), + ] + ) + + +class AuthProvider(abc.ABC): + type: AuthProviderType + config: AuthProviderConfig + features = AuthProviderFeatures() + + def __init__(self, config: AuthProviderConfig): + self._id = config["_id"] + self.name = config["name"] + self.config = config + + @classmethod + def get_provider(cls, data: AuthProviderConfig): + if data["auth_type"] == AuthProviderType.FIREBASE: + return FirebaseAuthProvider(data) + if data["auth_type"] == AuthProviderType.GOOGLE_OAUTH: + return GoogleOauthAuthProvider(data) + if data["auth_type"] == AuthProviderType.SAML: + return SAMLAuthProvider(data) + return PasswordAuthProvider(data) + + +class PasswordAuthProvider(AuthProvider): + type = AuthProviderType.PASSWORD + features = AuthProviderFeatures(verify_email=True, change_password=True) + + +class GoogleOauthAuthProvider(AuthProvider): + type = AuthProviderType.GOOGLE_OAUTH + features = AuthProviderFeatures() + + +class SAMLAuthProvider(AuthProvider): + type = AuthProviderType.SAML + features = AuthProviderFeatures() + + +class FirebaseAuthProvider(AuthProvider): + type = AuthProviderType.FIREBASE + features = AuthProviderFeatures(change_password=True) diff --git a/newsroom/auth/utils.py b/newsroom/auth/utils.py index 306d8449d..5135afead 100644 --- a/newsroom/auth/utils.py +++ b/newsroom/auth/utils.py @@ -7,11 +7,12 @@ from typing import Dict, Optional from flask import current_app as app from flask_babel import _ +from newsroom.auth.providers import AuthProvider from newsroom.exceptions import AuthorizationError from newsroom.user_roles import UserRole from superdesk.utc import utcnow from newsroom.auth import get_user, get_company -from newsroom.types import User, UserData, Company, AuthProvider, AuthProviderType +from newsroom.types import User, UserData, Company, AuthProviderType from newsroom.utils import ( get_random_string, is_valid_user, @@ -71,7 +72,7 @@ def redirect_with_error(error_str): return redirect_with_error(_("Company has expired")) elif not is_account_enabled(user): return redirect_with_error(_("Account is disabled")) - elif company_auth_provider["auth_type"] != auth_type.value: + elif company_auth_provider.type != auth_type: return redirect_with_error( _("Invalid login type, %(type)s not enabled for your user", type=auth_type.value) ) @@ -210,9 +211,14 @@ def user_can_manage_company(company_id) -> bool: def get_company_auth_provider(company: Optional[Company] = None) -> AuthProvider: - providers: Dict[str, AuthProvider] = {provider["_id"]: provider for provider in app.config["AUTH_PROVIDERS"]} + providers: Dict[str, AuthProvider] = { + provider["_id"]: AuthProvider.get_provider(provider) for provider in app.config["AUTH_PROVIDERS"] + } + + provider_id = "newshub" + if company and company.get("auth_provider"): + provider_id = company.get("auth_provider", "newshub") - provider_id = (company or {}).get("auth_provider") or "newshub" return providers.get(provider_id) or providers["newshub"] diff --git a/newsroom/auth/views.py b/newsroom/auth/views.py index bcfa59bd5..684809aba 100644 --- a/newsroom/auth/views.py +++ b/newsroom/auth/views.py @@ -1,19 +1,31 @@ +from typing import Literal import flask import bcrypt +import logging +import google.oauth2.id_token from bson import ObjectId from flask import current_app as app, abort from flask_babel import gettext from superdesk import get_resource_service from superdesk.utc import utcnow +from google.auth.transport import requests from newsroom.types import AuthProviderType from newsroom.decorator import admin_only, login_required -from newsroom.auth import blueprint, get_auth_user_by_email, get_user_by_email, get_company_from_user +from newsroom.auth import ( + blueprint, + get_auth_user_by_email, + get_company, + get_user_by_email, + get_company_from_user, + get_user_required, +) from newsroom.auth.forms import SignupForm, LoginForm, TokenForm, ResetPasswordForm from newsroom.auth.utils import ( clear_user_session, redirect_to_next_url, + sign_user_by_email, start_user_session, send_token, get_company_auth_provider, @@ -32,6 +44,9 @@ from .token import generate_auth_token, verify_auth_token +logger = logging.getLogger(__name__) + + @blueprint.route("/login", methods=["GET", "POST"]) @limiter.limit("60/minute") def login(): @@ -45,10 +60,9 @@ def login(): if is_valid_user(user, company): auth_provider = get_company_auth_provider(company) - if auth_provider["auth_type"] != AuthProviderType.PASSWORD.value and not is_admin(user): + if auth_provider.type != AuthProviderType.PASSWORD and not is_admin(user): # Password login is not enabled for this user's company, and the user is not an admin - provider_name = auth_provider["name"] - flask.flash(gettext(f"Invalid login type, please login using '{provider_name}'"), "danger") + flask.flash(gettext(f"Invalid login type, please login using '{auth_provider.name}'"), "danger") else: user_auth = get_auth_user_by_email(user["email"]) if not _is_password_valid(form.password.data.encode("UTF-8"), user_auth): @@ -58,7 +72,7 @@ def login(): update_user_last_active(user) return redirect_to_next_url() - return flask.render_template("login.html", form=form) + return flask.render_template("login.html", form=form, firebase=app.config.get("FIREBASE_ENABLED")) def email_has_exceeded_max_login_attempts(email): @@ -169,7 +183,7 @@ def login_with_token(token): @blueprint.route("/logout") def logout(): clear_user_session() - return flask.redirect(flask.url_for("wire.index")) + return flask.redirect(flask.url_for("auth.login", logout=1)) @blueprint.route("/signup", methods=["GET", "POST"]) @@ -237,21 +251,32 @@ def reset_password(token): @blueprint.route("/token/", methods=["GET", "POST"]) -def token(token_type): +def token(token_type: Literal["reset_password", "validate"]): + """Get token to reset password or validate email.""" form = TokenForm() if form.validate_on_submit(): user = get_user_by_email(form.email.data) company = get_company_from_user(user) if user else None auth_provider = get_company_auth_provider(company) - if auth_provider.get("features", {}).get("verify_email"): + + if auth_provider.features.verify_email: send_token(user, token_type) + flask.flash( gettext("A reset password token has been sent to your email address."), "success", ) + return flask.redirect(flask.url_for("auth.login")) - return flask.render_template("request_token.html", form=form, token_type=token_type) + return flask.render_template( + "request_token.html", form=form, token_type=token_type, firebase=app.config.get("FIREBASE_ENABLED") + ) + + +@blueprint.route("/reset_password_done") +def reset_password_confirmation(): + return flask.render_template("request_token_confirm.html") @blueprint.route("/login_locale", methods=["POST"]) @@ -283,3 +308,60 @@ def impersonate_stop(): start_user_session(user) flask.session.pop("auth_user") return flask.redirect(flask.url_for("settings.app", app_id="users")) + + +@blueprint.route("/change_password", methods=["GET", "POST"]) +@login_required +def change_password(): + form = ResetPasswordForm() + user = get_user_required() + company = get_company(user) + auth_provider = get_company_auth_provider(company) + form.email.process_data(user["email"]) + + if form.validate_on_submit(): + if auth_provider.type == AuthProviderType.FIREBASE: + if form.data.get("firebase_status"): + firebase_status = form.data["firebase_status"] + if firebase_status == "OK": + flask.flash(gettext("Your password has been changed."), "success") + elif firebase_status == "auth/wrong-password": + flask.flash(gettext("Wrong current password."), "error") + else: + logger.warning("Unhandled firebase error %s", firebase_status) + flask.flash(gettext("Could not change your password. Please contact us for assistance."), "warning") + elif auth_provider.type == AuthProviderType.PASSWORD: + updates = { + "password": form.new_password.data, + } + get_resource_service("users").patch(id=ObjectId(user["_id"]), updates=updates) + flask.flash(gettext("Your password has been changed."), "success") + else: + flask.flash(gettext("Change password is not available."), "warning") + return flask.redirect(flask.url_for("auth.change_password")) + + return flask.render_template( + "change_password.html", form=form, user=user, firebase=app.config.get("FIREBASE_ENABLED") + ) + + +@blueprint.route("/firebase_auth_token") +def firebase_auth_token(): + token = flask.request.args.get("token") + firebase_request_adapter = requests.Request() + if token: + try: + claims = google.oauth2.id_token.verify_firebase_token( + token, + audience=app.config["FIREBASE_CLIENT_CONFIG"]["projectId"], + request=firebase_request_adapter, + ) + except ValueError as err: + logger.error(err) + flask.flash(gettext("User token is not valid"), "danger") + return flask.redirect(flask.url_for("auth.login", token_error=1)) + + email = claims["email"] + return sign_user_by_email(email, auth_type=AuthProviderType.FIREBASE, validate_login_attempt=True) + + return flask.redirect(flask.url_for("auth.login")) diff --git a/newsroom/companies/views.py b/newsroom/companies/views.py index ab9dee5a7..2adf62ae9 100644 --- a/newsroom/companies/views.py +++ b/newsroom/companies/views.py @@ -14,6 +14,7 @@ from newsroom.decorator import admin_only, account_manager_only, login_required from newsroom.companies import blueprint +from newsroom.types import AuthProviderConfig from newsroom.utils import ( query_resource, find_one, @@ -28,6 +29,13 @@ def get_company_types_options(company_types): def get_settings_data(): + def render_provider(provider: AuthProviderConfig) -> Dict[str, str]: + return { + "_id": provider["_id"], + "name": str(provider["name"]), + "auth_type": provider["auth_type"].value, + } + return { "companies": list(query_resource("companies")), "services": app.config["SERVICES"], @@ -38,7 +46,7 @@ def get_settings_data(): "ui_config": get_resource_service("ui_config").get_section_config("companies"), "countries": app.countries, "sso_enabled": bool(app.config.get("SAML_CLIENTS") or app.config.get("SAML_PATH")), - "auth_providers": app.config.get("AUTH_PROVIDERS"), + "auth_providers": [render_provider(provider) for provider in app.config.get("AUTH_PROVIDERS") or []], } diff --git a/newsroom/templates/change_password.html b/newsroom/templates/change_password.html new file mode 100644 index 000000000..fd06ad434 --- /dev/null +++ b/newsroom/templates/change_password.html @@ -0,0 +1,62 @@ +{% extends "layout_wire.html" %} + +{% block contentMain %} + +

+
+
+ {% include "login_messages.html" %} +
+
+
+
+

{{ gettext("Change Password") }}

+
+
+
+ {{ form.csrf_token }} + +
+ + {{ form.email(autocomplete="username") }} + {{ form.firebase_status(type="hidden", id="firebase-status") }} +
+ + {% include "form_alerts.html" %} + + {% if not token %} +
+ + {{ form.old_password(class="form-control", id="password", required="true", autocomplete="current-password") }} +
+ {% endif %} + +
+ + {{ form.new_password(class="form-control", id="new_password", required="true", pattern=".{8,}", title=gettext("Please use 8 or more characters."), autocomplete="new-password") }} +
+ +
+ + {{ form.new_password2(class="form-control", id="new_password2", required="true", autocomplete="new-password") }} +
+ + +
+
+
+
+
+
+
+ +
{{ user_email }}
+ +{% endblock %} + +{% block script %} + {% if firebase %} + {% include "firebase_config.html" %} + {{ javascript_tag('firebase_change_password_js') | safe }} + {% endif %} +{% endblock %} diff --git a/newsroom/templates/firebase_config.html b/newsroom/templates/firebase_config.html new file mode 100644 index 000000000..67672b2d1 --- /dev/null +++ b/newsroom/templates/firebase_config.html @@ -0,0 +1,6 @@ + diff --git a/newsroom/templates/form_alerts.html b/newsroom/templates/form_alerts.html index ebea07608..ca38d4d08 100644 --- a/newsroom/templates/form_alerts.html +++ b/newsroom/templates/form_alerts.html @@ -2,7 +2,7 @@ diff --git a/newsroom/templates/login.html b/newsroom/templates/login.html index 6ac57823a..8604f297d 100644 --- a/newsroom/templates/login.html +++ b/newsroom/templates/login.html @@ -1,52 +1 @@ -{% extends "layout_wire.html" %} - -{% block contentMain %} - - -{% endblock %} +{% extends "login_layout.html" %} diff --git a/newsroom/templates/login_form.html b/newsroom/templates/login_form.html index 901146770..f5126ca98 100644 --- a/newsroom/templates/login_form.html +++ b/newsroom/templates/login_form.html @@ -5,11 +5,11 @@
- {{ form.email(class="form-control", id="email", required="true") }} + {{ form.email(class="form-control", id="email", required="true", autocomplete="username") }}
- {{ form.password(class="form-control", id="password", required="true") }} + {{ form.password(class="form-control", id="password", required="true", autocomplete="current-password") }}
diff --git a/newsroom/templates/login_layout.html b/newsroom/templates/login_layout.html new file mode 100644 index 000000000..5fbf020cf --- /dev/null +++ b/newsroom/templates/login_layout.html @@ -0,0 +1,73 @@ +{% extends "layout_wire.html" %} + +{% block contentMain %} + + +{% endblock %} + +{% block script %} + {% if firebase %} + {% include "firebase_config.html" %} + {{ javascript_tag('firebase_login_js') | safe }} + {% endif %} +{% endblock %} diff --git a/newsroom/templates/request_token.html b/newsroom/templates/request_token.html index fbbf4090a..4cbe1ead8 100644 --- a/newsroom/templates/request_token.html +++ b/newsroom/templates/request_token.html @@ -1,40 +1,38 @@ -{% extends "layout_wire.html" %} - -{% block contentMain %} - -
-
-
-
-
-
-
-

{{ gettext("Password Reset") }}

-
-
-
- - {{ form.csrf_token }} - - {% include "form_alerts.html" %} - -
- - {{ form.email(class="form-control", id="email", required="true") }} -
- - {% if token_type=='validate' %} - - {% else %} - - {% endif %} -
-
-
-
-
-
+{% extends "login_layout.html" %} + +{% block login_title %} +

{{ gettext("Password Reset") }}

+{% endblock %} + +{% block login_body %} +
+ + {{ form.csrf_token }} + + {% include "form_alerts.html" %} + +
+ + {{ form.email(class="form-control", id="email", required="true", autocomplete="username") }}
- {% include "login_messages.html" %} -
+ + {% if token_type=='validate' %} + + {% else %} + + {% endif %} + +{% endblock %} + +{% block login_footer %} +{% endblock %} + +{% block script %} + {% if firebase %} + {% include "firebase_config.html" %} + + {{ javascript_tag('firebase_reset_password_js') | safe }} + {% endif %} {% endblock %} diff --git a/newsroom/templates/request_token_done.html b/newsroom/templates/request_token_done.html new file mode 100644 index 000000000..e69de29bb diff --git a/newsroom/templates/scripts.html b/newsroom/templates/scripts.html index e718624c1..93395efa5 100644 --- a/newsroom/templates/scripts.html +++ b/newsroom/templates/scripts.html @@ -1,3 +1,4 @@ +{% if session.get("user") %} +{% endif %} {{ javascript_tag('newsroom_js') | safe }} diff --git a/newsroom/types.py b/newsroom/types.py index 61818be88..1fdef5aca 100644 --- a/newsroom/types.py +++ b/newsroom/types.py @@ -1,7 +1,15 @@ from bson import ObjectId -from typing import Dict, List, TypedDict, Any +from typing import Dict, List, TypedDict, Any, Union, NoReturn from datetime import datetime from enum import Enum +from flask_babel import LazyString + + +def assert_never(value: NoReturn) -> NoReturn: + assert False, f"Unhandled value {value}" + + +NameString = Union[str, LazyString] class Product(TypedDict, total=False): @@ -49,18 +57,20 @@ class UserDashboardEntry(TypedDict): topic_ids: List[ObjectId] -class UserData(TypedDict, total=False): - _id: ObjectId +class UserRequired(TypedDict): + email: str + user_type: str + + +class UserData(UserRequired, total=False): first_name: str last_name: str - email: str phone: str mobile: str role: str signup_details: Dict[str, Any] country: str company: ObjectId - user_type: str is_validated: bool is_enabled: bool is_approved: bool @@ -82,7 +92,7 @@ class UserData(TypedDict, total=False): class User(UserData): - pass + _id: ObjectId class UserAuth(TypedDict): @@ -98,22 +108,21 @@ class AuthProviderType(Enum): PASSWORD = "password" GOOGLE_OAUTH = "google_oauth" SAML = "saml" + FIREBASE = "firebase" -class AuthProviderFeatures(TypedDict, total=False): - verify_email: bool - - -class AuthProvider(TypedDict): +class AuthProviderConfig(TypedDict): _id: str - name: str + name: NameString auth_type: AuthProviderType - features: AuthProviderFeatures -class Company(TypedDict, total=False): +class CompanyRequired(TypedDict): _id: ObjectId name: str + + +class Company(CompanyRequired, total=False): products: List[ProductRef] sections: Dict[str, bool] restrict_coverage_info: bool diff --git a/newsroom/users/views.py b/newsroom/users/views.py index c3b27a0d3..697eb6c51 100644 --- a/newsroom/users/views.py +++ b/newsroom/users/views.py @@ -9,7 +9,7 @@ from werkzeug.exceptions import BadRequest, NotFound from newsroom.user_roles import UserRole -from newsroom.auth import get_user, get_user_by_email, get_company +from newsroom.auth import get_user_by_email, get_company, get_user_required from newsroom.auth.utils import ( send_token, add_token_data, @@ -48,17 +48,19 @@ def get_settings_data(): def get_view_data(): - user = get_user() - company = user["company"] if user and user.get("company") else None + user = get_user_required() + company = get_company(user) + auth_provider = get_company_auth_provider(company) rv = { "user": user if user else None, - "company": str(company), + "company": str(company["_id"]) if company else "", "topics": get_user_topics(user["_id"]) if user else [], "companyName": get_user_company_name(user), "locators": get_vocabulary("locators"), "monitoring_list": get_monitoring_for_company(user), "ui_configs": {config["_id"]: config for config in query_resource("ui_config")}, "groups": app.config.get("WIRE_GROUPS", []), + "authProviderFeatures": dict(auth_provider.features), } if app.config.get("ENABLE_MONITORING"): @@ -150,12 +152,12 @@ def create(): company = get_company(new_user) auth_provider = get_company_auth_provider(company) - if auth_provider.get("features", {}).get("verify_email"): + if auth_provider.features.verify_email: add_token_data(new_user) ids = get_resource_service("users").post([new_user]) - if auth_provider.get("features", {}).get("verify_email"): + if auth_provider.features.verify_email: send_token(new_user, token_type="new_account", update_token=False) return jsonify({"success": True, "_id": ids[0]}), 201 @@ -177,7 +179,7 @@ def resent_invite(_id): elif user_is_company_admin and (company is None or user["company"] != ObjectId(company["_id"])): # Company admins can only resent invites for members of their company only flask.abort(403) - elif not auth_provider.get("features", {}).get("verify_email"): + elif not auth_provider.features.verify_email: # Can only regenerate new token if ``verify_email`` is enabled in ``AuthProvider`` flask.abort(403) diff --git a/newsroom/web/default_settings.py b/newsroom/web/default_settings.py index 6a5dbd8eb..0cba3ac53 100644 --- a/newsroom/web/default_settings.py +++ b/newsroom/web/default_settings.py @@ -1,9 +1,9 @@ import os import pathlib -from typing import List import tzlocal import logging +from typing import List from kombu import Queue, Exchange from celery.schedules import crontab from superdesk.default_settings import strtobool, env, local_to_utc_hour @@ -54,6 +54,8 @@ CACHE_URL, ) +from newsroom.types import AuthProviderConfig, AuthProviderType + logger = logging.getLogger() DEBUG = strtobool(os.environ.get("NEWSROOM_DEBUG", "false")) @@ -640,16 +642,16 @@ "location.name", ] + #: The available authentication providers #: #: .. versionadded:: 2.5.0 #: -AUTH_PROVIDERS = [ +AUTH_PROVIDERS: List[AuthProviderConfig] = [ { "_id": "newshub", "name": lazy_gettext("Newshub"), - "auth_type": "password", - "features": {"verify_email": True}, + "auth_type": AuthProviderType.PASSWORD, } ] @@ -660,3 +662,12 @@ #: .. versionadded: 2.5.0 #: AGENDA_SHOW_MULTIDAY_ON_START_ONLY = True + +FIREBASE_CLIENT_CONFIG = { + "apiKey": env("FIREBASE_API_KEY"), + "authDomain": env("FIREBASE_AUTH_DOMAIN"), + "projectId": env("FIREBASE_PROJECT_ID"), + "messagingSenderId": env("FIREBASE_SENDER_ID"), +} + +FIREBASE_ENABLED = bool(FIREBASE_CLIENT_CONFIG["apiKey"] and FIREBASE_CLIENT_CONFIG["authDomain"]) diff --git a/package-lock.json b/package-lock.json index f38c2692f..3e14d8675 100644 --- a/package-lock.json +++ b/package-lock.json @@ -436,6 +436,1000 @@ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==" }, + "@firebase/analytics": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.0.tgz", + "integrity": "sha512-Locv8gAqx0e+GX/0SI3dzmBY5e9kjVDtD+3zCFLJ0tH2hJwuCAiL+5WkHuxKj92rqQj/rvkBUCfA1ewlX2hehg==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/analytics-compat": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.6.tgz", + "integrity": "sha512-4MqpVLFkGK7NJf/5wPEEP7ePBJatwYpyjgJ+wQHQGHfzaCDgntOnl9rL2vbVGGKCnRqWtZDIWhctB86UWXaX2Q==", + "requires": { + "@firebase/analytics": "0.10.0", + "@firebase/analytics-types": "0.8.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/analytics-types": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.0.tgz", + "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==" + }, + "@firebase/app": { + "version": "0.9.13", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.13.tgz", + "integrity": "sha512-GfiI1JxJ7ecluEmDjPzseRXk/PX31hS7+tjgBopL7XjB2hLUdR+0FTMXy2Q3/hXezypDvU6or7gVFizDESrkXw==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/app-check": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.0.tgz", + "integrity": "sha512-dRDnhkcaC2FspMiRK/Vbp+PfsOAEP6ZElGm9iGFJ9fDqHoPs0HOPn7dwpJ51lCFi1+2/7n5pRPGhqF/F03I97g==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/app-check-compat": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.7.tgz", + "integrity": "sha512-cW682AxsyP1G+Z0/P7pO/WT2CzYlNxoNe5QejVarW2o5ZxeWSSPAiVEwpEpQR/bUlUmdeWThYTMvBWaopdBsqw==", + "requires": { + "@firebase/app-check": "0.8.0", + "@firebase/app-check-types": "0.5.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/app-check-interop-types": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.0.tgz", + "integrity": "sha512-xAxHPZPIgFXnI+vb4sbBjZcde7ZluzPPaSK7Lx3/nmuVk4TjZvnL8ONnkd4ERQKL8WePQySU+pRcWkh8rDf5Sg==" + }, + "@firebase/app-check-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.0.tgz", + "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==" + }, + "@firebase/app-compat": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.13.tgz", + "integrity": "sha512-j6ANZaWjeVy5zg6X7uiqh6lM6o3n3LD1+/SJFNs9V781xyryyZWXe+tmnWNWPkP086QfJoNkWN9pMQRqSG4vMg==", + "requires": { + "@firebase/app": "0.9.13", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/app-types": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", + "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==" + }, + "@firebase/auth": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.23.2.tgz", + "integrity": "sha512-dM9iJ0R6tI1JczuGSxXmQbXAgtYie0K4WvKcuyuSTCu9V8eEDiz4tfa1sO3txsfvwg7nOY3AjoCyMYEdqZ8hdg==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "@firebase/auth-compat": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.4.2.tgz", + "integrity": "sha512-Q30e77DWXFmXEt5dg5JbqEDpjw9y3/PcP9LslDPR7fARmAOTIY9MM6HXzm9KC+dlrKH/+p6l8g9ifJiam9mc4A==", + "requires": { + "@firebase/auth": "0.23.2", + "@firebase/auth-types": "0.12.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "@firebase/auth-interop-types": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", + "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==" + }, + "@firebase/auth-types": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.0.tgz", + "integrity": "sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA==" + }, + "@firebase/component": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.4.tgz", + "integrity": "sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA==", + "requires": { + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/database": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.4.tgz", + "integrity": "sha512-+Ea/IKGwh42jwdjCyzTmeZeLM3oy1h0mFPsTy6OqCWzcu/KFqRAr5Tt1HRCOBlNOdbh84JPZC47WLU18n2VbxQ==", + "requires": { + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/database-compat": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.4.tgz", + "integrity": "sha512-kuAW+l+sLMUKBThnvxvUZ+Q1ZrF/vFJ58iUY9kAcbX48U03nVzIF6Tmkf0p3WVQwMqiXguSgtOPIB6ZCeF+5Gg==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/database": "0.14.4", + "@firebase/database-types": "0.10.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/database-types": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.4.tgz", + "integrity": "sha512-dPySn0vJ/89ZeBac70T+2tWWPiJXWbmRygYv0smT5TfE3hDrQ09eKMF3Y+vMlTdrMWq7mUdYW5REWPSGH4kAZQ==", + "requires": { + "@firebase/app-types": "0.9.0", + "@firebase/util": "1.9.3" + } + }, + "@firebase/firestore": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.13.0.tgz", + "integrity": "sha512-NwcnU+madJXQ4fbLkGx1bWvL612IJN/qO6bZ6dlPmyf7QRyu5azUosijdAN675r+bOOJxMtP1Bv981bHBXAbUg==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "@firebase/webchannel-wrapper": "0.10.1", + "@grpc/grpc-js": "~1.7.0", + "@grpc/proto-loader": "^0.6.13", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "@firebase/firestore-compat": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.12.tgz", + "integrity": "sha512-mazuNGAx5Kt9Nph0pm6ULJFp/+j7GSsx+Ncw1GrnKl+ft1CQ4q2LcUssXnjqkX2Ry0fNGqUzC1mfIUrk9bYtjQ==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/firestore": "3.13.0", + "@firebase/firestore-types": "2.5.1", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/firestore-types": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.1.tgz", + "integrity": "sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw==" + }, + "@firebase/functions": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.10.0.tgz", + "integrity": "sha512-2U+fMNxTYhtwSpkkR6WbBcuNMOVaI7MaH3cZ6UAeNfj7AgEwHwMIFLPpC13YNZhno219F0lfxzTAA0N62ndWzA==", + "requires": { + "@firebase/app-check-interop-types": "0.3.0", + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.4", + "@firebase/messaging-interop-types": "0.2.0", + "@firebase/util": "1.9.3", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "@firebase/functions-compat": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.5.tgz", + "integrity": "sha512-uD4jwgwVqdWf6uc3NRKF8cSZ0JwGqSlyhPgackyUPe+GAtnERpS4+Vr66g0b3Gge0ezG4iyHo/EXW/Hjx7QhHw==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/functions": "0.10.0", + "@firebase/functions-types": "0.6.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/functions-types": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.0.tgz", + "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==" + }, + "@firebase/installations": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.4.tgz", + "integrity": "sha512-u5y88rtsp7NYkCHC3ElbFBrPtieUybZluXyzl7+4BsIz4sqb4vSAuwHEUgCgCeaQhvsnxDEU6icly8U9zsJigA==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", + "idb": "7.0.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/installations-compat": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.4.tgz", + "integrity": "sha512-LI9dYjp0aT9Njkn9U4JRrDqQ6KXeAmFbRC0E7jI7+hxl5YmRWysq5qgQl22hcWpTk+cm3es66d/apoDU/A9n6Q==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/installations-types": "0.5.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/installations-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.0.tgz", + "integrity": "sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg==" + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/messaging": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.4.tgz", + "integrity": "sha512-6JLZct6zUaex4g7HI3QbzeUrg9xcnmDAPTWpkoMpd/GoSVWH98zDoWXMGrcvHeCAIsLpFMe4MPoZkJbrPhaASw==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/messaging-interop-types": "0.2.0", + "@firebase/util": "1.9.3", + "idb": "7.0.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/messaging-compat": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.4.tgz", + "integrity": "sha512-lyFjeUhIsPRYDPNIkYX1LcZMpoVbBWXX4rPl7c/rqc7G+EUea7IEtSt4MxTvh6fDfPuzLn7+FZADfscC+tNMfg==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/messaging": "0.12.4", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/messaging-interop-types": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz", + "integrity": "sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ==" + }, + "@firebase/performance": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.4.tgz", + "integrity": "sha512-HfTn/bd8mfy/61vEqaBelNiNnvAbUtME2S25A67Nb34zVuCSCRIX4SseXY6zBnOFj3oLisaEqhVcJmVPAej67g==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/performance-compat": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.4.tgz", + "integrity": "sha512-nnHUb8uP9G8islzcld/k6Bg5RhX62VpbAb/Anj7IXs/hp32Eb2LqFPZK4sy3pKkBUO5wcrlRWQa6wKOxqlUqsg==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/performance": "0.6.4", + "@firebase/performance-types": "0.2.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/performance-types": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.0.tgz", + "integrity": "sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA==" + }, + "@firebase/remote-config": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.4.tgz", + "integrity": "sha512-x1ioTHGX8ZwDSTOVp8PBLv2/wfwKzb4pxi0gFezS5GCJwbLlloUH4YYZHHS83IPxnua8b6l0IXUaWd0RgbWwzQ==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/remote-config-compat": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.4.tgz", + "integrity": "sha512-FKiki53jZirrDFkBHglB3C07j5wBpitAaj8kLME6g8Mx+aq7u9P7qfmuSRytiOItADhWUj7O1JIv7n9q87SuwA==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/remote-config": "0.4.4", + "@firebase/remote-config-types": "0.3.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/remote-config-types": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz", + "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==" + }, + "@firebase/storage": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.11.2.tgz", + "integrity": "sha512-CtvoFaBI4hGXlXbaCHf8humajkbXhs39Nbh6MbNxtwJiCqxPy9iH3D3CCfXAvP0QvAAwmJUTK3+z9a++Kc4nkA==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "@firebase/storage-compat": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.2.tgz", + "integrity": "sha512-wvsXlLa9DVOMQJckbDNhXKKxRNNewyUhhbXev3t8kSgoCotd1v3MmqhKKz93ePhDnhHnDs7bYHy+Qa8dRY6BXw==", + "requires": { + "@firebase/component": "0.6.4", + "@firebase/storage": "0.11.2", + "@firebase/storage-types": "0.8.0", + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/storage-types": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.0.tgz", + "integrity": "sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg==" + }, + "@firebase/util": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.3.tgz", + "integrity": "sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==", + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@firebase/webchannel-wrapper": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.1.tgz", + "integrity": "sha512-Dq5rYfEpdeel0bLVN+nfD1VWmzCkK+pJbSjIawGE+RY4+NIJqhbUDDQjvV0NUK84fMfwxvtFoCtEe70HfZjFcw==" + }, + "@grpc/grpc-js": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", + "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", + "requires": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + }, + "dependencies": { + "@grpc/proto-loader": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", + "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", + "requires": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "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==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, + "@grpc/proto-loader": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.11.3", + "yargs": "^16.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "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==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "protobufjs": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + } + } + }, "@humanwhocodes/config-array": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", @@ -525,6 +1519,60 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "@remix-run/router": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz", @@ -664,6 +1712,11 @@ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz", "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==" }, + "@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "@types/node": { "version": "20.4.8", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.8.tgz", @@ -929,7 +1982,7 @@ "acorn-dynamic-import": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "integrity": "sha512-GKp5tQ8h0KMPWIYGRHHXI1s5tUpZixZ3IHF2jAu42wSCf6In/G873s6/y4DdKdhWvzhu1T6mE1JgvnhAKqyYYQ==", "requires": { "acorn": "^4.0.3" }, @@ -937,7 +1990,7 @@ "acorn": { "version": "4.0.13", "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + "integrity": "sha512-fu2ygVGuMmlzG8ZeRJ0bvR41nsAkxxhbyk8bZ1SS521Z7vmgJFTQQlfz/Mp/nJexGBz+v8sC9bM6+lNgskt4Ug==" } } }, @@ -964,7 +2017,7 @@ "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==" }, "ajv": { "version": "6.12.6", @@ -995,7 +2048,7 @@ "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -1005,27 +2058,27 @@ "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==" }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" }, "ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + "integrity": "sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==" }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" }, "anymatch": { "version": "1.3.2", @@ -1119,7 +2172,7 @@ "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" }, "array-buffer-byte-length": { "version": "1.0.0", @@ -1133,7 +2186,7 @@ "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==" }, "array-flatten": { "version": "2.1.2", @@ -1143,7 +2196,7 @@ "array-from": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==" }, "array-includes": { "version": "3.1.6", @@ -1160,7 +2213,7 @@ "array-slice": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=" + "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==" }, "array-union": { "version": "2.1.0", @@ -1170,7 +2223,7 @@ "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" }, "array-unique": { "version": "0.2.1", @@ -1251,7 +2304,7 @@ "arraybuffer.slice": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + "integrity": "sha512-6ZjfQaBSy6CuIH0+B0NrxMfDE5VIOCP/5gOqSpEIsaAZx9/giszzrXg6PZ7G51U/n88UmlAgYLNQ9wAnII7PJA==" }, "asn1": { "version": "0.2.6", @@ -1291,12 +2344,12 @@ "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", "requires": { "inherits": "2.0.1" } @@ -1306,12 +2359,12 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" }, "async": { "version": "2.6.4", @@ -1329,12 +2382,12 @@ "async-foreach": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" + "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "atob": { "version": "2.1.2", @@ -1344,7 +2397,7 @@ "autoprefixer": { "version": "6.7.7", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "integrity": "sha512-WKExI/eSGgGAkWAO+wMVdFObZV7hQen54UpD1kCCTN3tvlL3W1jL4+lPP/M7MwoP7Q4RHzKtO3JQ4HxYEcd+xQ==", "requires": { "browserslist": "^1.7.6", "caniuse-db": "^1.0.30000634", @@ -1362,7 +2415,7 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" }, "aws4": { "version": "1.12.0", @@ -1372,7 +2425,7 @@ "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", "requires": { "chalk": "^1.1.3", "esutils": "^2.0.2", @@ -1450,7 +2503,7 @@ "babel-helper-builder-react-jsx": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", - "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "integrity": "sha512-02I9jDjnVEuGy2BR3LRm9nPRb/+Ja0pvZVLr1eI5TYAA/dB0Xoc+WBo50+aDfhGDLhlBY1+QURjn9uvcFd8gzg==", "requires": { "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", @@ -1460,7 +2513,7 @@ "babel-helper-call-delegate": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "integrity": "sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==", "requires": { "babel-helper-hoist-variables": "^6.24.1", "babel-runtime": "^6.22.0", @@ -1471,7 +2524,7 @@ "babel-helper-define-map": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "integrity": "sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA==", "requires": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.26.0", @@ -1482,7 +2535,7 @@ "babel-helper-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "integrity": "sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==", "requires": { "babel-helper-get-function-arity": "^6.24.1", "babel-runtime": "^6.22.0", @@ -1494,7 +2547,7 @@ "babel-helper-get-function-arity": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "integrity": "sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==", "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" @@ -1503,7 +2556,7 @@ "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "integrity": "sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==", "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" @@ -1512,7 +2565,7 @@ "babel-helper-optimise-call-expression": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "integrity": "sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA==", "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" @@ -1521,7 +2574,7 @@ "babel-helper-regex": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "integrity": "sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==", "requires": { "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", @@ -1531,7 +2584,7 @@ "babel-helper-replace-supers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "integrity": "sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw==", "requires": { "babel-helper-optimise-call-expression": "^6.24.1", "babel-messages": "^6.23.0", @@ -1544,7 +2597,7 @@ "babel-helpers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "integrity": "sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ==", "requires": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" @@ -1563,7 +2616,7 @@ "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", "requires": { "babel-runtime": "^6.22.0" } @@ -1571,7 +2624,7 @@ "babel-plugin-check-es2015-constants": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "integrity": "sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==", "requires": { "babel-runtime": "^6.22.0" } @@ -1579,22 +2632,22 @@ "babel-plugin-syntax-flow": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=" + "integrity": "sha512-HbTDIoG1A1op7Tl/wIFQPULIBA61tsJ8Ntq2FAhLwuijrzosM/92kAfgU1Q3Kc7DH/cprJg5vDfuTY4QUL4rDA==" }, "babel-plugin-syntax-jsx": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" + "integrity": "sha512-C4Aq+GaAj83pRQ0EFgTvw5YO6T3Qz2KGrNRwIj9mSoNHVvdZY4KO2uA6HNtNXCw993iSZnckY1aLW8nOi8i4+w==" }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "integrity": "sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg==", "requires": { "babel-runtime": "^6.22.0" } @@ -1602,7 +2655,7 @@ "babel-plugin-transform-es2015-block-scoped-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "integrity": "sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A==", "requires": { "babel-runtime": "^6.22.0" } @@ -1610,7 +2663,7 @@ "babel-plugin-transform-es2015-block-scoping": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "integrity": "sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw==", "requires": { "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", @@ -1622,7 +2675,7 @@ "babel-plugin-transform-es2015-classes": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "integrity": "sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag==", "requires": { "babel-helper-define-map": "^6.24.1", "babel-helper-function-name": "^6.24.1", @@ -1638,7 +2691,7 @@ "babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "integrity": "sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw==", "requires": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" @@ -1647,7 +2700,7 @@ "babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "integrity": "sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==", "requires": { "babel-runtime": "^6.22.0" } @@ -1655,7 +2708,7 @@ "babel-plugin-transform-es2015-duplicate-keys": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "integrity": "sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug==", "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" @@ -1664,7 +2717,7 @@ "babel-plugin-transform-es2015-for-of": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "integrity": "sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw==", "requires": { "babel-runtime": "^6.22.0" } @@ -1672,7 +2725,7 @@ "babel-plugin-transform-es2015-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "integrity": "sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==", "requires": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.22.0", @@ -1682,7 +2735,7 @@ "babel-plugin-transform-es2015-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "integrity": "sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ==", "requires": { "babel-runtime": "^6.22.0" } @@ -1690,7 +2743,7 @@ "babel-plugin-transform-es2015-modules-amd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "integrity": "sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA==", "requires": { "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", "babel-runtime": "^6.22.0", @@ -1711,7 +2764,7 @@ "babel-plugin-transform-es2015-modules-systemjs": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "integrity": "sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg==", "requires": { "babel-helper-hoist-variables": "^6.24.1", "babel-runtime": "^6.22.0", @@ -1721,7 +2774,7 @@ "babel-plugin-transform-es2015-modules-umd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "integrity": "sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw==", "requires": { "babel-plugin-transform-es2015-modules-amd": "^6.24.1", "babel-runtime": "^6.22.0", @@ -1731,7 +2784,7 @@ "babel-plugin-transform-es2015-object-super": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "integrity": "sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA==", "requires": { "babel-helper-replace-supers": "^6.24.1", "babel-runtime": "^6.22.0" @@ -1740,7 +2793,7 @@ "babel-plugin-transform-es2015-parameters": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "integrity": "sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==", "requires": { "babel-helper-call-delegate": "^6.24.1", "babel-helper-get-function-arity": "^6.24.1", @@ -1753,7 +2806,7 @@ "babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "integrity": "sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw==", "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" @@ -1762,7 +2815,7 @@ "babel-plugin-transform-es2015-spread": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "integrity": "sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==", "requires": { "babel-runtime": "^6.22.0" } @@ -1770,7 +2823,7 @@ "babel-plugin-transform-es2015-sticky-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "integrity": "sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==", "requires": { "babel-helper-regex": "^6.24.1", "babel-runtime": "^6.22.0", @@ -1780,7 +2833,7 @@ "babel-plugin-transform-es2015-template-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "integrity": "sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg==", "requires": { "babel-runtime": "^6.22.0" } @@ -1788,7 +2841,7 @@ "babel-plugin-transform-es2015-typeof-symbol": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "integrity": "sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw==", "requires": { "babel-runtime": "^6.22.0" } @@ -1796,7 +2849,7 @@ "babel-plugin-transform-es2015-unicode-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "integrity": "sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==", "requires": { "babel-helper-regex": "^6.24.1", "babel-runtime": "^6.22.0", @@ -1806,7 +2859,7 @@ "babel-plugin-transform-flow-strip-types": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "integrity": "sha512-TxIM0ZWNw9oYsoTthL3lvAK3+eTujzktoXJg4ubGvICGbVuXVYv5hHv0XXpz8fbqlJaGYY4q5SVzaSmsg3t4Fg==", "requires": { "babel-plugin-syntax-flow": "^6.18.0", "babel-runtime": "^6.22.0" @@ -1815,7 +2868,7 @@ "babel-plugin-transform-object-rest-spread": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "integrity": "sha512-ocgA9VJvyxwt+qJB0ncxV8kb/CjfTcECUY4tQ5VT7nP6Aohzobm8CDFaQ5FHdvZQzLmf0sgDxB8iRXZXxwZcyA==", "requires": { "babel-plugin-syntax-object-rest-spread": "^6.8.0", "babel-runtime": "^6.26.0" @@ -1824,7 +2877,7 @@ "babel-plugin-transform-react-display-name": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", - "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "integrity": "sha512-QLYkLiZeeED2PKd4LuXGg5y9fCgPB5ohF8olWUuETE2ryHNRqqnXlEVP7RPuef89+HTfd3syptMGVHeoAu0Wig==", "requires": { "babel-runtime": "^6.22.0" } @@ -1832,7 +2885,7 @@ "babel-plugin-transform-react-jsx": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "integrity": "sha512-s+q/Y2u2OgDPHRuod3t6zyLoV8pUHc64i/O7ZNgIOEdYTq+ChPeybcKBi/xk9VI60VriILzFPW+dUxAEbTxh2w==", "requires": { "babel-helper-builder-react-jsx": "^6.24.1", "babel-plugin-syntax-jsx": "^6.8.0", @@ -1842,7 +2895,7 @@ "babel-plugin-transform-react-jsx-self": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", - "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "integrity": "sha512-Y3ZHP1nunv0U1+ysTNwLK39pabHj6cPVsfN4TRC7BDBfbgbyF4RifP5kd6LnbuMV9wcfedQMe7hn1fyKc7IzTQ==", "requires": { "babel-plugin-syntax-jsx": "^6.8.0", "babel-runtime": "^6.22.0" @@ -1851,7 +2904,7 @@ "babel-plugin-transform-react-jsx-source": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", - "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "integrity": "sha512-pcDNDsZ9q/6LJmujQ/OhjeoIlp5Nl546HJ2yiFIJK3mYpgNXhI5/S9mXfVxu5yqWAi7HdI7e/q6a9xtzwL69Vw==", "requires": { "babel-plugin-syntax-jsx": "^6.8.0", "babel-runtime": "^6.22.0" @@ -1860,7 +2913,7 @@ "babel-plugin-transform-regenerator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "integrity": "sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg==", "requires": { "regenerator-transform": "^0.10.0" } @@ -1868,7 +2921,7 @@ "babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "integrity": "sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==", "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" @@ -1877,7 +2930,7 @@ "babel-polyfill": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==", "requires": { "babel-runtime": "^6.26.0", "core-js": "^2.5.0", @@ -1887,14 +2940,14 @@ "regenerator-runtime": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==" } } }, "babel-preset-es2015": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "integrity": "sha512-XfwUqG1Ry6R43m4Wfob+vHbIVBIqTg/TJY4Snku1iIzeH7mUnwHA8Vagmv+ZQbPwhS8HgsdQvy28Py3k5zpoFQ==", "requires": { "babel-plugin-check-es2015-constants": "^6.22.0", "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", @@ -1925,7 +2978,7 @@ "babel-preset-flow": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "integrity": "sha512-PQZFJXnM3d80Vq4O67OE6EMVKIw2Vmzy8UXovqulNogCtblWU8rzP7Sm5YgHiCg4uejUxzCkHfNXQ4Z6GI+Dhw==", "requires": { "babel-plugin-transform-flow-strip-types": "^6.22.0" } @@ -1933,7 +2986,7 @@ "babel-preset-react": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", - "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "integrity": "sha512-phQe3bElbgF887UM0Dhz55d22ob8czTL1kbhZFwpCE6+R/X9kHktfwmx9JZb+bBSVRGphP5tZ9oWhVhlgjrX3Q==", "requires": { "babel-plugin-syntax-jsx": "^6.3.13", "babel-plugin-transform-react-display-name": "^6.23.0", @@ -1946,7 +2999,7 @@ "babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "integrity": "sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A==", "requires": { "babel-core": "^6.26.0", "babel-runtime": "^6.26.0", @@ -1960,7 +3013,7 @@ "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" @@ -1976,7 +3029,7 @@ "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", "requires": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", @@ -1988,7 +3041,7 @@ "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", "requires": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", @@ -2019,7 +3072,7 @@ "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", "requires": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", @@ -2035,7 +3088,7 @@ "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==" }, "balanced-match": { "version": "1.0.2", @@ -2059,7 +3112,7 @@ "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "requires": { "is-descriptor": "^1.0.0" } @@ -2105,7 +3158,7 @@ "base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + "integrity": "sha512-437oANT9tP582zZMwSvZGy2nmSeAb8DW2me3y+Uv1Wp2Rulr8Mqlyrv3E7MLxmsiaPSMMDmiDVzgE+e8zlMx9g==" }, "base64-js": { "version": "1.5.1", @@ -2115,17 +3168,17 @@ "base64id": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + "integrity": "sha512-rz8L+d/xByiB/vLVftPkyY215fqNrmasrcJsYkVcm4TgJNz+YXKrFaFAWibSaHkiKoSgMDCb+lipOIRQNGYesw==" }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "requires": { "tweetnacl": "^0.14.3" } @@ -2133,7 +3186,7 @@ "better-assert": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "integrity": "sha512-bYeph2DFlpK1XmGs6fvlLRUN29QISM3GBuUwSFsMY2XRx4AvC0WNCS57j4c/xGrK2RS24C1w3YoBOsw9fT46tQ==", "requires": { "callsite": "1.0.0" } @@ -2160,12 +3213,12 @@ "blob": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + "integrity": "sha512-YRc9zvVz4wNaxcXmiSgb9LAg7YYwqQ2xd0Sj6osfA7k/PKmIGVlnOYs3wOFdkRC9/JpQu8sGt/zHgJV7xzerfg==" }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "integrity": "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", "requires": { "inherits": "~2.0.0" } @@ -2225,7 +3278,7 @@ "bonjour": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", "requires": { "array-flatten": "^2.1.0", "deep-equal": "^1.0.1", @@ -2238,7 +3291,7 @@ "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "bootstrap": { "version": "5.1.3", @@ -2265,7 +3318,7 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "browserify-aes": { "version": "1.2.0", @@ -2354,7 +3407,7 @@ "browserslist": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "integrity": "sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==", "requires": { "caniuse-db": "^1.0.30000639", "electron-to-chromium": "^1.2.7" @@ -2394,7 +3447,7 @@ "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" }, "buffer-from": { "version": "1.1.2", @@ -2409,12 +3462,12 @@ "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" }, "bytes": { "version": "3.1.2", @@ -2492,7 +3545,7 @@ "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==" }, "callsites": { "version": "3.1.0", @@ -2511,12 +3564,12 @@ "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==" }, "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" @@ -2525,7 +3578,7 @@ "caniuse-api": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "integrity": "sha512-SBTl70K0PkDUIebbkXrxWqZlHNs0wRgRD6QZ8guctShjbh63gEPfF+Wj0Yw+75f5Y8tSzqAI/NcisYv/cCah2Q==", "requires": { "browserslist": "^1.3.6", "caniuse-db": "^1.0.30000529", @@ -2546,12 +3599,12 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", "requires": { "align-text": "^0.1.3", "lazy-cache": "^1.0.3" @@ -2560,7 +3613,7 @@ "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -2671,7 +3724,7 @@ "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "requires": { "is-descriptor": "^0.1.0" } @@ -2721,7 +3774,7 @@ "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=" + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" }, "string-width": { "version": "3.1.0", @@ -2746,7 +3799,7 @@ "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" }, "clone-deep": { "version": "2.0.2", @@ -2777,12 +3830,12 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" }, "coa": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "integrity": "sha512-KAGck/eNAmCL0dcT3BiuYwLbExK6lduR8DxM3C1TyDzaXhZHyZ8ooX5I5+na2e3dPFuibfxrGdorr0/Lr7RYCQ==", "requires": { "q": "^1.1.2" } @@ -2790,12 +3843,12 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -2804,7 +3857,7 @@ "color": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "integrity": "sha512-Ajpjd8asqZ6EdxQeqGzU5WBhhTfJ/0cA4Wlbre7e5vXfmDSmda7Ov6jeKoru+b0vHcb1CqvuroTHp5zIWzhVMA==", "requires": { "clone": "^1.0.2", "color-convert": "^1.3.0", @@ -2822,12 +3875,12 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "color-string": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "integrity": "sha512-sz29j1bmSDfoAxKIEU6zwoIZXN6BrFbAMIhfYCNyiZXBDuU/aiHlN84lp/xDzL2ubyFhLDobHIlU1X70XRrMDA==", "requires": { "color-name": "^1.0.0" } @@ -2835,7 +3888,7 @@ "colormin": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "integrity": "sha512-XSEQUUQUR/lXqGyddiNH3XYFUPYlYr1vXy9rTFMsSOw+J7Q6EQkdlQIrTlYn4TccpsOaUE1PYQNjBn20gwCdgQ==", "requires": { "color": "^0.11.0", "css-color-names": "0.0.4", @@ -2845,12 +3898,12 @@ "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==" }, "combine-lists": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "integrity": "sha512-4Mi0V7N48B9KzC8Zl/U7wiWuxMFEHf44N3/PSoAvWDu8IOPrddNo1y1tC/kXbP7IvVMhgCFMMNzgKb0pWoin9w==", "requires": { "lodash": "^4.5.0" } @@ -2871,12 +3924,12 @@ "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + "integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==" }, "component-emitter": { "version": "1.3.0", @@ -2886,7 +3939,7 @@ "component-inherit": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + "integrity": "sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==" }, "compressible": { "version": "2.0.18", @@ -2947,7 +4000,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "concat-stream": { "version": "1.6.2", @@ -2999,12 +4052,12 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" }, "content-disposition": { "version": "0.5.4", @@ -3039,7 +4092,7 @@ "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "copy-concurrently": { "version": "1.0.5", @@ -3057,7 +4110,7 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" }, "copy-webpack-plugin": { "version": "4.6.0", @@ -3205,7 +4258,7 @@ "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=" + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==" }, "css-loader": { "version": "0.28.11", @@ -3262,7 +4315,7 @@ "cssnano": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "integrity": "sha512-0o0IMQE0Ezo4b41Yrm8U6Rp9/Ag81vNXY1gZMnT1XhO4DpjEf2utKERqWJbOoz3g1Wdc1d3QSta/cIuJ1wSTEg==", "requires": { "autoprefixer": "^6.3.1", "decamelize": "^1.1.2", @@ -3301,7 +4354,7 @@ "csso": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "integrity": "sha512-FmCI/hmqDeHHLaIQckMhMZneS84yzUZdrWDAvJVVxOwcKE1P1LF9FGmzr1ktIQSxOw6fl3PaQsmfg+GN+VvR3w==", "requires": { "clap": "^1.0.9", "source-map": "^0.5.3" @@ -3315,7 +4368,7 @@ "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", "requires": { "array-find-index": "^1.0.1" } @@ -3323,7 +4376,7 @@ "custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=" + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==" }, "cyclist": { "version": "1.0.2", @@ -3342,7 +4395,7 @@ "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "requires": { "assert-plus": "^1.0.0" } @@ -3371,7 +4424,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" }, "decode-uri-component": { "version": "0.2.2", @@ -3381,7 +4434,7 @@ "deep-diff": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", - "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=" + "integrity": "sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug==" }, "deep-equal": { "version": "1.1.1", @@ -3465,7 +4518,7 @@ "del": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "integrity": "sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", "requires": { "globby": "^6.1.0", "is-path-cwd": "^1.0.0", @@ -3507,12 +4560,12 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "depd": { "version": "2.0.0", @@ -3536,7 +4589,7 @@ "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "integrity": "sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==", "requires": { "repeating": "^2.0.0" } @@ -3549,7 +4602,7 @@ "di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=" + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==" }, "diff": { "version": "3.5.0", @@ -3584,12 +4637,12 @@ "discontinuous-range": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=" + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "dns-packet": { "version": "1.3.4", @@ -3603,7 +4656,7 @@ "dns-txt": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", "requires": { "buffer-indexof": "^1.0.0" } @@ -3636,7 +4689,7 @@ "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", "requires": { "custom-event": "~1.0.0", "ent": "~2.2.0", @@ -3701,7 +4754,7 @@ "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -3710,7 +4763,7 @@ "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { "version": "1.4.485", @@ -3751,7 +4804,7 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "encoding": { "version": "0.1.13", @@ -3772,7 +4825,7 @@ "engine.io": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "integrity": "sha512-VNQ79eqoDiapJ2tDMu+N7SPDm11btXpO7b2gsxBVd1XbxBCx6xLyTESIuFlWUspsbuif6Rq88pYNrQce5G7bqw==", "requires": { "accepts": "1.3.3", "base64id": "1.0.0", @@ -3785,7 +4838,7 @@ "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "integrity": "sha512-dCHp4G+F11zb+RtEu7BE2U8R32AYmM/4bljQfut8LipH3PdwsVBVGh083MXvtKkB7HSQUzSwiXz53c4mzJvYfw==", "requires": { "ms": "0.7.2" } @@ -3793,14 +4846,14 @@ "ms": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==" } } }, "engine.io-client": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "integrity": "sha512-260nnbHkYPTPnA9cjH2oCvWmqNwYofsNBkDfViI9iS487oMcl3kUeSgXJCwMxASgOL5DVlQF4hb0NzRNFkUaFg==", "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", @@ -3819,12 +4872,12 @@ "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==" }, "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "integrity": "sha512-dCHp4G+F11zb+RtEu7BE2U8R32AYmM/4bljQfut8LipH3PdwsVBVGh083MXvtKkB7HSQUzSwiXz53c4mzJvYfw==", "requires": { "ms": "0.7.2" } @@ -3832,14 +4885,14 @@ "ms": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==" } } }, "engine.io-parser": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "integrity": "sha512-3UyTJo+5Jbmr7rd3MosTAApK7BOIo4sjx8dJYSHa3Em5R3A9Y2s9GWu4JFJe6Px0VieJC0hKUA5NBytC+O7k2A==", "requires": { "after": "0.8.2", "arraybuffer.slice": "0.0.6", @@ -3852,7 +4905,7 @@ "enhanced-resolve": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "integrity": "sha512-ZaAux1rigq1e2nQrztHn4h2ugvpzZxs64qneNah+8Mh/K0CRqJFJc+UoXnUsq+1yX+DmQFPPdVqboKAJ89e0Iw==", "requires": { "graceful-fs": "^4.1.2", "memory-fs": "^0.4.0", @@ -3870,7 +4923,7 @@ "ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" }, "entities": { "version": "4.5.0", @@ -4023,7 +5076,7 @@ "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "requires": { "d": "1", "es5-ext": "^0.10.35", @@ -4033,7 +5086,7 @@ "es6-map": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", "requires": { "d": "1", "es5-ext": "~0.10.14", @@ -4091,17 +5144,17 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "escope": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", "requires": { "es6-map": "^0.1.3", "es6-weak-map": "^2.0.1", @@ -4366,7 +5419,7 @@ "esprima": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==" }, "esquery": { "version": "1.5.0", @@ -4411,12 +5464,12 @@ "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "requires": { "d": "1", "es5-ext": "~0.10.14" @@ -4435,7 +5488,7 @@ "eventsource": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "integrity": "sha512-bbB5tEuvC+SuRUG64X8ghvjgiRniuA4WlehWbFnoN4z6TxDXpyX+BMHF7rMgZAqoe+EbyNRUbHN0uuP9phy5jQ==", "requires": { "original": ">=0.0.5" } @@ -4452,7 +5505,7 @@ "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -4466,7 +5519,7 @@ "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -4513,7 +5566,7 @@ "expand-braces": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "integrity": "sha512-zOOsEnAhvIxxd0esCNbYG2xerGf46niZ1egS43eV7Fu4t7VIScgPXMcMabCLaPrqkzwvwo6zZipDiX3t0ILF2w==", "requires": { "array-slice": "^0.2.3", "array-unique": "^0.2.1", @@ -4523,7 +5576,7 @@ "braces": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "integrity": "sha512-EIMHIv2UXHWFY2xubUGKz+hq9hNkENj4Pjvr7h58cmJgpkK2yMlKA8I484f7MSttkzVAy/lL7X9xDaILd6avzA==", "requires": { "expand-range": "^0.1.0" } @@ -4531,7 +5584,7 @@ "expand-range": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "integrity": "sha512-busOHJ0t7t5UcutcyNDqmaDX+1cb0XlqsAUgTlmplVv0rIqBaMcBSZRLlkDm0nxtl8O3o/EvRRrdQ/WnyPERLQ==", "requires": { "is-number": "^0.1.1", "repeat-string": "^0.2.2" @@ -4540,12 +5593,12 @@ "is-number": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=" + "integrity": "sha512-la5kPULwIgkSSaZj9w7/A1uHqOBAgOhDUKQ5CkfL8LZ4Si6r4+2D0hI6b4o60MW4Uj2yNJARWIZUDPxlvOYQcw==" }, "repeat-string": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=" + "integrity": "sha512-yHeI3F9v20MY+8/5WAUgIWseMZwpLD+l9h5hGyzh6fQjhle2AwjjRDao1m5IozSDuVvMw09/mvE8AU1oDmZKpQ==" } } }, @@ -4560,7 +5613,7 @@ "expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", "requires": { "fill-range": "^2.1.0" }, @@ -4580,7 +5633,7 @@ "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", "requires": { "kind-of": "^3.0.2" } @@ -4772,7 +5825,7 @@ "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -4817,7 +5870,7 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" }, "fast-deep-equal": { "version": "3.1.3", @@ -4844,7 +5897,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fastparse": { "version": "1.1.2", @@ -4862,7 +5915,7 @@ "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", "requires": { "websocket-driver": ">=0.5.1" } @@ -4949,7 +6002,7 @@ "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==" }, "fill-range": { "version": "7.0.1", @@ -5004,7 +6057,7 @@ "find-cache-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "integrity": "sha512-46TFiBOzX7xq/PcSWfFwkyjpemdRnMe31UQF+os0y+1W3k95f6R4SEt02Hj4p3X0Mir9gfrkmOtshFidS0VPUg==", "requires": { "commondir": "^1.0.1", "make-dir": "^1.0.0", @@ -5014,11 +6067,44 @@ "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "requires": { "locate-path": "^2.0.0" } }, + "firebase": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.23.0.tgz", + "integrity": "sha512-/4lUVY0lUvBDIaeY1q6dUYhS8Sd18Qb9CgWkPZICUo9IXpJNCEagfNZXBBFCkMTTN5L5gx2Hjr27y21a9NzUcA==", + "requires": { + "@firebase/analytics": "0.10.0", + "@firebase/analytics-compat": "0.2.6", + "@firebase/app": "0.9.13", + "@firebase/app-check": "0.8.0", + "@firebase/app-check-compat": "0.3.7", + "@firebase/app-compat": "0.2.13", + "@firebase/app-types": "0.9.0", + "@firebase/auth": "0.23.2", + "@firebase/auth-compat": "0.4.2", + "@firebase/database": "0.14.4", + "@firebase/database-compat": "0.3.4", + "@firebase/firestore": "3.13.0", + "@firebase/firestore-compat": "0.3.12", + "@firebase/functions": "0.10.0", + "@firebase/functions-compat": "0.3.5", + "@firebase/installations": "0.6.4", + "@firebase/installations-compat": "0.2.4", + "@firebase/messaging": "0.12.4", + "@firebase/messaging-compat": "0.2.4", + "@firebase/performance": "0.6.4", + "@firebase/performance-compat": "0.2.4", + "@firebase/remote-config": "0.4.4", + "@firebase/remote-config-compat": "0.2.4", + "@firebase/storage": "0.11.2", + "@firebase/storage-compat": "0.3.2", + "@firebase/util": "1.9.3" + } + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -5073,7 +6159,7 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" }, "for-own": { "version": "0.1.5", @@ -5086,7 +6172,7 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" }, "form-data": { "version": "2.3.3", @@ -5106,7 +6192,7 @@ "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", "requires": { "map-cache": "^0.2.2" } @@ -5114,7 +6200,7 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "from2": { "version": "2.3.0", @@ -5128,7 +6214,7 @@ "fs-access": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "integrity": "sha512-05cXDIwNbFaoFWaz5gNHlUTbH5whiss/hr/ibzPd4MH3cR4w0ZKeIPiVdbyJurg3O5r/Bjpvn9KOb1/rPMf3nA==", "requires": { "null-check": "^1.0.0" } @@ -5157,7 +6243,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "1.2.13", @@ -5204,7 +6290,7 @@ "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -5248,12 +6334,12 @@ "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==" }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" }, "get-symbol-description": { "version": "1.0.0", @@ -5267,12 +6353,12 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "requires": { "assert-plus": "^1.0.0" } @@ -5293,7 +6379,7 @@ "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", "requires": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" @@ -5302,7 +6388,7 @@ "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", "requires": { "is-glob": "^2.0.0" } @@ -5310,12 +6396,12 @@ "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==" }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "requires": { "is-extglob": "^1.0.0" } @@ -5420,12 +6506,12 @@ "handle-thing": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=" + "integrity": "sha512-Ld9EYcBflMUF6SsJLGDADVH50jSzLNIUUrOFlFGK/zwqimATg9+wY4jsLWCR7DZSxt2BfK0+liHUMdoR11bjLg==" }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" }, "har-validator": { "version": "5.1.5", @@ -5447,7 +6533,7 @@ "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "requires": { "ansi-regex": "^2.0.0" } @@ -5460,7 +6546,7 @@ "has-binary": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "integrity": "sha512-k1Umb4/jrBWZbtL+QKSji8qWeoZ7ZTkXdnDXt1wxwBKAFM0//u96wDj43mBIqCIas8rDQMYyrBEvcS8hdGd4Sg==", "requires": { "isarray": "0.0.1" }, @@ -5475,12 +6561,12 @@ "has-cors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==" }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==" }, "has-property-descriptors": { "version": "1.0.0", @@ -5511,12 +6597,12 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -5533,7 +6619,7 @@ "has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -5542,7 +6628,7 @@ "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "requires": { "kind-of": "^3.0.2" }, @@ -5550,7 +6636,7 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "requires": { "is-buffer": "^1.1.5" } @@ -5560,7 +6646,7 @@ "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", "requires": { "is-buffer": "^1.1.5" } @@ -5611,7 +6697,7 @@ "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -5626,7 +6712,7 @@ "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "integrity": "sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg==", "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.1" @@ -5640,7 +6726,7 @@ "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "requires": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -5739,7 +6825,7 @@ "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, "http-errors": { "version": "2.0.0", @@ -5771,7 +6857,7 @@ "http-proxy-middleware": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "integrity": "sha512-JtH3UZju4oXDdca28/kknbm/CFmt35vy0YV0PNOMWWWpn3rT9WV95IXN451xwBGSjy9L0Cah1O9TCMytboLdfw==", "requires": { "http-proxy": "^1.16.2", "is-glob": "^3.1.0", @@ -5782,7 +6868,7 @@ "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", "requires": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -5792,7 +6878,7 @@ "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "requires": { "is-extglob": "^2.1.0" } @@ -5800,7 +6886,7 @@ "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", "requires": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -5820,12 +6906,12 @@ "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==" }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "requires": { "is-extglob": "^1.0.0" } @@ -5837,7 +6923,7 @@ "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -5847,7 +6933,7 @@ "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" }, "iconv-lite": { "version": "0.6.3", @@ -5860,12 +6946,12 @@ "icss-replace-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==" }, "icss-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "integrity": "sha512-bsVoyn/1V4R1kYYjLcWLedozAM4FClZUdjE9nIr8uWY7xs78y9DATgwz2wGU7M+7z55KenmmTkN2DVJ7bqzjAA==", "requires": { "postcss": "^6.0.1" }, @@ -5891,7 +6977,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "postcss": { "version": "6.0.23", @@ -5918,6 +7004,11 @@ } } }, + "idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==" + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -5954,7 +7045,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "in-publish": { "version": "2.0.1", @@ -5964,7 +7055,7 @@ "indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", "requires": { "repeating": "^2.0.0" } @@ -5972,17 +7063,17 @@ "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==" }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -5996,7 +7087,7 @@ "internal-ip": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "integrity": "sha512-DzGfTasXPmwizQP4XV2rR6r2vp8TjlOpMnJqG9Iy2i1pl1lkZdZj5rSpIc7YFGX2nS46PPgAGEyT+Q5hE2FB2g==", "requires": { "meow": "^3.3.0" } @@ -6027,7 +7118,7 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==" }, "ip": { "version": "1.1.8", @@ -6042,12 +7133,12 @@ "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==" }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "requires": { "kind-of": "^3.0.2" } @@ -6074,7 +7165,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "is-bigint": { "version": "1.0.4", @@ -6122,7 +7213,7 @@ "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "requires": { "kind-of": "^3.0.2" } @@ -6155,12 +7246,12 @@ "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==" }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", "requires": { "is-primitive": "^2.0.0" } @@ -6168,12 +7259,12 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-finite": { "version": "1.1.0", @@ -6183,7 +7274,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "requires": { "number-is-nan": "^1.0.0" } @@ -6217,7 +7308,7 @@ "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" }, "is-path-in-cwd": { "version": "1.0.1", @@ -6245,7 +7336,7 @@ "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" }, "is-plain-object": { "version": "2.0.4", @@ -6265,12 +7356,12 @@ "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==" }, "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==" }, "is-regex": { "version": "1.1.4", @@ -6292,7 +7383,7 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" }, "is-string": { "version": "1.0.7", @@ -6305,12 +7396,12 @@ "is-subset": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=" + "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==" }, "is-svg": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "integrity": "sha512-Ya1giYJUkcL/94quj0+XGcmts6cETPBW1MiFz1ReJrnDJ680F52qpAEGAEGU0nq96FRGIGPx6Yo1CyPXcOoyGw==", "requires": { "html-comment-regex": "^1.1.0" } @@ -6334,12 +7425,12 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" }, "is-weakref": { "version": "1.0.2", @@ -6357,7 +7448,7 @@ "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==" }, "isarray": { "version": "2.0.5", @@ -6375,7 +7466,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "2.1.0", @@ -6395,7 +7486,7 @@ "isomorphic-fetch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", "requires": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" @@ -6404,7 +7495,7 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "jasmine-core": { "version": "3.3.0", @@ -6443,7 +7534,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "supports-color": { "version": "5.5.0", @@ -6491,7 +7582,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "supports-color": { "version": "5.5.0", @@ -6524,7 +7615,7 @@ "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", "requires": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -6544,17 +7635,17 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==" }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "requires": { "is-extglob": "^1.0.0" } @@ -6562,7 +7653,7 @@ "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", "requires": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -6612,7 +7703,7 @@ "js-yaml": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "integrity": "sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ==", "requires": { "argparse": "^1.0.7", "esprima": "^2.6.0" @@ -6621,12 +7712,12 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + "integrity": "sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==" }, "json-loader": { "version": "0.5.7", @@ -6646,12 +7737,12 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "json3": { "version": "3.3.2", @@ -6661,7 +7752,7 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==" }, "jsonfile": { "version": "4.0.0", @@ -6740,7 +7831,7 @@ "lodash": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==" }, "log4js": { "version": "0.6.38", @@ -6796,7 +7887,7 @@ "karma-jasmine": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", - "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=" + "integrity": "sha512-SENGE9DhlIIFTSZWiNq4eGeXL8G6z9cqHIOdkx9jh1qhhQqwEy3tAoLRyER0vOcHqdOlKmGpOuXk+HOipIy7sg==" }, "karma-sourcemap-loader": { "version": "0.3.8", @@ -6835,7 +7926,7 @@ "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", "requires": { "graceful-fs": "^4.1.9" } @@ -6843,12 +7934,12 @@ "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==" }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "requires": { "invert-kv": "^1.0.0" } @@ -6865,7 +7956,7 @@ "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -6877,7 +7968,7 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" } } }, @@ -6909,7 +8000,7 @@ "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -6928,32 +8019,32 @@ "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "lodash.escape": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=" + "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==" }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "lodash.merge": { "version": "4.6.2", @@ -6963,17 +8054,17 @@ "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" }, "lodash.tail": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=" + "integrity": "sha512-+7y6zfkH4TqgS5DYKIqJuxmL5xT3WUUumVMZVRpDUo0UqJREwZqKmGo9wluj12FbPGl1UjRf2TnAImbw/bKtdw==" }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, "log4js": { "version": "6.9.1", @@ -6997,10 +8088,15 @@ "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==" }, + "long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==" }, "loose-envify": { "version": "1.4.0", @@ -7013,7 +8109,7 @@ "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", "requires": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.0" @@ -7043,17 +8139,17 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", "requires": { "object-visit": "^1.0.0" } @@ -7081,12 +8177,12 @@ "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "integrity": "sha512-nOBDrc/wgpkd3X/JOhMqYR+/eLqlfLP4oQfoBA6QExIxEl+GU01oyEkwWyueyO8110pUKijtiHGhEmYoOn88oQ==", "requires": { "mimic-fn": "^1.0.0" } @@ -7094,7 +8190,7 @@ "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -7103,7 +8199,7 @@ "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", "requires": { "camelcase-keys": "^2.0.0", "decamelize": "^1.1.2", @@ -7120,7 +8216,7 @@ "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "merge2": { "version": "1.4.1", @@ -7130,7 +8226,7 @@ "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { "version": "4.0.5", @@ -7188,7 +8284,7 @@ "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "minimatch": { "version": "3.1.2", @@ -7242,7 +8338,7 @@ "mixin-object": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", "requires": { "for-in": "^0.1.3", "is-extendable": "^0.1.1" @@ -7251,7 +8347,7 @@ "for-in": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==" } } }, @@ -7311,7 +8407,7 @@ "multicast-dns-service-types": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==" }, "nan": { "version": "2.17.0", @@ -7356,7 +8452,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "natural-compare-lite": { "version": "1.4.0", @@ -7477,7 +8573,7 @@ "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==" }, "which": { "version": "1.3.1", @@ -7522,7 +8618,7 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" } } }, @@ -7591,7 +8687,7 @@ "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "requires": { "abbrev": "1" } @@ -7635,12 +8731,12 @@ "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" }, "normalize-url": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", "requires": { "object-assign": "^4.0.1", "prepend-http": "^1.0.0", @@ -7651,7 +8747,7 @@ "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "requires": { "path-key": "^2.0.0" }, @@ -7685,17 +8781,17 @@ "null-check": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=" + "integrity": "sha512-j8ZNHg19TyIQOWCGeeQJBuu6xZYIEurf8M1Qsfd8mFrGEfIZytbw18YjKWg+LcO25NowXGZXZpKAx+Ui3TFfDw==" }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==" }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" }, "oauth-sign": { "version": "0.9.0", @@ -7705,17 +8801,17 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-component": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + "integrity": "sha512-S0sN3agnVh2SZNEIGc0N1X4Z5K0JeFbGBrnuZpsxuUh5XLF0BnvWkMjRXo/zGKLd/eghvNIKcx1pQkmUjXIyrA==" }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -7725,7 +8821,7 @@ "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "requires": { "is-descriptor": "^0.1.0" } @@ -7754,7 +8850,7 @@ "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "requires": { "isobject": "^3.0.0" }, @@ -7821,7 +8917,7 @@ "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", "requires": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" @@ -7830,7 +8926,7 @@ "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "requires": { "isobject": "^3.0.1" }, @@ -7873,7 +8969,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } @@ -7889,7 +8985,7 @@ "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -7898,7 +8994,7 @@ "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==" } } }, @@ -7918,7 +9014,7 @@ "options": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + "integrity": "sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg==" }, "original": { "version": "1.0.2", @@ -7931,12 +9027,12 @@ "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" }, "os-locale": { "version": "2.1.0", @@ -7951,7 +9047,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "osenv": { "version": "0.1.5", @@ -7965,7 +9061,7 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" }, "p-limit": { "version": "1.3.0", @@ -7978,7 +9074,7 @@ "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "requires": { "p-limit": "^1.1.0" } @@ -7991,7 +9087,7 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" }, "pako": { "version": "1.0.11", @@ -8039,7 +9135,7 @@ "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", "requires": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", @@ -8050,12 +9146,12 @@ "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==" }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "requires": { "is-extglob": "^1.0.0" } @@ -8065,7 +9161,7 @@ "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "requires": { "error-ex": "^1.2.0" } @@ -8090,7 +9186,7 @@ "parsejson": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "integrity": "sha512-v38ZjVbinlZ2r1Rz06WUZEnGoSRcEGX+roMsiWjHeAe23s2qlQUyfmsPQZvh7d8l0E8AZzTIO/RkUr00LfkSiA==", "requires": { "better-assert": "~1.0.0" } @@ -8098,7 +9194,7 @@ "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "integrity": "sha512-B3Nrjw2aL7aI4TDujOzfA4NsEc4u1lVcIRE0xesutH8kjeWF70uk+W5cBlIQx04zUH9NTBvuN36Y9xLRPK6Jjw==", "requires": { "better-assert": "~1.0.0" } @@ -8106,7 +9202,7 @@ "parseuri": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "integrity": "sha512-ijhdxJu6l5Ru12jF0JvzXVPvsC+VibqeaExlNoMhWN6VQ79PGjkmc7oA4W1lp00sFkNyj0fx6ivPLdV51/UMog==", "requires": { "better-assert": "~1.0.0" } @@ -8119,7 +9215,7 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" }, "path-browserify": { "version": "0.0.1", @@ -8129,22 +9225,22 @@ "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" }, "path-key": { "version": "3.1.1", @@ -8181,7 +9277,7 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "picocolors": { "version": "1.0.0", @@ -8196,17 +9292,17 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "requires": { "pinkie": "^2.0.0" } @@ -8214,7 +9310,7 @@ "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "integrity": "sha512-ojakdnUgL5pzJYWw2AIDEupaQCX5OPbM688ZevubICjdIX01PRSYKqm33fJoCOJBRseYCTUlQRnBNX+Pchaejw==", "requires": { "find-up": "^2.1.0" } @@ -8222,7 +9318,7 @@ "popper.js": { "version": "1.14.4", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.4.tgz", - "integrity": "sha1-juwdj/AqWjoVLdQ0FKFce3n9abY=" + "integrity": "sha512-VKAPR2KCx8Uw0oVn0Rt4iggzat+MJ1wu1uJiDnfnMiQcGQRBIopZLfXMKsK/K8NPEerY5kefaYtYjTLb3F6ncw==" }, "portfinder": { "version": "1.0.32", @@ -8247,7 +9343,7 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==" }, "postcss": { "version": "5.2.18", @@ -8263,7 +9359,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "requires": { "has-flag": "^1.0.0" } @@ -8273,7 +9369,7 @@ "postcss-calc": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "integrity": "sha512-iBcptYFq+QUh9gzP7ta2btw50o40s4uLI4UDVgd5yRAZtUDWc5APdl5yQDd2h/TyiZNbJrv0HiYhT102CMgN7Q==", "requires": { "postcss": "^5.0.2", "postcss-message-helpers": "^2.0.0", @@ -8283,7 +9379,7 @@ "postcss-colormin": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "integrity": "sha512-XXitQe+jNNPf+vxvQXIQ1+pvdQKWKgkx8zlJNltcMEmLma1ypDRDQwlLt+6cP26fBreihNhZxohh1rcgCH2W5w==", "requires": { "colormin": "^1.0.5", "postcss": "^5.0.13", @@ -8293,7 +9389,7 @@ "postcss-convert-values": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "integrity": "sha512-SE7mf25D3ORUEXpu3WUqQqy0nCbMuM5BEny+ULE/FXdS/0UMA58OdzwvzuHJRpIFlk1uojt16JhaEogtP6W2oA==", "requires": { "postcss": "^5.0.11", "postcss-value-parser": "^3.1.2" @@ -8302,7 +9398,7 @@ "postcss-discard-comments": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "integrity": "sha512-yGbyBDo5FxsImE90LD8C87vgnNlweQkODMkUZlDVM/CBgLr9C5RasLGJxxh9GjVOBeG8NcCMatoqI1pXg8JNXg==", "requires": { "postcss": "^5.0.14" } @@ -8310,7 +9406,7 @@ "postcss-discard-duplicates": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "integrity": "sha512-+lk5W1uqO8qIUTET+UETgj9GWykLC3LOldr7EehmymV0Wu36kyoHimC4cILrAAYpHQ+fr4ypKcWcVNaGzm0reA==", "requires": { "postcss": "^5.0.4" } @@ -8318,7 +9414,7 @@ "postcss-discard-empty": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "integrity": "sha512-IBFoyrwk52dhF+5z/ZAbzq5Jy7Wq0aLUsOn69JNS+7YeuyHaNzJwBIYE0QlUH/p5d3L+OON72Fsexyb7OK/3og==", "requires": { "postcss": "^5.0.14" } @@ -8326,7 +9422,7 @@ "postcss-discard-overridden": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "integrity": "sha512-IyKoDL8QNObOiUc6eBw8kMxBHCfxUaERYTUe2QF8k7j/xiirayDzzkmlR6lMQjrAM1p1DDRTvWrS7Aa8lp6/uA==", "requires": { "postcss": "^5.0.16" } @@ -8334,7 +9430,7 @@ "postcss-discard-unused": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "integrity": "sha512-nCbFNfqYAbKCw9J6PSJubpN9asnrwVLkRDFc4KCwyUEdOtM5XDE/eTW3OpqHrYY1L4fZxgan7LLRAAYYBzwzrg==", "requires": { "postcss": "^5.0.14", "uniqs": "^2.0.0" @@ -8351,7 +9447,7 @@ "postcss-merge-idents": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "integrity": "sha512-9DHmfCZ7/hNHhIKnNkz4CU0ejtGen5BbTRJc13Z2uHfCedeCUsK2WEQoAJRBL+phs68iWK6Qf8Jze71anuysWA==", "requires": { "has": "^1.0.1", "postcss": "^5.0.10", @@ -8361,7 +9457,7 @@ "postcss-merge-longhand": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "integrity": "sha512-ma7YvxjdLQdifnc1HFsW/AW6fVfubGyR+X4bE3FOSdBVMY9bZjKVdklHT+odknKBB7FSCfKIHC3yHK7RUAqRPg==", "requires": { "postcss": "^5.0.4" } @@ -8369,7 +9465,7 @@ "postcss-merge-rules": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "integrity": "sha512-Wgg2FS6W3AYBl+5L9poL6ZUISi5YzL+sDCJfM7zNw/Q1qsyVQXXZ2cbVui6mu2cYJpt1hOKCGj1xA4mq/obz/Q==", "requires": { "browserslist": "^1.5.2", "caniuse-api": "^1.5.2", @@ -8381,12 +9477,12 @@ "postcss-message-helpers": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=" + "integrity": "sha512-tPLZzVAiIJp46TBbpXtrUAKqedXSyW5xDEo1sikrfEfnTs+49SBZR/xDdqCiJvSSbtr615xDsaMF3RrxS2jZlA==" }, "postcss-minify-font-values": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "integrity": "sha512-vFSPzrJhNe6/8McOLU13XIsERohBJiIFFuC1PolgajOZdRWqRgKITP/A4Z/n4GQhEmtbxmO9NDw3QLaFfE1dFQ==", "requires": { "object-assign": "^4.0.1", "postcss": "^5.0.4", @@ -8396,7 +9492,7 @@ "postcss-minify-gradients": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "integrity": "sha512-DZhT0OE+RbVqVyGsTIKx84rU/5cury1jmwPa19bViqYPQu499ZU831yMzzsyC8EhiZVd73+h5Z9xb/DdaBpw7Q==", "requires": { "postcss": "^5.0.12", "postcss-value-parser": "^3.3.0" @@ -8405,7 +9501,7 @@ "postcss-minify-params": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "integrity": "sha512-hhJdMVgP8vasrHbkKAk+ab28vEmPYgyuDzRl31V3BEB3QOR3L5TTIVEWLDNnZZ3+fiTi9d6Ker8GM8S1h8p2Ow==", "requires": { "alphanum-sort": "^1.0.1", "postcss": "^5.0.2", @@ -8416,7 +9512,7 @@ "postcss-minify-selectors": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "integrity": "sha512-e13vxPBSo3ZaPne43KVgM+UETkx3Bs4/Qvm6yXI9HQpQp4nyb7HZ0gKpkF+Wn2x+/dbQ+swNpCdZSbMOT7+TIA==", "requires": { "alphanum-sort": "^1.0.2", "has": "^1.0.1", @@ -8453,7 +9549,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "postcss": { "version": "6.0.23", @@ -8483,7 +9579,7 @@ "postcss-modules-local-by-default": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "integrity": "sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==", "requires": { "css-selector-tokenizer": "^0.7.0", "postcss": "^6.0.1" @@ -8510,7 +9606,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "postcss": { "version": "6.0.23", @@ -8540,7 +9636,7 @@ "postcss-modules-scope": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "integrity": "sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw==", "requires": { "css-selector-tokenizer": "^0.7.0", "postcss": "^6.0.1" @@ -8567,7 +9663,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "postcss": { "version": "6.0.23", @@ -8597,7 +9693,7 @@ "postcss-modules-values": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "integrity": "sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==", "requires": { "icss-replace-symbols": "^1.1.0", "postcss": "^6.0.1" @@ -8624,7 +9720,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "postcss": { "version": "6.0.23", @@ -8654,7 +9750,7 @@ "postcss-normalize-charset": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "integrity": "sha512-RKgjEks83l8w4yEhztOwNZ+nLSrJ+NvPNhpS+mVDzoaiRHZQVoG7NF2TP5qjwnaN9YswUhj6m1E0S0Z+WDCgEQ==", "requires": { "postcss": "^5.0.5" } @@ -8662,7 +9758,7 @@ "postcss-normalize-url": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "integrity": "sha512-WqtWG6GV2nELsQEFES0RzfL2ebVwmGl/M8VmMbshKto/UClBo+mznX8Zi4/hkThdqx7ijwv+O8HWPdpK7nH/Ig==", "requires": { "is-absolute-url": "^2.0.0", "normalize-url": "^1.4.0", @@ -8673,7 +9769,7 @@ "postcss-ordered-values": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "integrity": "sha512-5RB1IUZhkxDCfa5fx/ogp/A82mtq+r7USqS+7zt0e428HJ7+BHCxyeY39ClmkkUtxdOd3mk8gD6d9bjH2BECMg==", "requires": { "postcss": "^5.0.4", "postcss-value-parser": "^3.0.1" @@ -8682,7 +9778,7 @@ "postcss-reduce-idents": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "integrity": "sha512-0+Ow9e8JLtffjumJJFPqvN4qAvokVbdQPnijUDSOX8tfTwrILLP4ETvrZcXZxAtpFLh/U0c+q8oRMJLr1Kiu4w==", "requires": { "postcss": "^5.0.4", "postcss-value-parser": "^3.0.2" @@ -8691,7 +9787,7 @@ "postcss-reduce-initial": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "integrity": "sha512-jJFrV1vWOPCQsIVitawGesRgMgunbclERQ/IRGW7r93uHrVzNQQmHQ7znsOIjJPZ4yWMzs5A8NFhp3AkPHPbDA==", "requires": { "postcss": "^5.0.4" } @@ -8699,7 +9795,7 @@ "postcss-reduce-transforms": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "integrity": "sha512-lGgRqnSuAR5i5uUg1TA33r9UngfTadWxOyL2qx1KuPoCQzfmtaHjp9PuwX7yVyRxG3BWBzeFUaS5uV9eVgnEgQ==", "requires": { "has": "^1.0.1", "postcss": "^5.0.8", @@ -8709,7 +9805,7 @@ "postcss-selector-parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "integrity": "sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA==", "requires": { "flatten": "^1.0.2", "indexes-of": "^1.0.1", @@ -8719,7 +9815,7 @@ "postcss-svgo": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "integrity": "sha512-y5AdQdgBoF4rbpdbeWAJuxE953g/ylRfVNp6mvAi61VCN/Y25Tu9p5mh3CyI42WbTRIiwR9a1GdFtmDnNPeskQ==", "requires": { "is-svg": "^2.0.0", "postcss": "^5.0.14", @@ -8730,7 +9826,7 @@ "postcss-unique-selectors": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "integrity": "sha512-WZX8r1M0+IyljoJOJleg3kYm10hxNYF9scqAT7v/xeSX1IdehutOM85SNO0gP9K+bgs86XERr7Ud5u3ch4+D8g==", "requires": { "alphanum-sort": "^1.0.1", "postcss": "^5.0.4", @@ -8745,7 +9841,7 @@ "postcss-zindex": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "integrity": "sha512-uhRZ2hRgj0lorxm9cr62B01YzpUe63h0RXMXQ4gWW3oa2rpJh+FJAiEAytaFCPU/VgaBS+uW2SJ1XKyDNz1h4w==", "requires": { "has": "^1.0.1", "postcss": "^5.0.4", @@ -8760,12 +9856,12 @@ "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==" }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==" }, "pretty-error": { "version": "2.1.2", @@ -8829,7 +9925,7 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, "process-nextick-args": { "version": "2.0.1", @@ -8858,6 +9954,25 @@ } } }, + "protobufjs": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", + "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -8870,12 +9985,12 @@ "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, "psl": { "version": "1.9.0", @@ -8929,7 +10044,7 @@ "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" }, "qjobs": { "version": "1.2.0", @@ -8947,7 +10062,7 @@ "query-string": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", "requires": { "object-assign": "^4.1.0", "strict-uri-encode": "^1.0.0" @@ -8961,7 +10076,7 @@ "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==" }, "querystringify": { "version": "2.2.0", @@ -8984,7 +10099,7 @@ "railroad-diagrams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=" + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" }, "randexp": { "version": "0.4.6", @@ -9227,7 +10342,7 @@ "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -9254,7 +10369,7 @@ "read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -9263,7 +10378,7 @@ "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -9272,7 +10387,7 @@ "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "requires": { "pinkie-promise": "^2.0.0" } @@ -9585,7 +10700,7 @@ "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", "requires": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" @@ -9594,7 +10709,7 @@ "reduce-css-calc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "integrity": "sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA==", "requires": { "balanced-match": "^0.4.2", "math-expression-evaluator": "^1.2.14", @@ -9604,7 +10719,7 @@ "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==" } } }, @@ -9630,7 +10745,7 @@ "redux-logger": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", - "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=", + "integrity": "sha512-JoCIok7bg/XpqA1JqCqXFypuqBbQzGQySrhFzewB7ThcnysTO30l4VCst86AuB9T9tuT03MAA56Jw2PNhRSNCg==", "requires": { "deep-diff": "^0.3.5" } @@ -9690,7 +10805,7 @@ "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "integrity": "sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==", "requires": { "regenerate": "^1.2.1", "regjsgen": "^0.2.0", @@ -9700,12 +10815,12 @@ "regjsgen": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + "integrity": "sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==" }, "regjsparser": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "integrity": "sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==", "requires": { "jsesc": "~0.5.0" }, @@ -9713,7 +10828,7 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, @@ -9725,7 +10840,7 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" }, "renderkid": { "version": "2.0.7", @@ -9810,12 +10925,12 @@ "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" }, "repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", "requires": { "is-finite": "^1.0.0" } @@ -9857,7 +10972,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-main-filename": { "version": "2.0.0", @@ -9867,12 +10982,12 @@ "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "reselect": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", - "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" + "integrity": "sha512-b/6tFZCmRhtBMa4xGqiiRp9jh9Aqi2A687Lo265cN0/QohJQEBPiQ52f4QB6i0eF3yp3hmLL21LSGBcML2dlxA==" }, "resolve": { "version": "2.0.0-next.4", @@ -9887,7 +11002,7 @@ "resolve-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", "requires": { "resolve-from": "^3.0.0" }, @@ -9907,7 +11022,7 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" }, "ret": { "version": "0.1.15", @@ -9927,7 +11042,7 @@ "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", "requires": { "align-text": "^0.1.1" } @@ -9952,7 +11067,7 @@ "rst-selector-parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", + "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==", "requires": { "lodash.flattendeep": "^4.4.0", "nearley": "^2.7.10" @@ -9993,7 +11108,7 @@ "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "requires": { "ret": "~0.1.10" } @@ -10058,7 +11173,7 @@ "schema-utils": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "integrity": "sha512-QaVYBaD9U8scJw2EBWnCBY+LJ0AD+/2edTaigDs0XLDLBfJmSUK9KGqktg1rb32U3z4j/XwvFwHHH1YfbYFd7Q==", "requires": { "ajv": "^5.0.0" }, @@ -10089,7 +11204,7 @@ "scss-tokenizer": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "integrity": "sha512-dYE8LhncfBUar6POCxMTm0Ln+erjeczqEvCJib5/7XNkdw1FkUGgwMPY360FY0FgPWQxHWCx29Jl3oejyGLM9Q==", "requires": { "js-base64": "^2.1.8", "source-map": "^0.4.2" @@ -10098,7 +11213,7 @@ "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", "requires": { "amdefine": ">=0.0.4" } @@ -10108,7 +11223,7 @@ "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "selfsigned": { "version": "1.10.14", @@ -10176,7 +11291,7 @@ "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "requires": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -10212,7 +11327,7 @@ "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -10223,7 +11338,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "ms": { "version": "2.0.0", @@ -10261,7 +11376,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "set-value": { "version": "2.0.1", @@ -10277,7 +11392,7 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "requires": { "is-extendable": "^0.1.0" } @@ -10287,7 +11402,7 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "setprototypeof": { "version": "1.2.0", @@ -10365,7 +11480,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "supports-color": { "version": "5.5.0", @@ -10408,7 +11523,7 @@ "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "requires": { "is-descriptor": "^0.1.0" } @@ -10416,7 +11531,7 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "requires": { "is-extendable": "^0.1.0" } @@ -10441,7 +11556,7 @@ "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "requires": { "is-descriptor": "^1.0.0" } @@ -10495,7 +11610,7 @@ "socket.io": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "integrity": "sha512-CmZLQTyj5nKKVBoguhisLP5Yl6oEfEWbQQQQ0MdXAazCZdRpGR4FG6rd13ryovTa75S36PgXsAGtzwllCWrgbQ==", "requires": { "debug": "2.3.3", "engine.io": "1.8.3", @@ -10509,7 +11624,7 @@ "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "integrity": "sha512-dCHp4G+F11zb+RtEu7BE2U8R32AYmM/4bljQfut8LipH3PdwsVBVGh083MXvtKkB7HSQUzSwiXz53c4mzJvYfw==", "requires": { "ms": "0.7.2" } @@ -10517,19 +11632,19 @@ "ms": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==" }, "object-assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" + "integrity": "sha512-Lbc7GfN7XFaK30bzUN3cDYLOkT0dH05S0ax1QikylHUD9+Z9PRF3G1iYwX3kcz+6AlzTFGkUgMxz6l3aUwbwTA==" } } }, "socket.io-adapter": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "integrity": "sha512-zmYvlFJay9skt4yk1MffE9p93HKvQtyy0BLZ5dRM73bOXFJXNZWq8qZVdY456sLaxdK6fHGiZ7glxzqvzwGzkw==", "requires": { "debug": "2.3.3", "socket.io-parser": "2.3.1" @@ -10538,7 +11653,7 @@ "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "integrity": "sha512-dCHp4G+F11zb+RtEu7BE2U8R32AYmM/4bljQfut8LipH3PdwsVBVGh083MXvtKkB7HSQUzSwiXz53c4mzJvYfw==", "requires": { "ms": "0.7.2" } @@ -10546,14 +11661,14 @@ "ms": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==" } } }, "socket.io-client": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "integrity": "sha512-ZEPOqFboJuuVau/3sMF4PgzJM/X+TDhssgufCnGtPtSL2Nmt4dL3i9JheCT1B45hiYM5cgO+wTO8EYmxbpwHSw==", "requires": { "backo2": "1.0.2", "component-bind": "1.0.0", @@ -10571,12 +11686,12 @@ "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==" }, "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "integrity": "sha512-dCHp4G+F11zb+RtEu7BE2U8R32AYmM/4bljQfut8LipH3PdwsVBVGh083MXvtKkB7HSQUzSwiXz53c4mzJvYfw==", "requires": { "ms": "0.7.2" } @@ -10584,14 +11699,14 @@ "ms": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==" } } }, "socket.io-parser": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "integrity": "sha512-j6l4g/+yWQjmy1yByzg1DPFL4vxQw+NwCJatIxni/AE1wfm17FBtIKSWU4Ay+onrJwDxmC4eK4QS/04ZsqYwZQ==", "requires": { "component-emitter": "1.1.2", "debug": "2.2.0", @@ -10602,12 +11717,12 @@ "component-emitter": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + "integrity": "sha512-YhIbp3PJiznERfjlIkK0ue4obZxt2S60+0W8z24ZymOHT8sHloOqWOqZRU2eN5OlY8U08VFsP02letcu26FilA==" }, "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", "requires": { "ms": "0.7.1" } @@ -10620,7 +11735,7 @@ "ms": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==" } } }, @@ -10636,7 +11751,7 @@ "sockjs-client": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "integrity": "sha512-hkDiI0wOmGmoUG3TSIrbDt8AhyzhePuNT3nogc5+c0amyUHu091y+jRK2h/e36olKRG+tSbhlQYHWqdsuW0CtQ==", "requires": { "debug": "^2.6.6", "eventsource": "0.1.6", @@ -10672,7 +11787,7 @@ "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", "requires": { "is-plain-obj": "^1.0.0" } @@ -10685,7 +11800,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" }, "source-map-resolve": { "version": "0.5.3", @@ -10743,7 +11858,7 @@ "spdy": { "version": "3.4.7", "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "integrity": "sha512-jEvgkLRpMza5GON0oDzvLTLMAVfB5BxeOPbsWyisEyE8IbxL6cCiKbr8xrJdScs6XoOUp7pQy4PI+GVczHbO4w==", "requires": { "debug": "^2.6.8", "handle-thing": "^1.2.5", @@ -10808,7 +11923,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "sshpk": { "version": "1.17.0", @@ -10837,7 +11952,7 @@ "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -10846,7 +11961,7 @@ "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "requires": { "is-descriptor": "^0.1.0" } @@ -10869,7 +11984,7 @@ "store": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/store/-/store-2.0.12.tgz", - "integrity": "sha1-jFNOKguDH3K3X8XxEZhXxE711ZM=" + "integrity": "sha512-eO9xlzDpXLiMr9W1nQ3Nfp9EzZieIQc10zPPMP5jsVV7bLOziSFFBP0XoDXACEIFtdI+rIz0NwWVA/QVJ8zJtw==" }, "stream-browserify": { "version": "2.0.2", @@ -10919,12 +12034,12 @@ "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -10987,7 +12102,7 @@ "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "requires": { "ansi-regex": "^2.0.0" } @@ -10995,7 +12110,7 @@ "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "requires": { "is-utf8": "^0.2.0" } @@ -11003,12 +12118,12 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", "requires": { "get-stdin": "^4.0.1" } @@ -11030,7 +12145,7 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" }, "supports-preserve-symlinks-flag": { "version": "1.0.0", @@ -11040,7 +12155,7 @@ "svgo": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "integrity": "sha512-jT/g9FFMoe9lu2IT6HtAxTA7RR2XOrmcrmCtGnyB/+GQnV6ZjNn+KOHZbZ35yL81+1F/aB6OeEsJztzBQ2EEwA==", "requires": { "coa": "~1.0.1", "colors": "~1.1.2", @@ -11284,7 +12399,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "through2": { "version": "2.0.5", @@ -11324,22 +12439,22 @@ "to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + "integrity": "sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==" }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==" }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "requires": { "kind-of": "^3.0.2" } @@ -11385,7 +12500,7 @@ "tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "requires": { "punycode": "^2.1.0" } @@ -11393,12 +12508,12 @@ "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==" }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==" }, "true-case-path": { "version": "1.0.3", @@ -11744,12 +12859,12 @@ "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "requires": { "safe-buffer": "^5.0.1" } @@ -11757,7 +12872,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "type": { "version": "1.2.0", @@ -11837,7 +12952,7 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "typescript": { "version": "4.9.5", @@ -11868,13 +12983,13 @@ "uglify-to-browserify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", "optional": true }, "uglifyjs-webpack-plugin": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "integrity": "sha512-TNM20HMW67kxHRNCZdvLyiwE1ST6WyY5Ae+TG55V81NpvNwJ9+V4/po4LHA1R9afV/WrqzfedG2UJCk2+swirw==", "requires": { "source-map": "^0.5.6", "uglify-js": "^2.8.29", @@ -11927,7 +13042,7 @@ "ultron": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + "integrity": "sha512-QMpnpVtYaWEeY+MwKDN/UdKlE/LsFZXM5lO1u7GaZzNgmIbGixHEmVMIKT+vqYOALu3m5GYQy9kz4Xu4IVn7Ow==" }, "unbox-primitive": { "version": "1.0.2", @@ -11954,12 +13069,12 @@ "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==" }, "unique-filename": { "version": "1.1.1", @@ -11985,12 +13100,12 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -11999,7 +13114,7 @@ "has-value": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -12009,7 +13124,7 @@ "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "requires": { "isarray": "1.0.0" } @@ -12019,7 +13134,7 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==" }, "isarray": { "version": "1.0.0", @@ -12063,7 +13178,7 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" }, "url": { "version": "0.11.1", @@ -12136,14 +13251,14 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" } } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "util.promisify": { "version": "1.0.0", @@ -12162,7 +13277,7 @@ "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { "version": "3.4.0", @@ -12181,7 +13296,7 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "vendors": { "version": "1.0.4", @@ -12191,7 +13306,7 @@ "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -12213,7 +13328,7 @@ "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==" }, "warning": { "version": "4.0.3", @@ -12731,12 +13846,12 @@ "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==" }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -12746,7 +13861,7 @@ "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -12763,12 +13878,12 @@ "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "integrity": "sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==" }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -12779,7 +13894,7 @@ "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==", "requires": { "pify": "^2.0.0" } @@ -12787,12 +13902,12 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==", "requires": { "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", @@ -12802,7 +13917,7 @@ "read-pkg-up": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==", "requires": { "find-up": "^2.0.0", "read-pkg": "^2.0.0" @@ -12811,7 +13926,7 @@ "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" }, "string-width": { "version": "2.1.1", @@ -12825,12 +13940,12 @@ "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=" + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "requires": { "ansi-regex": "^3.0.0" } @@ -12840,12 +13955,12 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "integrity": "sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==", "requires": { "has-flag": "^2.0.0" } @@ -12858,7 +13973,7 @@ "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -12867,7 +13982,7 @@ "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -12884,7 +13999,7 @@ "yargs": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "integrity": "sha512-3RiZrpLpjrzIAKgGdPktBcMP/eG5bDFlkI+PHle1qwzyVXyDQL+pD/eZaMoOOO0Y7LLBfjpucObuUm/icvbpKQ==", "requires": { "camelcase": "^4.1.0", "cliui": "^3.2.0", @@ -12904,7 +14019,7 @@ "yargs-parser": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "integrity": "sha512-WhzC+xgstid9MbVUktco/bf+KJG+Uu6vMX0LN1sLJvwmbCQVxb4D8LzogobonKycNasCZLdOzTAk1SK7+K7swg==", "requires": { "camelcase": "^4.1.0" } @@ -12969,7 +14084,7 @@ "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "requires": { "remove-trailing-separator": "^1.0.1" } @@ -13016,7 +14131,7 @@ "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==" }, "chokidar": { "version": "2.1.8", @@ -13040,7 +14155,7 @@ "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -13187,7 +14302,7 @@ "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -13213,7 +14328,7 @@ "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -13222,7 +14337,7 @@ "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "requires": { "is-extglob": "^2.1.0" } @@ -13232,7 +14347,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "is-accessor-descriptor": { "version": "1.0.0", @@ -13263,7 +14378,7 @@ "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "requires": { "kind-of": "^3.0.2" }, @@ -13316,7 +14431,7 @@ "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "requires": { "lcid": "^1.0.0" } @@ -13324,7 +14439,7 @@ "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" }, "supports-color": { "version": "5.5.0", @@ -13337,7 +14452,7 @@ "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -13346,12 +14461,12 @@ "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -13365,7 +14480,7 @@ "yargs": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "integrity": "sha512-6/QWTdisjnu5UHUzQGst+UOEuEVwIzFVGBjq3jMTFNs5WJQsH/X6nMURSaScIdF5txylr1Ao9bvbWiKi2yXbwA==", "requires": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -13385,7 +14500,7 @@ "yargs-parser": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "integrity": "sha512-+QQWqC2xeL0N5/TE+TY6OGEqyNRM+g2/r712PDNYgiCdXYCApXf1vzfmDSLBxfGRwV+moTq/V8FnMI24JCm2Yg==", "requires": { "camelcase": "^3.0.0" } @@ -13472,7 +14587,7 @@ "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=" + "integrity": "sha512-mmIPAft2vTgEILgPeZFqE/wWh24SEsR/k+N9fJ3Jxrz44iDFy9aemCxdksfURSHYFCLmvs/d/7Iso5XjPpNfrA==" }, "which": { "version": "2.0.2", @@ -13522,7 +14637,7 @@ "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==" }, "wordwrap": { "version": "0.0.3", @@ -13563,7 +14678,7 @@ "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=" + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" }, "string-width": { "version": "3.1.0", @@ -13588,12 +14703,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "integrity": "sha512-lobrh3Dhp6tD1hv7NAIMx+oX/rsH/yd6/4krpBmJ/6ulsMZgQMuttlWTuYVWLV6ZjlpWIOjz55KbQbcKSQywEQ==", "requires": { "options": ">=0.0.5", "ultron": "1.0.x" @@ -13602,12 +14717,12 @@ "wtf-8": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=" + "integrity": "sha512-qfR6ovmRRMxNHgUNYI9LRdVofApe/eYrv4ggNOvvCP+pPdEo9Ym93QN4jUceGD6PignBbp2zAzgoE7GibAdq2A==" }, "xmlhttprequest-ssl": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=" + "integrity": "sha512-kauAa/1btT613pYX92WXR6kx5trYeckB5YMd3pPvtkMo2Twdfhwl683M8NiSqWHHo97xAC6bnvK1DWFKxfmejg==" }, "xtend": { "version": "4.0.2", @@ -13657,7 +14772,7 @@ "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=" + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" }, "locate-path": { "version": "3.0.0", @@ -13728,7 +14843,7 @@ "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==" }, "yocto-queue": { "version": "0.1.0", diff --git a/package.json b/package.json index 0ade7f9ec..417fd23a5 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "extract-text-webpack-plugin": "3.0.2", "fetch-mock": "^9.11.0", "file-loader": "^6.2.0", + "firebase": "^9.6.11", "html-webpack-plugin": "^3.2.0", "isomorphic-fetch": "^2.2.1", "jasmine-core": "3.3.0", diff --git a/requirements.txt b/requirements.txt index 4f8ff3f69..9abf093b0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,7 @@ sentry-sdk[flask]>=1.5.7,<1.6 eve-elastic>=7.3.1,<7.4 MarkupSafe<2.1 python3-saml>=1.15,<1.16 - +google-auth>=2.6,<2.7 # Fix an issue between xhtml2pdf v0.2.4 and reportlab v3.6.7 # https://github.com/xhtml2pdf/xhtml2pdf/issues/589 diff --git a/tests/core/test_auth_providers.py b/tests/core/test_auth_providers.py index ff73e4f51..a4bae146e 100644 --- a/tests/core/test_auth_providers.py +++ b/tests/core/test_auth_providers.py @@ -22,8 +22,8 @@ def init(app): app.config["AUTH_PROVIDERS"].extend( [ - {"_id": "gip", "name": "Google", "auth_type": AuthProviderType.GOOGLE_OAUTH.value}, - {"_id": "saml", "name": "Azure", "auth_type": AuthProviderType.SAML.value}, + {"_id": "gip", "name": "Google", "auth_type": AuthProviderType.GOOGLE_OAUTH}, + {"_id": "saml", "name": "Azure", "auth_type": AuthProviderType.SAML}, ] ) app.data.insert( @@ -38,7 +38,7 @@ def init(app): "_id": companies["password_auth"], "name": "Password based auth", "is_enabled": True, - "auth_provider": "newshub", + "auth_provider": "newsroom", }, { "_id": companies["google_auth"], diff --git a/webpack.config.js b/webpack.config.js index 9e5ef8554..4b136b039 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -34,6 +34,9 @@ const config = { common: path.resolve(__dirname, 'assets/common.ts'), design_js: path.resolve(__dirname, 'assets/design_pages.ts'), company_admin_js: path.resolve(__dirname, 'assets/company-admin/index.ts'), + firebase_login_js: path.resolve(__dirname, 'assets/auth/firebase/login.ts'), + firebase_reset_password_js: path.resolve(__dirname, 'assets/auth/firebase/reset_password.ts'), + firebase_change_password_js: path.resolve(__dirname, 'assets/auth/firebase/change_password.ts'), }, output: { path: path.resolve(process.cwd(), 'dist'), From 0dcad101bcc854e98b58e447803446fbafdd645e Mon Sep 17 00:00:00 2001 From: MarkLark86 Date: Fri, 24 Nov 2023 09:34:18 +1100 Subject: [PATCH 13/22] [STTNHUB-216] Agenda: Show group headers for hidden items (#662) * api: new agenda search args * design: use ts to compile design app * ui: ts interface improvements * chore(config): Update lint rules * ui: list group header redux changes * ui: groupItems util changes and tests * ui: list group headers * ui: Show multi day labels * ui: hide group icons on mobile * ui: various changes * ui: fix group loading skeleton background colour * fix lint/formatting issues * Fetch items in 1 request instead of 2 * Remove feature test for starts_before, ends_after Agenda date filters * Remove unused style --- .eslintrc.js | 3 +- assets/agenda/actions.ts | 199 +- assets/agenda/components/AgendaList.tsx | 472 +-- .../components/AgendaListCoverageItem.tsx | 70 +- .../components/AgendaListGroupHeader.tsx | 99 + assets/agenda/components/AgendaListItem.tsx | 121 +- .../agenda/components/AgendaListItemIcons.tsx | 95 +- assets/agenda/components/AgendaMetaTime.tsx | 77 +- assets/agenda/components/AgendaTime.tsx | 6 +- .../agenda/components/MultiDayListLabel.tsx | 31 + assets/agenda/index.ts | 3 +- assets/agenda/reducers.ts | 181 +- assets/agenda/tests/utils.spec.ts | 257 +- assets/agenda/utils.ts | 326 +- assets/components/PersonalizeHomeModal.tsx | 5 +- assets/home/components/HomeApp.tsx | 43 +- assets/interfaces/agenda.ts | 162 +- assets/interfaces/common.ts | 35 +- assets/interfaces/configs.ts | 81 + assets/interfaces/content.ts | 5 +- assets/interfaces/index.ts | 20 +- assets/interfaces/search.ts | 25 + assets/interfaces/user.ts | 4 +- assets/item-actions.ts | 3 +- assets/layout/components/BaseApp.tsx | 12 +- assets/search/reducers.ts | 28 +- assets/styles/article-list.scss | 9 +- assets/users/components/EditUser.tsx | 6 +- assets/utils.tsx | 10 +- assets/wire/tests/actions.spec.ts | 3 + assets/wire/utils.ts | 10 +- newsroom/agenda/agenda.py | 54 +- newsroom/web/default_settings.py | 8 - package-lock.json | 2965 +++++++---------- package.json | 7 +- webpack.design.js | 10 +- 36 files changed, 2937 insertions(+), 2508 deletions(-) create mode 100644 assets/agenda/components/AgendaListGroupHeader.tsx create mode 100644 assets/agenda/components/MultiDayListLabel.tsx create mode 100644 assets/interfaces/configs.ts create mode 100644 assets/interfaces/search.ts diff --git a/.eslintrc.js b/.eslintrc.js index a145425e1..d404313ec 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -23,6 +23,7 @@ module.exports = { ], 'rules': { '@typescript-eslint/no-explicit-any': 0, + '@typescript-eslint/ban-ts-comment': 0, 'indent': [ 'error', 4 @@ -62,7 +63,7 @@ module.exports = { }, 'settings': { 'react': { - 'version': '16.2' + 'version': '17.0' } } }; diff --git a/assets/agenda/actions.ts b/assets/agenda/actions.ts index 441269d99..0840f23ca 100644 --- a/assets/agenda/actions.ts +++ b/assets/agenda/actions.ts @@ -1,6 +1,13 @@ import {get, isEmpty, includes, cloneDeep} from 'lodash'; import moment from 'moment'; +import { + IRestApiResponse, + IAgendaItem, + IAgendaListGroup, + IAgendaState, + AgendaThunkAction, ISearchState, +} from 'interfaces'; import server from 'server'; import analytics from 'analytics'; import { @@ -19,6 +26,7 @@ import {renderModal, setSavedItemsCount} from 'actions'; import { getDateInputDate, getMomentDate, + groupItems, } from './utils'; import { @@ -140,10 +148,25 @@ export function queryItems() { } export const RECIEVE_ITEMS = 'RECIEVE_ITEMS'; -export function recieveItems(data: any) { +export function recieveItems(data: IRestApiResponse) { return {type: RECIEVE_ITEMS, data}; } +export const SET_LIST_GROUPS_AND_ITEMS = 'SET_LIST_GROUPS_AND_ITEMS'; +function setListGroupsAndItems(groupItems: Array) { + return {type: SET_LIST_GROUPS_AND_ITEMS, data: groupItems}; +} + +export const ADD_ITEMS_TO_LIST_GROUPS = 'ADD_ITEMS_TO_LIST_GROUPS'; +function addItemsToListGroups(groupItems: Array) { + return {type: ADD_ITEMS_TO_LIST_GROUPS, data: groupItems}; +} + +export const TOGGLE_HIDDEN_GROUP_ITEMS = 'TOGGLE_HIDDEN_GROUP_ITEMS'; +export function toggleHiddenGroupItems(dateString: string) { + return {type: TOGGLE_HIDDEN_GROUP_ITEMS, data: dateString}; +} + export const RECIEVE_ITEM = 'RECIEVE_ITEM'; export function recieveItem(data: any) { return {type: RECIEVE_ITEM, data}; @@ -199,58 +222,26 @@ export function copyPreviewContents(item: any) { }; } -/** - * Search server request - * - * @param {Object} state - * @param {bool} next - * @return {Promise} - */ -function search(state: any, next?: any) { - const currentMoment = moment(); - const searchParams: any = searchParamsSelector(state); - const createdFilter: any = get(searchParams, 'created') || {}; - const itemTypeFilter: any = get(state, 'agenda.itemType'); - const eventsOnlyFilter: any = !state.bookmarks && itemTypeFilter === 'events'; - - const featuredFilter = noNavigationSelected(searchParams.navigation) && - !state.bookmarks && - !eventsOnlyFilter && - get(state, 'agenda.featuredOnly'); - - let fromDateFilter: any; - - if (featuredFilter) { - fromDateFilter = getMomentDate(get(state, 'agenda.activeDate')).set({ - hour: currentMoment.hour(), - minute: currentMoment.minute() - }).format('DD/MM/YYYY HH:mm'); // Server expects specific date/time format for FeaturedStories param - } else { - const agendaDate = getDateInputDate(get(state, 'agenda.activeDate')); - fromDateFilter = ( - isEmpty(createdFilter.from) && - isEmpty(createdFilter.to) && - !(state.bookmarks && state.user) - ) ? agendaDate : createdFilter.from; - } - - let dateTo = createdFilter.to; - if (createdFilter.from && createdFilter.from.indexOf('now') >= 0) { - dateTo = createdFilter.from; - } +function search(state: IAgendaState, fetchFrom: number): Promise> { + const { + itemType, + searchParams, + featured, + fromDate, + toDate, + } = getAgendaSearchParamsFromState(state); const params: any = { q: searchParams.query, - id: state.queryId, bookmarks: state.bookmarks && state.user, navigation: getNavigationUrlParam(searchParams.navigation, true, false), filter: !isEmpty(searchParams.filter) && encodeURIComponent(JSON.stringify(searchParams.filter)), - from: next ? state.items.length : 0, - date_from: fromDateFilter, - date_to: dateTo, + from: fetchFrom, + date_from: fromDate, + date_to: toDate, timezone_offset: getTimezoneOffset(), - featured: featuredFilter, - itemType: itemTypeFilter, + featured: featured, + itemType: itemType, advanced: !searchParams.advanced ? null : encodeURIComponent(JSON.stringify(searchParams.advanced)), es_highlight: !searchParams.query && !searchParams.advanced ? null : 1, }; @@ -266,12 +257,15 @@ function search(state: any, next?: any) { /** * Fetch items for current query */ -export function fetchItems(): any { - return (dispatch: any, getState: any) => { +export function fetchItems(): AgendaThunkAction { + return (dispatch, getState) => { const start = Date.now(); dispatch(queryItems()); - return search(getState()) - .then((data: any) => dispatch(recieveItems(data))) + return search(getState(), 0) + .then((data) => { + dispatch(recieveItems(data)); + return dispatch(setListGroupsAndLoadHiddenItems(data._items, false)); + }) .then(() => { analytics.timingComplete('search', Date.now() - start); }) @@ -279,6 +273,94 @@ export function fetchItems(): any { }; } +interface AgendaSearchParams { + itemType: IAgendaState['agenda']['itemType']; + searchParams: any; + featured: boolean; + fromDate?: string; + toDate?: string; +} + +function getAgendaSearchParamsFromState(state: IAgendaState): AgendaSearchParams { + const itemTypeFilter = state.agenda.itemType; + const eventsOnlyFilter = !state.bookmarks && itemTypeFilter === 'events'; + const searchParams: any = searchParamsSelector(state); + const createdFilter: ISearchState['createdFilter'] = searchParams.created || {}; + const currentMoment = moment(); + const featuredFilter = noNavigationSelected(searchParams.navigation) && + !state.bookmarks && + !eventsOnlyFilter && + state.agenda.featuredOnly === true; + let fromDate: string | undefined; + + if (featuredFilter) { + fromDate = getMomentDate(state.agenda.activeDate).set({ + hour: currentMoment.hour(), + minute: currentMoment.minute() + }).format('DD/MM/YYYY HH:mm'); // Server expects specific date/time format for FeaturedStories param + } else { + const agendaDate = getDateInputDate(state.agenda.activeDate); + + fromDate = ( + createdFilter.from == null && + createdFilter.to == null && + state.bookmarks !== true + ) ? agendaDate : createdFilter.from; + } + + return { + itemType: itemTypeFilter, + searchParams: searchParams, + featured: featuredFilter, + fromDate: fromDate, + toDate: createdFilter.from?.startsWith('now/') ? + createdFilter.from : + createdFilter.to, + }; +} + +function setListGroupsAndLoadHiddenItems(items: Array, next?: boolean): AgendaThunkAction { + return (dispatch, getState) => { + // If there are groups shown, then load the hidden items for those groups + const state = getState(); + const {activeGrouping, featuredOnly} = state.agenda; + const {fromDate, toDate} = getAgendaSearchParamsFromState(state); + let minDate: moment.Moment; + let maxDate: moment.Moment | undefined; + + if (toDate != null && fromDate?.startsWith('now/') != true) { + maxDate = moment(toDate); + } + if (fromDate?.startsWith('now/')) { + if (fromDate === 'now/w') { + minDate = moment().startOf('week'); + maxDate = minDate.clone().add(1, 'week').subtract(1, 'day'); + } else if (fromDate === 'now/M') { + minDate = moment().startOf('month'); + maxDate = minDate.clone().add(1, 'month').subtract(1, 'day'); + } else { + minDate = moment().startOf('day'); + maxDate = minDate.clone(); + } + } else { + minDate = moment(fromDate); + } + minDate.set({'h': 0, 'm': 0, 's': 0}); + + if (maxDate != null) { + maxDate.set({'h': 23, 'm': 59, 's': 59}); + } + + const groups = groupItems(items, minDate, maxDate, activeGrouping, featuredOnly); + + next === true ? + dispatch(addItemsToListGroups(groups)) : + dispatch(setListGroupsAndItems(groups)); + + return; + }; +} + export function fetchItem(id: any) { return (dispatch: any) => { return server.get(`/agenda/${id}?format=json`) @@ -567,13 +649,13 @@ export function startLoading() { } export const RECIEVE_NEXT_ITEMS = 'RECIEVE_NEXT_ITEMS'; -export function recieveNextItems(data: any) { - return {type: RECIEVE_NEXT_ITEMS, data}; +export function recieveNextItems(data: IRestApiResponse, setFetchFrom: boolean) { + return {type: RECIEVE_NEXT_ITEMS, data: {...data, setFetchFrom: setFetchFrom}}; } const MAX_ITEMS = 1000; // server limit -export function fetchMoreItems() { - return (dispatch: any, getState: any) => { +export function fetchMoreItems(): AgendaThunkAction { + return (dispatch, getState) => { const state = getState(); const limit = Math.min(MAX_ITEMS, state.totalItems); @@ -582,8 +664,11 @@ export function fetchMoreItems() { } dispatch(startLoading()); - return search(getState(), true) - .then((data: any) => dispatch(recieveNextItems(data))) + return search(getState(), state.fetchFrom) + .then((data) => { + dispatch(recieveNextItems(data, true)); + return dispatch(setListGroupsAndLoadHiddenItems(data._items, true)); + }) .catch(errorHandler); }; } @@ -691,4 +776,4 @@ export function stopWatchingCoverage(coverage: any, item: any) { } }, (error: any) => { errorHandler(error, dispatch);}); }; -} \ No newline at end of file +} diff --git a/assets/agenda/components/AgendaList.tsx b/assets/agenda/components/AgendaList.tsx index 91e2859de..66cf89f31 100644 --- a/assets/agenda/components/AgendaList.tsx +++ b/assets/agenda/components/AgendaList.tsx @@ -1,17 +1,31 @@ -import React, {Fragment} from 'react'; -import PropTypes from 'prop-types'; +import React from 'react'; import {connect} from 'react-redux'; import {createSelector} from 'reselect'; -import {get, isEqual, cloneDeep} from 'lodash'; +import {isEqual, cloneDeep} from 'lodash'; import classNames from 'classnames'; import moment from 'moment'; +import { + IAgendaItem, + IAgendaListGroup, + IAgendaListGroupItem, + ICompany, + IItemAction, + IListConfig, + IPreviewConfig, + IUser, + IUserType, + IAgendaState, +} from 'interfaces'; import {gettext, DATE_FORMAT, isDisplayed, shouldShowListShortcutActionIcons} from 'utils'; + import AgendaListItem from './AgendaListItem'; -import {setActive, previewItem, toggleSelected, openItem} from '../actions'; +import {AgendaListGroupHeader} from './AgendaListGroupHeader'; + +import {setActive, previewItem, toggleSelected, openItem, toggleHiddenGroupItems} from '../actions'; import {EXTENDED_VIEW} from 'wire/defaults'; import {getIntVersion} from 'wire/utils'; -import {groupItems, getPlanningItemsByGroup, getListItems} from 'agenda/utils'; +import {getPlanningItemsByGroup, getListItems} from 'agenda/utils'; import {searchNavigationSelector} from 'search/selectors'; import {previewConfigSelector, listConfigSelector} from 'ui/selectors'; import {AGENDA_DATE_FORMAT_LONG, AGENDA_DATE_FORMAT_SHORT} from '../../utils'; @@ -19,47 +33,90 @@ import {AGENDA_DATE_FORMAT_LONG, AGENDA_DATE_FORMAT_SHORT} from '../../utils'; const PREVIEW_TIMEOUT = 500; // time to preview an item after selecting using kb const CLICK_TIMEOUT = 200; // time when we wait for double click after click -const EMPTY_ARRAY: Array = []; const EMPTY_OBJECT = {}; -const itemIdsSelector = (state: any) => state.items || EMPTY_ARRAY; -const itemsByIdSelector = (state: any) => state.itemsById || EMPTY_OBJECT; - - -const itemsSelector = createSelector( - [itemIdsSelector, itemsByIdSelector], - (ids, items) => ids.map((itemId: any) => items[itemId]) -); +const itemsByIdSelector = (state: IAgendaState) => state.itemsById || EMPTY_OBJECT; +const groupedItemsSelector = (state: IAgendaState) => state.listItems.groups; -const activeDateSelector = (state: any) => get(state, 'agenda.activeDate'); -const activeGroupingSelector = (state: any) => get(state, 'agenda.activeGrouping'); -const featuredOnlySelector = (state: any) => get(state, 'agenda.featuredOnly', false); - -const groupedItemsSelector = createSelector( - [itemsSelector, activeDateSelector, activeGroupingSelector, featuredOnlySelector], - groupItems); +const hiddenGroupsShownSelector = (state: IAgendaState) => state.listItems.hiddenGroupsShown; /** * Single event or planning item could be display multiple times. * Hence, the list items needs to tbe calculate so that keyboard scroll works. * This selector calculates list of items. */ -const listItemsSelector = createSelector( - [groupedItemsSelector, itemsByIdSelector], +const listItemsSelector = createSelector< + IAgendaState, + Array, + IAgendaState['itemsById'], + {[dateString: string]: boolean}, + Array +>( + [groupedItemsSelector, itemsByIdSelector, hiddenGroupsShownSelector], getListItems ); +interface IStateProps { + itemsById: {[itemId: string]: IAgendaItem}; + activeItem?: {_id: IAgendaItem['_id'], group: string, plan?: IAgendaItem['_id']}; + previewItemId?: IAgendaItem['_id']; + previewGroup?: string; + previewPlan?: IAgendaItem['_id']; + selectedItems: Array; + readItems: {[itemId: string]: number}; + bookmarks: boolean; + user: IUser['_id']; + company?: ICompany['_id']; + groupedItems: Array; + activeDate: number; + searchInitiated: boolean; + activeNavigation: Array; + resultsFiltered: boolean; + listItems: Array; + isLoading: boolean; + previewConfig: IPreviewConfig; + featuredOnly: boolean; + listConfig: IListConfig; + userType: IUserType; + hiddenGroupsShown: {[dateString: string]: boolean}; +} -class AgendaList extends React.Component { - static propTypes: any; - previewTimeout: any; - clickTimeout: any; - elem: any; +interface IDispatchProps { + setActive(item?: IAgendaListGroupItem): void; + previewItem(item?: IAgendaItem, group?: string, planId?: IAgendaItem['_id']): void; + openItem(item: IAgendaItem, group: string, plan?: IAgendaItem['_id']): void; + toggleSelected(itemId: IAgendaItem['_id']): void; + toggleHiddenGroupItems(dateString: string): void; +} - constructor(props: any) { +interface IOwnProps { + actions: Array; + activeView: string; + onScroll(event: React.MouseEvent): void; + refNode(element: HTMLDivElement): void; +} + +type IProps = IStateProps & IDispatchProps & IOwnProps; + +interface IState { + actioningItem?: IAgendaItem; + activePlan?: IAgendaItem; + activeGroup?: string; +} + +class AgendaList extends React.Component { + previewTimeout?: number; + clickTimeout?: number; + elem?: HTMLDivElement; + + constructor(props: IProps) { super(props); - this.state = {actioningItem: null}; + this.state = { + actioningItem: undefined, + activePlan: undefined, + activeGroup: undefined, + }; this.onKeyDown = this.onKeyDown.bind(this); this.onItemClick = this.onItemClick.bind(this); @@ -70,23 +127,23 @@ class AgendaList extends React.Component { this.isActiveItem = this.isActiveItem.bind(this); } - onKeyDown(event: any) { + onKeyDown(event: React.KeyboardEvent) { let diff = 0; switch (event.key) { case 'ArrowDown': - this.setState({actioningItem: null}); + this.setState({actioningItem: undefined}); diff = 1; break; case 'ArrowUp': - this.setState({actioningItem: null}); + this.setState({actioningItem: undefined}); diff = -1; break; case 'Escape': - this.setState({actioningItem: null}); - this.props.dispatch(setActive(null)); - this.props.dispatch(previewItem(null)); + this.setState({actioningItem: undefined}); + this.props.setActive(); + this.props.previewItem(); return; default: @@ -96,26 +153,32 @@ class AgendaList extends React.Component { event.preventDefault(); const activeItem = this.props.activeItem; - const activeIndex = this.props.activeItem ? this.props.listItems.findIndex((item: any) => { - return item._id === activeItem._id && + const activeIndex = activeItem == null ? + -1 : + this.props.listItems.findIndex((item) => ( + item._id === activeItem._id && item.group === activeItem.group && - get(item, 'plan._id') === get(activeItem, 'plan._id'); - }) : -1; + item.plan === activeItem.plan + )); - // keep it within <0, items.length) interval + // keep it within (0, items.length) interval const nextIndex = Math.max(0, Math.min(activeIndex + diff, this.props.listItems.length - 1)); const nextItemInList = this.props.listItems[nextIndex]; const nextItem = this.props.itemsById[nextItemInList._id]; - this.props.dispatch(setActive(nextItemInList)); + this.props.setActive({ + _id: nextItemInList._id, + group: nextItemInList.group, + plan: nextItemInList.plan, + }); - if (this.previewTimeout) { + if (this.previewTimeout != null) { clearTimeout(this.previewTimeout); } - this.previewTimeout = setTimeout(() => this.props.dispatch( - previewItem(nextItem, nextItemInList.group, get(nextItemInList, 'plan.guid')) - ), PREVIEW_TIMEOUT); + this.previewTimeout = window.setTimeout(() => { + this.props.previewItem(nextItem, nextItemInList.group, nextItemInList.plan); + }, PREVIEW_TIMEOUT); const activeElements = document.getElementsByClassName('wire-articles__item--open'); @@ -127,70 +190,74 @@ class AgendaList extends React.Component { cancelPreviewTimeout() { if (this.previewTimeout) { clearTimeout(this.previewTimeout); - this.previewTimeout = null; + this.previewTimeout = undefined; } } cancelClickTimeout() { - if (this.clickTimeout) { + if (this.clickTimeout != null) { clearTimeout(this.clickTimeout); - this.clickTimeout = null; + this.clickTimeout = undefined; } } - onItemClick(item: any, group: any, plan: any) { + onItemClick(item: IAgendaItem, group: string, plan?: IAgendaItem['_id']) { const itemId = item._id; - this.setState({actioningItem: null}); + this.setState({actioningItem: undefined}); this.cancelPreviewTimeout(); this.cancelClickTimeout(); - this.clickTimeout = setTimeout(() => { - this.props.dispatch(setActive({_id: itemId, group: group, plan: plan})); + this.clickTimeout = window.setTimeout(() => { + this.props.setActive({_id: itemId, group: group, plan: plan}); - if (this.props.previewItem !== itemId || + if (this.props.previewItemId !== itemId || this.props.previewGroup !== group || this.props.previewPlan !== plan) { - this.props.dispatch(previewItem(item, group, plan)); + this.props.previewItem(item, group, plan); } else { - this.props.dispatch(previewItem(null, null, null)); + this.props.previewItem(); } }, CLICK_TIMEOUT); } resetActioningItem() { - this.setState({actioningItem: null}); + this.setState({actioningItem: undefined}); } - onItemDoubleClick(item: any, group: any, plan: any) { + onItemDoubleClick(item: IAgendaItem, group: string, plan?: IAgendaItem['_id']) { this.cancelClickTimeout(); - this.props.dispatch(setActive({_id: item._id, group: group, plan: plan})); - this.props.dispatch(openItem(item, group, plan)); + this.props.setActive({_id: item._id, group: group, plan: plan}); + this.props.openItem(item, group, plan); } - onActionList(event: any, item: any, group: any, plan: any) { + onActionList(event: React.MouseEvent, item: IAgendaItem, group: string, plan?: IAgendaItem) { event.stopPropagation(); if (this.state.actioningItem && this.state.actioningItem._id === item._id && - (!this.state.activePlan || (this.state.activePlan && this.state.activePlan.guid === get(plan, 'guid')))) { - this.setState({actioningItem: null, activeGroup: null, activePlan: null}); + (!this.state.activePlan || (this.state.activePlan && this.state.activePlan.guid === plan?.guid))) { + this.setState({actioningItem: undefined, activeGroup: undefined, activePlan: undefined}); } else { this.setState({actioningItem: item, activeGroup: group, activePlan: plan}); } } - filterActions(item: any, config: any) { - return this.props.actions.filter((action: any) => (!config || isDisplayed(action.id, config)) && + filterActions(item: IAgendaItem, config: IPreviewConfig) { + return this.props.actions.filter((action) => (!config || isDisplayed(action.id, config)) && (!action.when || action.when(this.props, item))); } - isActiveItem(_id: any, group: any, plan: any) { + isActiveItem(_id: IAgendaItem['_id'], group: string, plan?: IAgendaItem) { const {activeItem} = this.props; - if (!activeItem || (!_id && !group && !plan)) { + if (activeItem == null || (!_id && !group && !plan)) { return false; } if (_id && group && plan) { - return _id === activeItem._id && group === activeItem.group && plan.guid === get(activeItem, 'plan.guid'); + return ( + _id === activeItem._id && + group === activeItem.group && + plan.guid === activeItem.plan + ); } if (_id && group) { @@ -200,16 +267,18 @@ class AgendaList extends React.Component { return _id === activeItem._id; } - componentDidUpdate(nextProps: any) { - if (!isEqual(nextProps.activeDate, this.props.activeDate) || - !isEqual(nextProps.activeNavigation, this.props.activeNavigation) || - (!nextProps.searchInitiated && this.props.searchInitiated)) { + componentDidUpdate(prevProps: Readonly) { + if (this.elem != null && ( + prevProps.activeDate !== this.props.activeDate || + !isEqual(prevProps.activeNavigation, this.props.activeNavigation) || + (!prevProps.searchInitiated && this.props.searchInitiated) + )) { this.elem.scrollTop = 0; } } - getListGroupDate(group: any) { - if (get(group, 'date')) { + getListGroupDate(group: IAgendaListGroup) { + if (group.date != null) { const groupDate = moment(group.date, DATE_FORMAT); const today = moment(); const tomorrow = moment(today).add(1,'days'); @@ -225,107 +294,118 @@ class AgendaList extends React.Component { } } - render() { - const { - groupedItems, - itemsById, - activeView, - selectedItems, - readItems, - refNode, - onScroll, - listConfig - } = this.props; - - const isExtended = activeView === EXTENDED_VIEW; + renderGroupItems(group: IAgendaListGroup, forHiddenItems: boolean) { + const itemIds = forHiddenItems === true ? group.hiddenItems : group.items; + const isExtended = this.props.activeView === EXTENDED_VIEW; const showShortcutActionIcons = shouldShowListShortcutActionIcons(this.props.listConfig, isExtended); - const articleGroups = groupedItems.map((group: any) => - [ -
- {this.getListGroupDate(group)} -
, - -
- {group.items.map((_id: any, groupIndex: any) => { - - const plans = getPlanningItemsByGroup(itemsById[_id], group.date); - - if (plans.length > 0) { - return ( - { - plans.map((plan: any) => - this.props.dispatch(toggleSelected(_id))} - actions={this.filterActions(itemsById[_id], this.props.previewConfig)} - isExtended={isExtended} - user={this.props.user} - actioningItem={this.state.actioningItem} - planningId={plan.guid} - resetActioningItem={this.resetActioningItem} - showShortcutActionIcons={showShortcutActionIcons} - listConfig={listConfig} - /> - ) - } - ); - } else { - return ( this.props.dispatch(toggleSelected(_id))} - actions={this.filterActions(itemsById[_id], this.props.previewConfig)} - isExtended={isExtended} - user={this.props.user} - actioningItem={this.state.actioningItem} - resetActioningItem={this.resetActioningItem} - showShortcutActionIcons={showShortcutActionIcons} - listConfig={listConfig} - />); - } - })} -
- ] - ); - - const listClassName = classNames('wire-articles wire-articles--list', { - 'wire-articles--list-compact': !isExtended, - }); + return ( +
+ {itemIds.map((itemId) => { + const plans = getPlanningItemsByGroup(this.props.itemsById[itemId], group.date); + + return plans.length > 0 ? ( + + {plans.map((plan) => ( + this.props.toggleSelected(itemId)} + actions={this.filterActions(this.props.itemsById[itemId], this.props.previewConfig)} + isExtended={isExtended} + user={this.props.user} + actioningItem={this.state.actioningItem} + planningId={plan.guid} + resetActioningItem={this.resetActioningItem} + showShortcutActionIcons={showShortcutActionIcons} + listConfig={this.props.listConfig} + /> + ))} + + ) : ( + this.props.toggleSelected(itemId)} + actions={this.filterActions(this.props.itemsById[itemId], this.props.previewConfig)} + isExtended={isExtended} + user={this.props.user} + actioningItem={this.state.actioningItem} + resetActioningItem={this.resetActioningItem} + showShortcutActionIcons={showShortcutActionIcons} + listConfig={this.props.listConfig} + /> + ); + })} +
+ ); + } + render() { return ( -
{ - if (elem) { - refNode(elem); + ref={(elem) => { + if (elem != null) { + this.props.refNode(elem); this.elem = elem; } }} - onScroll={onScroll} > - {articleGroups} - {!groupedItems.length && + onScroll={this.props.onScroll} + > + {this.props.groupedItems.map((group) => ( + +
+ {this.getListGroupDate(group)} +
+ + {group.hiddenItems.length === 0 ? null : ( + + )} + + {this.props.hiddenGroupsShown[group.date] !== true ? + null : + this.renderGroupItems(group, true) + } + {this.renderGroupItems(group, false)} +
+ ))} + {!this.props.groupedItems.length &&
{gettext('No items found.')}
@@ -335,42 +415,10 @@ class AgendaList extends React.Component { } } -AgendaList.propTypes = { - itemsById: PropTypes.object, - activeItem: PropTypes.object, - previewItem: PropTypes.string, - previewGroup: PropTypes.string, - previewPlan: PropTypes.string, - dispatch: PropTypes.func.isRequired, - selectedItems: PropTypes.array, - readItems: PropTypes.object, - actions: PropTypes.arrayOf(PropTypes.shape({ - name: PropTypes.string, - action: PropTypes.func, - })), - bookmarks: PropTypes.bool, - user: PropTypes.string, - company: PropTypes.string, - activeView: PropTypes.string, - groupedItems: PropTypes.array, - activeDate: PropTypes.number, - searchInitiated: PropTypes.bool, - activeNavigation: PropTypes.arrayOf(PropTypes.string), - resultsFiltered: PropTypes.bool, - listItems: PropTypes.array, - isLoading: PropTypes.bool, - onScroll: PropTypes.func, - refNode: PropTypes.func, - previewConfig: PropTypes.object, - featuredOnly: PropTypes.bool, - listConfig: PropTypes.object, - userType: PropTypes.string -}; - -const mapStateToProps = (state: any) => ({ +const mapStateToProps = (state: IAgendaState): IStateProps => ({ itemsById: state.itemsById, activeItem: state.activeItem, - previewItem: state.previewItem, + previewItemId: state.previewItem, previewGroup: state.previewGroup, previewPlan: state.previewPlan, selectedItems: state.selectedItems, @@ -379,18 +427,32 @@ const mapStateToProps = (state: any) => ({ user: state.user, company: state.company, groupedItems: groupedItemsSelector(state), - activeDate: get(state, 'agenda.activeDate'), + activeDate: state.agenda.activeDate, searchInitiated: state.searchInitiated, activeNavigation: searchNavigationSelector(state), resultsFiltered: state.resultsFiltered, listItems: listItemsSelector(state), isLoading: state.isLoading, previewConfig: previewConfigSelector(state), - featuredOnly: get(state, 'agenda.featuredOnly'), + featuredOnly: state.agenda.featuredOnly, listConfig: listConfigSelector(state), - userType: state.user_type + userType: state.userType, + hiddenGroupsShown: hiddenGroupsShownSelector(state), }); -const component: React.ComponentType = connect(mapStateToProps)(AgendaList); +const mapDispatchToProps: IDispatchProps = { + setActive, + previewItem, + openItem, + toggleSelected, + toggleHiddenGroupItems, +}; + +const component = connect< + IStateProps, + IDispatchProps, + IOwnProps, + IAgendaState +>(mapStateToProps, mapDispatchToProps)(AgendaList); export default component; diff --git a/assets/agenda/components/AgendaListCoverageItem.tsx b/assets/agenda/components/AgendaListCoverageItem.tsx index 9cb5a3d40..d4627e9de 100644 --- a/assets/agenda/components/AgendaListCoverageItem.tsx +++ b/assets/agenda/components/AgendaListCoverageItem.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; import classNames from 'classnames'; -import {get, isEqual} from 'lodash'; +import {isEqual} from 'lodash'; +import {IAgendaItem, ICoverage, IUser} from 'interfaces'; import {gettext} from '../../utils'; import { getCoverageIcon, @@ -14,48 +14,64 @@ import { COVERAGE_STATUS_COLORS } from '../utils'; -class AgendaListCoverageItem extends React.Component { - static propTypes: any; - constructor(props: any) { +interface IProps { + group: string; + planningItem: IAgendaItem; + user: IUser['_id']; + coverage: ICoverage; + showBorder?: boolean; +} + +interface IState { + coverageClass: string; + beingUpdated: boolean; + isWatched: boolean; + watchText: string; + isCoverageForExtraDay: boolean; + tooltip: string; +} + +class AgendaListCoverageItem extends React.Component { + constructor(props: IProps) { super(props); - this.state = this.getUpdatedState(props); + this.state = this.getUpdatedState(); } - shouldComponentUpdate(nextProps: any) { + shouldComponentUpdate(nextProps: IProps) { return !isEqual(this.props.coverage, nextProps.coverage); } - componentWillReceiveProps(nextProps: any) { - if (!isEqual(this.props.coverage, nextProps.coverage)) { - this.setState(this.getUpdatedState(nextProps)); + componentDidUpdate(prevProps: Readonly) { + if (!isEqual(prevProps.coverage, this.props.coverage)) { + this.setState(this.getUpdatedState()); } } - getUpdatedState(props: any) { - const watched = isWatched(props.coverage, props.user); + getUpdatedState(): IState { + const watched = isWatched(this.props.coverage, this.props.user); + const watchText = watched ? gettext('(Watching)') : ''; + const beingUpdated = isCoverageBeingUpdated(this.props.coverage); - const state: any = { - coverageClass: `icon--coverage-${getCoverageIcon(props.coverage.coverage_type)}`, - beingUpdated: isCoverageBeingUpdated(props.coverage), + return { + coverageClass: `icon--coverage-${getCoverageIcon(this.props.coverage.coverage_type)}`, + beingUpdated: beingUpdated, isWatched: watched, - watchText: watched ? gettext('(Watching)') : '', - isCoverageForExtraDay: isCoverageForExtraDay(props.coverage), + watchText: watchText, + isCoverageForExtraDay: isCoverageForExtraDay(this.props.coverage, this.props.group), + tooltip: `${watchText} ${getCoverageTooltip(this.props.coverage, beingUpdated)}`, }; - - state.tooltip = `${state.watchText} ${getCoverageTooltip(props.coverage, state.beingUpdated)}`; - - return state; } render() { const props = this.props; const state = this.state; - const coverage_icon = get(COVERAGE_STATUS_COLORS, props.coverage.coverage_status) || WORKFLOW_COLORS[props.coverage.workflow_status]; + const coverage_icon = COVERAGE_STATUS_COLORS[props.coverage.coverage_status] || + WORKFLOW_COLORS[props.coverage.workflow_status]; return ( !props.group || props.coverage.scheduled == null || - (state.isCoverageForExtraDay && props.coverage.planning_id === get(props, 'planningItem.guid')) + (state.isCoverageForExtraDay && props.coverage.planning_id === props.planningItem.guid) ) && ( { } } -AgendaListCoverageItem.propTypes = { - planningItem: PropTypes.object, - user: PropTypes.string, - coverage: PropTypes.object, - showBorder: PropTypes.bool, - group: PropTypes.string, -}; - export default AgendaListCoverageItem; diff --git a/assets/agenda/components/AgendaListGroupHeader.tsx b/assets/agenda/components/AgendaListGroupHeader.tsx new file mode 100644 index 000000000..2ce320660 --- /dev/null +++ b/assets/agenda/components/AgendaListGroupHeader.tsx @@ -0,0 +1,99 @@ +import * as React from 'react'; +import moment from 'moment'; + +import {IAgendaItem} from 'interfaces'; +import {formatDate, gettext} from 'utils'; +import {getCoverageIcon} from '../utils'; + +import {Skeleton} from 'primereact/skeleton'; + +interface IProps { + group: string; + itemIds: Array; + itemsById: {[itemId: string]: IAgendaItem}; + itemsShown: boolean; + toggleHideItems(group: string): void; +} + +export function AgendaListGroupHeader({group, itemIds, itemsById, itemsShown, toggleHideItems}: IProps) { + const coverageTypeCount: {[coverageType: string]: number} = {}; + let itemCount = 0; + + // Filter out Events/Planning that meet the following criteria + // * Events with no planning items + // * Events or Planning, no coverages at all + // * Events or Planning, coverages fall on `group` date + for (let itemIndex = 0; itemIndex < itemIds.length; ++itemIndex) { + const item = itemsById[itemIds[itemIndex]]; + + if (item.coverages == null || item.coverages.length === 0) { + itemCount += 1; + continue; + } + + let coverageAdded = false; + for (let coverageIndex = 0; coverageIndex < item.coverages.length; ++coverageIndex) { + const coverage = item.coverages[coverageIndex]; + + if (formatDate(moment(coverage.scheduled)) !== group) { + continue; + } else if (coverageTypeCount[coverage.coverage_type] == null) { + coverageTypeCount[coverage.coverage_type] = 0; + coverageAdded = true; + } + + coverageTypeCount[coverage.coverage_type] += 1; + } + + if (coverageAdded) { + itemCount += 1; + } + } + + const coverageTypes = Object.keys(coverageTypeCount); + + return ( +
+ {itemIds.length} + {coverageTypes.length === 0 ? ( +
+ {gettext('More hidden')} + + ({gettext('{{ numberOfItems }} Event', {numberOfItems: itemIds.length})}) + +
+ ) : ( + +
+ {gettext('More hidden')} + + ({gettext('{{ numberOfItems }} Event & Planning', {numberOfItems: itemCount})}) + +
+
+ {coverageTypes.map((coverageType) => ( +
+ + + + + {coverageTypeCount[coverageType]} + +
+ ))} +
+
+ )} +
+ +
+
+ ); +} diff --git a/assets/agenda/components/AgendaListItem.tsx b/assets/agenda/components/AgendaListItem.tsx index 15ebacf8d..d1514e1cb 100644 --- a/assets/agenda/components/AgendaListItem.tsx +++ b/assets/agenda/components/AgendaListItem.tsx @@ -1,14 +1,12 @@ import React from 'react'; -import PropTypes from 'prop-types'; import classNames from 'classnames'; -import {get, isEqual} from 'lodash'; -import ActionButton from 'components/ActionButton'; +import {IAgendaItem, IItemAction, IListConfig, IUser} from 'interfaces'; +import ActionButton from 'components/ActionButton'; import AgendaListItemIcons from './AgendaListItemIcons'; import AgendaItemTimeUpdater from './AgendaItemTimeUpdater'; import AgendaInternalNote from './AgendaInternalNote'; -import {PlainText} from 'ui/components/PlainText'; import { hasCoverages, @@ -17,7 +15,6 @@ import { isRescheduled, getName, isWatched, - getDescription, getHighlightedDescription, getHighlightedName, getInternalNote, @@ -25,20 +22,34 @@ import { import ActionMenu from '../../components/ActionMenu'; import {LIST_ANIMATIONS, isMobilePhone} from 'utils'; -class AgendaListItem extends React.Component { - static propTypes: any; +interface IProps { + item: IAgendaItem; + group: string; + isActive: boolean; + isSelected: boolean; + isRead: boolean; + showActions: boolean; + actions: Array; + isExtended: boolean; + user: IUser['_id']; + actioningItem?: IAgendaItem; + planningId?: IAgendaItem['_id']; + showShortcutActionIcons: boolean; + listConfig: IListConfig; + + onClick(item: IAgendaItem, group: string, planningId?: IAgendaItem['_id']): void; + onDoubleClick(item: IAgendaItem, group: string, planningId?: IAgendaItem['_id']): void; + onActionList(event: React.MouseEvent, item: IAgendaItem, group: string, plan?: IAgendaItem): void; + toggleSelected(): void; + resetActioningItem(): void; +} - slugline: any; - state: any; - dom: any; +class AgendaListItem extends React.Component { + dom: {article: HTMLElement | null}; - constructor(props: any) { + constructor(props: IProps) { super(props); - this.slugline = props.item.slugline && props.item.slugline.trim(); - - this.state = {previousVersions: false}; this.dom = {article: null}; - this.onKeyDown = this.onKeyDown.bind(this); this.setArticleRef = this.setArticleRef.bind(this); this.onArticleClick = this.onArticleClick.bind(this); @@ -46,7 +57,7 @@ class AgendaListItem extends React.Component { this.onMouseEnter = this.onMouseEnter.bind(this); } - onKeyDown(event: any) { + onKeyDown(event: React.KeyboardEvent) { switch (event.key) { case ' ': // on space toggle selected item this.props.toggleSelected(); @@ -59,7 +70,7 @@ class AgendaListItem extends React.Component { event.preventDefault(); } - setArticleRef(elem: any) { + setArticleRef(elem: HTMLElement) { this.dom.article = elem; } @@ -77,32 +88,34 @@ class AgendaListItem extends React.Component { } } - shouldComponentUpdate(nextProps: any, nextState: any) { - const {props, state} = this; + shouldComponentUpdate(nextProps: Readonly) { + const {props} = this; + const currentBookmarked = (props.item.bookmarks || []).includes(props.user); + const nextBookmarked = (nextProps.item.bookmarks || []).includes(nextProps.user); - return props.item._etag !== nextProps.item._etag || state.hover !== nextState.hover || - props.isActive !== nextProps.isActive || props.isSelected !== nextProps.isSelected || + return props.item._etag !== nextProps.item._etag || + props.isActive !== nextProps.isActive || + props.isSelected !== nextProps.isSelected || props.isExtended !== nextProps.isExtended || - get(props.actioningItem, '_id') === props.item._id || - get(nextProps.actioningItem, '_id') === props.item._id || + props.actioningItem?._id === props.item._id || + nextProps.actioningItem?._id === props.item._id || props.isRead !== nextProps.isRead || - (get(props, 'item.bookmarks') || []).includes(props.user) !== - (get(nextProps, 'item.bookmarks') || []).includes(nextProps.user) || - isWatched(props.item, props.user) !== isWatched(nextProps.item, nextProps.user) || - isEqual(get(nextProps, 'coverages'), get(this.props, 'coverages')); + currentBookmarked !== nextBookmarked || + nextBookmarked || + isWatched(props.item, props.user) !== isWatched(nextProps.item, nextProps.user); } componentDidMount() { - if (this.props.isActive && this.dom.article) { + if (this.props.isActive === true && this.dom.article != null) { this.dom.article.focus(); } } - stopPropagation(event: any) { + stopPropagation(event: React.MouseEvent) { event.stopPropagation(); } - getClassNames(isExtended: any) { + getClassNames(isExtended: boolean) { return { card: classNames('wire-articles__item-wrap col-12 agenda-item'), wrap: classNames('wire-articles__item wire-articles__item--agenda wire-articles__item--list', { @@ -129,7 +142,6 @@ class AgendaListItem extends React.Component { getSegments(description: string) { const dom = new DOMParser().parseFromString(description.replace(/\n/g, '
'), 'text/html'); const arrayOfParagraphs = dom.body.querySelectorAll('p'); - const body = dom.body; const getSegmentCount = (p: HTMLParagraphElement): number => { // adding one because if there are 2
tags it means there are 3 segments @@ -140,7 +152,7 @@ class AgendaListItem extends React.Component { let segmentsRemainingToBeAdded = 3; let paragraphsInnerText = ''; - [...arrayOfParagraphs].forEach(paragraph => { + arrayOfParagraphs.forEach(paragraph => { if (segmentsRemainingToBeAdded > 0) { paragraphsInnerText += paragraph.innerText; paragraph.innerHTML = paragraph.innerHTML.split('
').filter((p: string) => p.trim() !== '').slice(0, segmentsRemainingToBeAdded).join('
'); @@ -156,20 +168,17 @@ class AgendaListItem extends React.Component { * keep in mind that first 3 segments might be 1-3 paragraphs */ firstThreeSegments: descriptionHTMLArr, - hasMoreContent: body.innerText.length > paragraphsInnerText.length, + hasMoreContent: dom.body.innerText.length > paragraphsInnerText.length, }; } - renderListItem(isMobile: any, children: any) { + renderListItem(isMobile: boolean, children: React.ReactNode) { const {item, isExtended, group, planningId, listConfig} = this.props; const classes = this.getClassNames(isExtended); - const planningItem = (get(item, 'planning_items') || []).find((p: any) => p.guid === planningId) || null; - const description: string = item.es_highlight - ? getHighlightedDescription(item, planningItem) - : getDescription(item,planningItem); + const planningItem = (item.planning_items || []).find((p) => p.guid === planningId); + const description = getHighlightedDescription(item, planningItem); // Show headline for adhoc planning items - const showHeadline = !item.event && get(item, 'headline.length', 0) > 0; - + const showHeadline = item.event == null && (item.headline?.length ?? 0) > 0; const {firstThreeSegments, hasMoreContent} = this.getSegments(description); const renderDescription = (() => { @@ -264,7 +273,7 @@ class AgendaListItem extends React.Component { renderNonMobile() { const {item, planningId} = this.props; - const planningItem = (get(item, 'planning_items') || []).find((p: any) => p.guid === planningId) || {}; + const planningItem = (item.planning_items || []).find((p) => p.guid === planningId); return this.renderListItem(false, !this.props.actions.length ? null : (
@@ -279,7 +288,7 @@ class AgendaListItem extends React.Component { showShortcutActions={!this.props.showShortcutActionIcons} /> - {!this.props.showShortcutActionIcons ? null : this.props.actions.map((action: any) => action.shortcut && ( + {!this.props.showShortcutActionIcons ? null : this.props.actions.map((action) => action.shortcut && ( { renderMobile() { const {item, planningId} = this.props; - const planningItem = (get(item, 'planning_items') || []).find((p: any) => p.guid === planningId) || {}; + const planningItem = (item.planning_items || []).find((p) => p.guid === planningId); const internalNote = getInternalNote(item, planningItem); return this.renderListItem(true, ( @@ -309,7 +318,7 @@ class AgendaListItem extends React.Component { noPaddingRight={true} /> - {!this.props.showShortcutActionIcons ? null : this.props.actions.map((action: any) => action.shortcut && ( + {!this.props.showShortcutActionIcons ? null : this.props.actions.map((action) => action.shortcut && ( { } } -AgendaListItem.propTypes = { - item: PropTypes.object.isRequired, - group: PropTypes.string, - isActive: PropTypes.bool.isRequired, - isSelected: PropTypes.bool.isRequired, - isRead: PropTypes.bool.isRequired, - onClick: PropTypes.func.isRequired, - onDoubleClick: PropTypes.func.isRequired, - onActionList: PropTypes.func.isRequired, - showActions: PropTypes.bool.isRequired, - toggleSelected: PropTypes.func.isRequired, - actions: PropTypes.arrayOf(PropTypes.shape({ - name: PropTypes.string, - action: PropTypes.func, - })), - isExtended: PropTypes.bool.isRequired, - user: PropTypes.string, - actioningItem: PropTypes.object, - resetActioningItem: PropTypes.func, - planningId: PropTypes.string, - showShortcutActionIcons: PropTypes.bool, - listConfig: PropTypes.object, -}; - export default AgendaListItem; diff --git a/assets/agenda/components/AgendaListItemIcons.tsx b/assets/agenda/components/AgendaListItemIcons.tsx index 84132b85b..c8e56b717 100644 --- a/assets/agenda/components/AgendaListItemIcons.tsx +++ b/assets/agenda/components/AgendaListItemIcons.tsx @@ -1,6 +1,7 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import {get, isEqual} from 'lodash'; +import {isEqual} from 'lodash'; + +import {IAgendaItem, IUser, ICoverage, IListConfig} from 'interfaces'; import {bem} from 'ui/utils'; import { hasCoverages, @@ -20,50 +21,65 @@ import AgendaLocation from './AgendaLocation'; import {gettext, isDisplayed} from 'utils'; import {AgendaContacs} from './AgendaContacts'; -class AgendaListItemIcons extends React.Component { - static propTypes: any; - static defaultProps: any; +interface IProps { + user: IUser['_id']; + group: string; + item: IAgendaItem; + planningItem?: IAgendaItem; + hideCoverages?: boolean; + row?: boolean; + isMobilePhone?: boolean; + listConfig: IListConfig; +} + +interface IState { + internalNote: string; + coveragesToDisplay: Array; + attachments: number; + isRecurring: boolean; +} - constructor(props: any) { +class AgendaListItemIcons extends React.Component { + constructor(props: IProps) { super(props); - this.state = this.getUpdatedState(props); + this.state = this.getUpdatedState(); } - itemChanged(nextProps: any) { - return get(this.props, 'item._id') !== get(nextProps, 'item._id') || - get(this.props, 'item._etag') !== get(nextProps, 'item._etag') || - !isEqual(get(this.props, 'item.coverages'), get(nextProps, 'item.coverages')); + itemChanged(nextProps: Readonly) { + return this.props.item._id !== nextProps.item._id || + this.props.item._etag !== nextProps.item._etag || + !isEqual(this.props.item.coverages, nextProps.item.coverages); } - shouldComponentUpdate(nextProps: any) { - return this.itemChanged(nextProps); + shouldComponentUpdate(props: Readonly) { + return this.itemChanged(props); } - componentWillReceiveProps(nextProps: any) { - if (this.itemChanged(nextProps)) { - this.setState(this.getUpdatedState(nextProps)); + componentDidUpdate(prevProps: Readonly) { + if (this.itemChanged(prevProps)) { + this.setState(this.getUpdatedState()); } } - getUpdatedState(props: any) { + getUpdatedState(): IState { return { - internalNote: getInternalNote(props.item, props.planningItem), - coveragesToDisplay: !hasCoverages(props.item) || props.hideCoverages ? + internalNote: getInternalNote(this.props.item, this.props.planningItem), + coveragesToDisplay: !hasCoverages(this.props.item) || this.props.hideCoverages ? [] : - (props.item.coverages || []).filter((c: any) => ( - !props.group || + (this.props.item.coverages || []).filter((c) => ( + !this.props.group || c.scheduled == null || - (isCoverageForExtraDay(c) && c.planning_id === get(props, 'planningItem.guid')) + (isCoverageForExtraDay(c, this.props.group) && c.planning_id === this.props.planningItem?.guid) )), - attachments: (getAttachments(props.item)).length, - isRecurring: isRecurring(props.item), + attachments: (getAttachments(this.props.item)).length, + isRecurring: isRecurring(this.props.item), }; } - getItemByschema(props: any) { + getItemByschema(props: IProps) { const {listConfig} = props; - if ((listConfig || {}).subject != null) { + if (listConfig.subject != null) { const scheme = listConfig.subject.scheme; const subjects = getSubjects(props.item); return scheme == null ? @@ -77,8 +93,8 @@ class AgendaListItemIcons extends React.Component { } render() { - const props: any = this.props; - const state: any = this.state; + const props = this.props; + const state = this.state; const className = bem('wire-articles', 'item__meta', {row: props.row}); const subject = this.getItemByschema(props); @@ -86,22 +102,24 @@ class AgendaListItemIcons extends React.Component {
- {state.coveragesToDisplay.length > 0 && ( + {props.planningItem != null && state.coveragesToDisplay.length > 0 && (
- {state.coveragesToDisplay.map((coverage: any, index: any) => ( + {state.coveragesToDisplay.map((coverage, index) => ( ))}
@@ -146,17 +164,4 @@ class AgendaListItemIcons extends React.Component { } } -AgendaListItemIcons.propTypes = { - item: PropTypes.object, - planningItem: PropTypes.object, - group: PropTypes.string, - hideCoverages: PropTypes.bool, - row: PropTypes.bool, - isMobilePhone: PropTypes.bool, - user: PropTypes.string, - listConfig : PropTypes.object, -}; - -AgendaListItemIcons.defaultProps = {isMobilePhone: false}; - export default AgendaListItemIcons; diff --git a/assets/agenda/components/AgendaMetaTime.tsx b/assets/agenda/components/AgendaMetaTime.tsx index 30295c8a2..2f93857de 100644 --- a/assets/agenda/components/AgendaMetaTime.tsx +++ b/assets/agenda/components/AgendaMetaTime.tsx @@ -1,13 +1,25 @@ import React from 'react'; -import PropTypes from 'prop-types'; import classNames from 'classnames'; +import moment from 'moment'; +import {IAgendaItem} from 'interfaces'; import {bem} from 'ui/utils'; -import {formatAgendaDate, hasCoverages} from '../utils'; +import {formatAgendaDate, getEndDate, getStartDate, hasCoverages} from '../utils'; +import {DATE_FORMAT, formatDate} from 'utils'; import AgendaItemTimeUpdater from './AgendaItemTimeUpdater'; +import {MultiDayListLabel} from './MultiDayListLabel'; -function format(item: any, group: any, onlyDates: any) { +interface IProps { + group?: string; + item: IAgendaItem; + borderRight?: boolean; + isRecurring?: boolean; + isMobilePhone?: boolean; + onlyDates?: boolean; +} + +function format(item: IAgendaItem, group?: string, onlyDates = true) { return ( {formatAgendaDate(item, group, {onlyDates})} @@ -15,31 +27,38 @@ function format(item: any, group: any, onlyDates: any) { ); } -function getCalendarClass(item: any) { +function getCalendarClass(item: IAgendaItem) { if (item.state === 'rescheduled') { return 'icon--orange'; - } - - if (item.state === 'cancelled') { + } else if (item.state === 'cancelled') { return 'icon--red'; - } - - if (hasCoverages(item)) { + } else if (hasCoverages(item)) { return 'icon--green'; - } else { - return 'icon--default'; } + + return 'icon--default'; } -export default function AgendaMetaTime({item, borderRight, isRecurring, group, isMobilePhone, onlyDates}: any): any { +export default function AgendaMetaTime({item, borderRight, isRecurring, group, isMobilePhone, onlyDates}: IProps) { const icon = item.item_type === 'planning' ? 'icon--planning' : 'icon--calendar'; - + const groupDate = moment(group, DATE_FORMAT); + const startDate = moment(formatDate(getStartDate(item)), DATE_FORMAT); + const endDate = moment(formatDate(getEndDate(item)), DATE_FORMAT); + const diffDays = groupDate.diff(startDate, 'days') + 1; + const itemDays = endDate.diff(startDate, 'days') + 1; const times = (
- {format(item, group, onlyDates)} + {'m-0': onlyDates})} + > + {format(item, group, onlyDates === true)} + {itemDays <= 1 ? null : ( + + )}
); @@ -59,23 +78,11 @@ export default function AgendaMetaTime({item, borderRight, isRecurring, group, i
); - return isMobilePhone ? - [times, icons] : - [icons, times, ]; + return ( + + {isMobilePhone ? + [times, icons] : + [icons, times, ]} + + ); } - -AgendaMetaTime.propTypes = { - item: PropTypes.object, - borderRight: PropTypes.bool, - isRecurring: PropTypes.bool, - group: PropTypes.string, - isMobilePhone: PropTypes.bool, - onlyDates: PropTypes.bool, -}; - -AgendaMetaTime.defaultProps = { - isRecurring: false, - hasCoverage: false, - isMobilePhone: false, - borderRight: false, -}; diff --git a/assets/agenda/components/AgendaTime.tsx b/assets/agenda/components/AgendaTime.tsx index 870c3398e..c510cd825 100644 --- a/assets/agenda/components/AgendaTime.tsx +++ b/assets/agenda/components/AgendaTime.tsx @@ -39,14 +39,14 @@ export default function AgendaTime({item, children}: any) { getClassNames(), getClassNames('remote'), {'p-0': isItemTBC})}> - {formatAgendaDate(new_dates, null, {localTimeZone: false})} + {formatAgendaDate(new_dates, undefined, {localTimeZone: false})}
); } return (
- {formatAgendaDate(item, null, {})} + {formatAgendaDate(item, undefined, {})}
); }; @@ -71,4 +71,4 @@ export default function AgendaTime({item, children}: any) { AgendaTime.propTypes = { item: PropTypes.object.isRequired, children: PropTypes.node, -}; \ No newline at end of file +}; diff --git a/assets/agenda/components/MultiDayListLabel.tsx b/assets/agenda/components/MultiDayListLabel.tsx new file mode 100644 index 000000000..f29793155 --- /dev/null +++ b/assets/agenda/components/MultiDayListLabel.tsx @@ -0,0 +1,31 @@ +import * as React from 'react'; + +import {gettext} from 'utils'; + +interface IProps { + current: number; + days: number; +} + +function getLabelSectionClass(current: number, days: number): string { + if (current === 1) { + return 'multiday-label--start'; + } else if (current === days) { + return 'multiday-label--end'; + } + + return 'multiday-label--mid'; +} + +export const MultiDayListLabel = React.memo(({current, days}: IProps) => ( + + + {gettext('Day:')} + + {current} + / + {days} + + + +)); diff --git a/assets/agenda/index.ts b/assets/agenda/index.ts index 96d27682b..0f6eb027d 100644 --- a/assets/agenda/index.ts +++ b/assets/agenda/index.ts @@ -1,3 +1,4 @@ +import {IAgendaState} from 'interfaces'; import {createStore, render, getInitData, isMobilePhone, closeItemOnMobile} from 'utils'; import {initWebSocket} from 'websocket'; @@ -7,7 +8,7 @@ import AgendaApp from './components/AgendaApp'; import {fetchItems, setState, initData, initParams, pushNotification, openItemDetails, previewItem} from './actions'; import {setView} from 'search/actions'; -const store = createStore(agendaReducer, 'Agenda'); +const store = createStore(agendaReducer, 'Agenda'); // init data store.dispatch(initData(getInitData(window.agendaData), getReadItems(), getActiveDate(), getFeaturedOnlyParam())); diff --git a/assets/agenda/reducers.ts b/assets/agenda/reducers.ts index c2ceb1b3a..5c38887e8 100644 --- a/assets/agenda/reducers.ts +++ b/assets/agenda/reducers.ts @@ -1,5 +1,16 @@ +import {get, uniq} from 'lodash'; + +import { + IAgendaItem, + IAgendaListGroup, + IRestApiResponse, + IAgendaState, +} from 'interfaces'; import { RECIEVE_ITEMS, + SET_LIST_GROUPS_AND_ITEMS, + ADD_ITEMS_TO_LIST_GROUPS, + TOGGLE_HIDDEN_GROUP_ITEMS, INIT_DATA, SELECT_DATE, WATCH_EVENTS, @@ -11,32 +22,39 @@ import { WATCH_COVERAGE, STOP_WATCHING_COVERAGE, SET_ERROR, + RECIEVE_NEXT_ITEMS, } from './actions'; -import {get, uniq} from 'lodash'; import {EXTENDED_VIEW} from 'wire/defaults'; import {searchReducer} from 'search/reducers'; import {defaultReducer} from '../reducers'; import {EARLIEST_DATE} from './utils'; -import {ITopic} from 'interfaces/topic'; -const initialState = { +const initialState: IAgendaState = { items: [], + fetchFrom: 0, itemsById: {}, - aggregations: null, - activeItem: null, - previewItem: null, - previewGroup: null, - previewPlan: null, - openItem: null, + listItems: { + groups: [], + hiddenGroupsShown: {}, + }, + aggregations: undefined, + activeItem: undefined, + previewItem: undefined, + previewGroup: undefined, + previewPlan: undefined, + openItem: undefined, isLoading: false, resultsFiltered: false, - totalItems: null, - activeQuery: null, - user: null, - userObject: null, + totalItems: 0, + activeQuery: undefined, + // Use `window.agendaData` so these attributes always have a value + user: window.agendaData.user._id, + userObject: window.agendaData.user, + userType: window.agendaData.user.user_type ?? 'public', + userFolders: [], - company: null, + company: undefined, companyFolders: [], topics: [], selectedItems: [], @@ -51,7 +69,7 @@ const initialState = { activeDate: Date.now(), activeGrouping: 'day', eventsOnlyAccess: false, - itemType: null, + itemType: undefined, featuredOnly: false, agendaWireItems: [], }, @@ -59,18 +77,15 @@ const initialState = { detail: false, userSections: {}, searchInitiated: false, - uiConfig: {}, + uiConfig: {_id: 'agenda'}, groups: [], hasAgendaFeaturedItems: false, + savedItemsCount: 0, }; -export interface IAgendaState { - topics: Array; -} - -function recieveItems(state: any, data: any) { +function recieveItems(state: IAgendaState, data: IRestApiResponse): IAgendaState { const itemsById = Object.assign({}, state.itemsById); - const items = data._items.map((item: any) => { + const items = data._items.map((item) => { itemsById[item._id] = item; return item._id; }); @@ -78,46 +93,113 @@ function recieveItems(state: any, data: any) { return { ...state, items, + fetchFrom: items.length, itemsById, + listItems: { + ...state.listItems, + groups: [], + }, isLoading: false, totalItems: data._meta.total, - aggregations: data._aggregations || null, + aggregations: data._aggregations || undefined, newItems: [], searchInitiated: false, }; } -function _agendaReducer(state: any, action: any) { - switch (action.type) { +function updateListGroups(state: IAgendaState, updatedGroups: Array): IAgendaState { + const updatedGroupsById = updatedGroups.reduce<{[date: string]: IAgendaListGroup}>((groups, group) => { + groups[group.date] = group; - case SELECT_DATE: - return { - ...state, - selectedItems: [], - activeDate: action.dateString, - activeGrouping: action.grouping || 'day', - }; + return groups; + }, {}); + const currentGroupsById = state.listItems.groups.reduce<{[date: string]: IAgendaListGroup}>((groups, group) => { + groups[group.date] = group; - default: - return state; + return groups; + }, {}); + + return { + ...state, + listItems: { + ...state.listItems, + groups: uniq([ + ...Object.keys(currentGroupsById), + ...Object.keys(updatedGroupsById), + ]).sort().map((groupId) => ({ + ...currentGroupsById[groupId] ?? {}, + items: uniq([ + ...currentGroupsById[groupId]?.items ?? [], + ...updatedGroupsById[groupId]?.items ?? [], + ]), + hiddenItems: uniq([ + ...currentGroupsById[groupId]?.hiddenItems ?? [], + ...updatedGroupsById[groupId]?.hiddenItems ?? [], + ]), + date: groupId, + })), + }, + }; +} + +function runDefaultReducer(state: IAgendaState, action: any): IAgendaState { + const newState: IAgendaState = defaultReducer(state || initialState, action); + + if (action.type === RECIEVE_NEXT_ITEMS && action.data.setFromSearch) { + // increment the `fetchFrom` number with the length of the API response + newState.fetchFrom += (action.data as IRestApiResponse)._items.length; } + + return newState; } -export default function agendaReducer(state: any = initialState, action: any): IAgendaState { +export default function agendaReducer(state: IAgendaState = initialState, action: any): IAgendaState { switch (action.type) { case RECIEVE_ITEMS: return recieveItems(state, action.data); + case SET_LIST_GROUPS_AND_ITEMS: + return { + ...state, + listItems: { + ...state.listItems, + groups: action.data, + }, + }; + + case ADD_ITEMS_TO_LIST_GROUPS: + return updateListGroups(state, action.data); + + case TOGGLE_HIDDEN_GROUP_ITEMS: + return { + ...state, + listItems: { + ...state.listItems, + hiddenGroupsShown: { + ...state.listItems.hiddenGroupsShown, + [action.data]: !state.listItems.hiddenGroupsShown[action.data], + }, + }, + }; + case WATCH_EVENTS: { const itemsById = Object.assign({}, state.itemsById); - action.items.forEach((_id: any) => { - const watches = get(itemsById[_id], 'watches', []).concat(state.user); - itemsById[_id] = Object.assign({}, itemsById[_id], {watches}); - (get(itemsById[_id], 'coverages') || []).forEach((c: any) => { - if (get(c, 'watches.length', 0) > 0) { - c.watches = []; - } + action.items.forEach((itemId: string) => { + if (itemsById[itemId] == null) { + return; + } + + itemsById[itemId] = { + ...itemsById[itemId], + watches: [ + ...itemsById[itemId].watches ?? [], + state.user, + ], + }; + + (itemsById[itemId].coverages ?? []).forEach((coverage) => { + coverage.watches = []; }); }); @@ -206,7 +288,7 @@ export default function agendaReducer(state: any = initialState, action: any): I openItem: openItem, detail: !!openItem, agenda, - savedItemsCount: action.agendaData.saved_items || null, + savedItemsCount: action.agendaData.saved_items || 0, userSections: action.agendaData.userSections || {}, locators: action.agendaData.locators || null, uiConfig: action.agendaData.ui_config || {}, @@ -220,9 +302,14 @@ export default function agendaReducer(state: any = initialState, action: any): I case SELECT_DATE: return { ...state, - activeItem: null, - previewItem: null, - agenda: _agendaReducer(state.agenda, action) + activeItem: undefined, + previewItem: undefined, + selectedItems: [], + agenda: { + ...state.agenda, + activeDate: action.dateString, + activeGrouping: action.grouping || 'day', + }, }; case TOGGLE_FEATURED_FILTER: @@ -257,6 +344,6 @@ export default function agendaReducer(state: any = initialState, action: any): I errors: action.errors}; } default: - return defaultReducer(state || initialState, action); + return runDefaultReducer(state, action); } } diff --git a/assets/agenda/tests/utils.spec.ts b/assets/agenda/tests/utils.spec.ts index 67b9252ca..357613a41 100644 --- a/assets/agenda/tests/utils.spec.ts +++ b/assets/agenda/tests/utils.spec.ts @@ -1,25 +1,41 @@ /* eslint-disable no-prototype-builtins */ import {keyBy} from 'lodash'; +import moment from 'moment'; +import {IAgendaItem} from 'interfaces'; import * as utils from '../utils'; describe('utils', () => { describe('groupItems', () => { it('returns grouped items per day', () => { - const items = [ + const items: Array = [ { _id: 'foo', + guid: 'foo', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', dates: {start: '2018-10-15T04:00:00+0000', end: '2018-10-15T05:00:00+0000', tz: 'Australia/Sydney'}, - event: {_id: 'foo'} + event: {_id: 'foo'}, }, { _id: 'bar', + guid: 'bar', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', dates: {start: '2018-10-18T06:00:00+0000', end: '2018-10-18T09:00:00+0000', tz: 'Australia/Sydney'}, - event: {_id: 'bar'} + event: {_id: 'bar'}, }, ]; - const groupedItems: any = keyBy(utils.groupItems(items, '2018-10-13', 'day'), 'date'); + const groupedItems = keyBy(utils.groupItems(items, moment('2018-10-13'), undefined, 'day'), 'date'); expect(groupedItems.hasOwnProperty('13-10-2018')).toBe(false); expect(groupedItems.hasOwnProperty('14-10-2018')).toBe(false); @@ -30,81 +46,117 @@ describe('utils', () => { }); it('returns grouped multi day events per day', () => { - const items = [ + const items: Array = [ { _id: 'foo', + guid: 'foo', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', dates: {start: '2018-10-15T04:00:00+0000', end: '2018-10-17T05:00:00+0000', tz: 'Australia/Sydney'}, event: {_id: 'foo'} }, { _id: 'bar', + guid: 'bar', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', dates: {start: '2018-10-17T06:00:00+0000', end: '2018-10-18T09:00:00+0000', tz: 'Australia/Sydney'}, event: {_id: 'bar'} }, ]; - const groupedItems: any = keyBy(utils.groupItems(items, '2018-10-15', 'day'), 'date'); + const groupedItems = keyBy(utils.groupItems(items, moment('2018-10-15'), undefined, 'day'), 'date'); expect(groupedItems['15-10-2018']['items']).toEqual(['foo']); - expect(groupedItems['16-10-2018']['items']).toEqual(['foo']); - expect(groupedItems['17-10-2018']['items']).toEqual(['foo', 'bar']); - expect(groupedItems['18-10-2018']['items']).toEqual(['bar']); + expect(groupedItems['16-10-2018'].hiddenItems).toEqual(['foo']); + expect(groupedItems['17-10-2018'].items).toEqual(['bar']); + expect(groupedItems['17-10-2018'].hiddenItems).toEqual(['foo']); + expect(groupedItems['18-10-2018'].hiddenItems).toEqual(['bar']); expect(groupedItems.hasOwnProperty('19-10-2018')).toBe(false); }); it('returns grouped events with extra days per day', () => { - const items = [ + const items: Array = [ { _id: 'foo', + guid: 'foo', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', dates: {start: '2018-10-15T04:00:00+0000', end: '2018-10-17T05:00:00+0000', tz: 'Australia/Sydney'}, display_dates: [{date: '2018-10-13T10:00:00+0000'}], event: {_id: 'foo'} }]; - const groupedItems: any = keyBy(utils.groupItems(items, '2018-10-11', 'day'), 'date'); + const groupedItems = keyBy(utils.groupItems(items, moment('2018-10-11'), undefined, 'day'), 'date'); expect(groupedItems.hasOwnProperty('11-10-2018')).toBe(false); expect(groupedItems.hasOwnProperty('12-10-2018')).toBe(false); - expect(groupedItems['13-10-2018']['items']).toEqual(['foo']); + expect(groupedItems['13-10-2018'].hiddenItems).toEqual(['foo']); expect(groupedItems.hasOwnProperty('14-10-2018')).toBe(false); expect(groupedItems['15-10-2018']['items']).toEqual(['foo']); - expect(groupedItems['16-10-2018']['items']).toEqual(['foo']); - expect(groupedItems['17-10-2018']['items']).toEqual(['foo']); + expect(groupedItems['16-10-2018'].hiddenItems).toEqual(['foo']); + expect(groupedItems['17-10-2018'].hiddenItems).toEqual(['foo']); expect(groupedItems.hasOwnProperty('18-10-2018')).toBe(false); }); it('returns grouped ad-hoc plan based on extra days', () => { - const items = [ + const items: Array = [ { _id: 'foo', + guid: 'foo', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', dates: {start: '2018-10-17T04:00:00+0000', end: '2018-10-17T04:00:00+0000'}, display_dates: [ {date: '2018-10-16T04:00:00+0000'}, {date: '2018-10-18T04:00:00+0000'} ], - event: null }]; - const groupedItems: any = keyBy(utils.groupItems(items, '2018-10-15', 'day'), 'date'); + const groupedItems = keyBy(utils.groupItems(items, moment('2018-10-15'), undefined, 'day'), 'date'); expect(groupedItems.hasOwnProperty('15-10-2018')).toBe(false); expect(groupedItems.hasOwnProperty('17-10-2018')).toBe(false); expect(groupedItems.hasOwnProperty('16-10-2018')).toBe(true); expect(groupedItems.hasOwnProperty('18-10-2018')).toBe(true); - expect(groupedItems['16-10-2018']['items']).toEqual(['foo']); - expect(groupedItems['18-10-2018']['items']).toEqual(['foo']); + expect(groupedItems['16-10-2018'].items).toEqual([]); + expect(groupedItems['16-10-2018'].hiddenItems).toEqual(['foo']); + expect(groupedItems['18-10-2018'].items).toEqual([]); + expect(groupedItems['18-10-2018'].hiddenItems).toEqual(['foo']); }); it('returns grouped ad-hoc plan with no extra days', () => { - const items = [ + const items: Array = [ { _id: 'foo', + guid: 'foo', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', dates: {start: '2018-10-17T04:00:00+0000', end: '2018-10-17T04:00:00+0000'}, display_dates: [{date: '2018-10-17T04:00:00+0000'}], - event: null }]; - const groupedItems: any = keyBy(utils.groupItems(items, '2018-10-15', 'day'), 'date'); + const groupedItems = keyBy(utils.groupItems(items, moment('2018-10-15'), undefined, 'day'), 'date'); expect(groupedItems.hasOwnProperty('15-10-2018')).toBe(false); expect(groupedItems.hasOwnProperty('16-10-2018')).toBe(false); @@ -116,9 +168,16 @@ describe('utils', () => { describe('listItems', () => { it('of event with planning items', () => { - const items = [ + const items: Array = [ { _id: 'foo', + guid: 'foo', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', dates: {start: '2018-10-15T04:00:00+0000', end: '2018-10-15T05:00:00+0000', tz: 'Australia/Sydney'}, display_dates: [ {date: '2018-10-14T04:00:00+0000'}, @@ -129,54 +188,91 @@ describe('utils', () => { { 'scheduled': '2018-10-15T04:00:00+0000', 'planning_id': 'plan1', - 'coverage_id': 'coverage1' + 'coverage_id': 'coverage1', + coverage_type: 'text', + coverage_status: 'coverage intended', + workflow_status: 'assigned', }, { 'scheduled': '2018-10-14T04:00:00+0000', 'planning_id': 'plan1', - 'coverage_id': 'coverage2' + 'coverage_id': 'coverage2', + coverage_type: 'text', + coverage_status: 'coverage intended', + workflow_status: 'assigned', }, { 'scheduled': '2018-10-16T04:00:00+0000', 'planning_id': 'plan2', - 'coverage_id': 'coverage3' + 'coverage_id': 'coverage3', + coverage_type: 'text', + coverage_status: 'coverage intended', + workflow_status: 'assigned', } ], planning_items: [ { '_id': 'plan1', 'guid': 'plan1', + type: 'agenda', + item_type: 'planning', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', 'planning_date': '2018-10-15T04:30:00+0000', + dates: {start: '2018-10-15T04:30:00+0000', end: '2018-10-15T04:30:00+0000'}, 'coverages': [ { 'scheduled': '2018-10-15T04:00:00+0000', 'planning_id': 'plan1', - 'coverage_id': 'coverage1' + 'coverage_id': 'coverage1', + coverage_type: 'text', + coverage_status: 'coverage intended', + workflow_status: 'assigned', }, { 'scheduled': '2018-10-14T04:00:00+0000', 'planning_id': 'plan1', - 'coverage_id': 'coverage2' + 'coverage_id': 'coverage2', + coverage_type: 'text', + coverage_status: 'coverage intended', + workflow_status: 'assigned', } ], }, { '_id': 'plan2', 'guid': 'plan2', + type: 'agenda', + item_type: 'planning', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', 'planning_date': '2018-10-15T04:30:00+0000', + dates: {start: '2018-10-15T04:30:00+0000', end: '2018-10-15T04:30:00+0000'}, 'coverages': [{ 'scheduled': '2018-10-16T04:00:00+0000', 'planning_id': 'plan2', - 'coverage_id': 'coverage3' + 'coverage_id': 'coverage3', + coverage_type: 'text', + coverage_status: 'coverage intended', + workflow_status: 'assigned', }], } ] } ]; - const groupedItems = utils.groupItems(items, '2018-10-11', 'day'); + const groupedItems = utils.groupItems(items, moment('2018-10-11'), undefined, 'day'); const itemsById = keyBy(items, '_id'); - const listItems = keyBy(utils.getListItems(groupedItems, itemsById), 'group'); + const hiddenGroupsShown = { + '14-10-2018': true, + '15-10-2018': true, + '16-10-2018': true, + }; + const listItems = keyBy(utils.getListItems(groupedItems, itemsById, hiddenGroupsShown), 'group'); expect(groupedItems.hasOwnProperty('11-10-2018')).toBe(false); expect(groupedItems.hasOwnProperty('12-10-2018')).toBe(false); @@ -185,17 +281,24 @@ describe('utils', () => { expect(listItems.hasOwnProperty('15-10-2018')).toBe(true); expect(listItems.hasOwnProperty('16-10-2018')).toBe(true); expect(listItems['14-10-2018']['_id']).toBe('foo'); - expect(listItems['14-10-2018']['plan']['guid']).toBe('plan2'); - expect(listItems['15-10-2018']['_id']).toBe('foo'); - expect(listItems['15-10-2018']['plan']['guid']).toBe('plan2'); + expect(listItems['14-10-2018']?.plan).toBe('plan1'); + expect(listItems['15-10-2018']._id).toBe('foo'); + expect(listItems['15-10-2018'].plan).toBe('plan1'); expect(listItems['16-10-2018']['_id']).toBe('foo'); - expect(listItems['16-10-2018']['plan']['guid']).toBe('plan2'); + expect(listItems['16-10-2018']?.plan).toBe('plan2'); }); it('planning items without coverages associated with event are also displayed', () => { - const items = [ + const items: Array = [ { _id: 'foo', + guid: 'foo', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', dates: {start: '2018-10-15T04:00:00+0000', end: '2018-10-15T05:00:00+0000', tz: 'Australia/Sydney'}, display_dates: [{date: '2018-10-14T04:00:00+0000'}], event: {_id: 'foo'}, @@ -205,21 +308,97 @@ describe('utils', () => { '_id': 'plan1', 'guid': 'plan1', 'planning_date': '2018-10-14T04:30:00+0000', + dates: {start: '2018-10-14T04:30:00+0000', end: '2018-10-14T04:30:00+0000'}, + type: 'agenda', + item_type: 'planning', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', } ] } ]; - const groupedItems = utils.groupItems(items, '2018-10-11', 'day'); + const groupedItems = utils.groupItems(items, moment('2018-10-11'), undefined, 'day'); const itemsById = keyBy(items, '_id'); - const listItems = keyBy(utils.getListItems(groupedItems, itemsById), 'group'); + const hiddenGroupsShown = { + '14-10-2018': true, + '15-10-2018': true, + }; + const listItems = keyBy(utils.getListItems(groupedItems, itemsById, hiddenGroupsShown), 'group'); expect(groupedItems.hasOwnProperty('11-10-2018')).toBe(false); expect(groupedItems.hasOwnProperty('12-10-2018')).toBe(false); expect(groupedItems.hasOwnProperty('13-10-2018')).toBe(false); expect(listItems.hasOwnProperty('14-10-2018')).toBe(true); + expect(listItems.hasOwnProperty('15-10-2018')).toBe(true); expect(listItems['14-10-2018']['_id']).toBe('foo'); - expect(listItems['14-10-2018']['plan']['guid']).toBe('plan1'); + expect(listItems['14-10-2018']?.plan).toBe('plan1'); + expect(listItems['15-10-2018']['_id']).toBe('foo'); + expect(listItems['15-10-2018']?.plan).toBe(undefined); }); }); + + it('groupItems restricting groups to min and max dates', () => { + const items: Array = [{ + _id: 'event1', + guid: 'event1', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', + dates: {start: '2018-10-15T04:00:00+0000', end: '2018-10-15T05:00:00+0000', tz: 'Australia/Sydney'}, + event: {_id: 'event1'}, + }, { + _id: 'event2', + guid: 'event2', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', + dates: {start: '2018-10-16T04:00:00+0000', end: '2018-10-16T05:00:00+0000', tz: 'Australia/Sydney'}, + event: {_id: 'event2'}, + }, { + _id: 'event3', + guid: 'event3', + type: 'agenda', + item_type: 'event', + state: 'scheduled', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', + dates: {start: '2018-10-17T04:00:00+0000', end: '2018-10-17T05:00:00+0000', tz: 'Australia/Sydney'}, + event: {_id: 'event3'}, + }]; + + const getGroupedItems = (minDate: moment.Moment, maxDate?: moment.Moment) => keyBy( + utils.groupItems(items, minDate, maxDate, 'day', false), + 'date' + ); + let groupedItems = getGroupedItems(moment('2018-10-14'), moment('2018-10-18')); + + expect(groupedItems['15-10-2018'].items).toEqual(['event1']); + expect(groupedItems['16-10-2018'].items).toEqual(['event2']); + expect(groupedItems['17-10-2018'].items).toEqual(['event3']); + + groupedItems = getGroupedItems(moment('2018-10-14'), moment('2018-10-15')); + expect(groupedItems['15-10-2018'].items).toEqual(['event1']); + expect(groupedItems['16-10-2018']).toBeUndefined(); + expect(groupedItems['17-10-2018']).toBeUndefined(); + + groupedItems = getGroupedItems(moment('2018-10-16'), moment('2018-10-18')); + expect(groupedItems['15-10-2018']).toBeUndefined(); + expect(groupedItems['16-10-2018'].items).toEqual(['event2']); + expect(groupedItems['17-10-2018'].items).toEqual(['event3']); + + groupedItems = getGroupedItems(moment('2018-10-16')); + expect(groupedItems['15-10-2018']).toBeUndefined(); + expect(groupedItems['16-10-2018'].items).toEqual(['event2']); + expect(groupedItems['17-10-2018'].items).toEqual(['event3']); + }); }); diff --git a/assets/agenda/utils.ts b/assets/agenda/utils.ts index 535a5c8c8..fe2033aab 100644 --- a/assets/agenda/utils.ts +++ b/assets/agenda/utils.ts @@ -1,5 +1,7 @@ -import {get, isEmpty, includes, keyBy, sortBy, partition} from 'lodash'; +import {get, isEmpty, includes, keyBy, sortBy} from 'lodash'; import moment from 'moment/moment'; + +import {IAgendaItem, IAgendaListGroup, IAgendaListGroupItem, ICoverage, IUser} from 'interfaces'; import { formatDate, formatMonth, @@ -14,7 +16,6 @@ import { formatTime, DAY_IN_MINUTES, } from '../utils'; -import {IAgendaItem} from 'interfaces'; export const STATUS_KILLED = 'killed'; export const STATUS_CANCELED = 'cancelled'; @@ -156,8 +157,8 @@ export function isRescheduled(item: any) { * @param {Object} item * @return {Boolean} */ -export function hasCoverages(item: any) { - return !isEmpty(get(item, 'coverages')); +export function hasCoverages(item: IAgendaItem): boolean { + return item.coverages?.[0]?.coverage_id != null; } /** @@ -192,8 +193,8 @@ export function getCoverageDisplayName(coverageType: any) { * @param {String} userId * @return {Boolean} */ -export function isWatched(item: any, userId: any) { - return userId && includes(get(item, 'watches', []), userId); +export function isWatched(item: IAgendaItem | ICoverage, userId?: IUser['_id']): boolean { + return userId != null && item.watches?.includes(userId) === true; } /** @@ -203,8 +204,8 @@ export function isWatched(item: any, userId: any) { * @param {String} dateString * @return {Boolean} */ -export function isCoverageForExtraDay(coverage: any) { - return coverage.scheduled != null; +export function isCoverageForExtraDay(coverage: ICoverage, dateString: string) { + return coverage.scheduled != null && formatDate(moment(coverage.scheduled)) === dateString; } /** @@ -346,16 +347,13 @@ export function getDateInputDate(dateString: any) { /** * Return moment date - * - * @param {String} dateString - * @return {String} */ -export function getMomentDate(dateString: any): any { +export function getMomentDate(dateString?: number): moment.Moment { if (dateString) { - return moment(parseInt(dateString)); + return moment(dateString); } - return ''; + return moment(); } /** @@ -593,7 +591,7 @@ export function getHighlightedName(item: any) { * @param {Object} plan * @return {String} */ -export function getDescription(item: any, plan: any) { +export function getDescription(item: IAgendaItem, plan?: IAgendaItem): string { return plan?.description_text || item?.definition_short || ''; } @@ -604,15 +602,14 @@ export function getDescription(item: any, plan: any) { * @param {Object} plan * @return {String} */ -export function getHighlightedDescription(item: any, plan: any) { - - if (item.es_highlight.description_text) { +export function getHighlightedDescription(item: IAgendaItem, plan?: IAgendaItem): string { + if (item.es_highlight?.description_text?.[0] != null) { return item.es_highlight.description_text[0]; } - else if (item.es_highlight.definition_short) { + else if (item.es_highlight?.definition_short?.[0] != null) { return item.es_highlight.definition_short[0]; } - else if (item.es_highlight.definition_long) { + else if (item.es_highlight?.definition_long?.[0] != null) { return item.es_highlight.definition_long[0]; } else { @@ -627,8 +624,8 @@ export function getHighlightedDescription(item: any, plan: any) { * @param {Object} item * @return {Array} list of dates */ -export function getExtraDates(item: any) { - return getDisplayDates(item).map((ed: any) => moment(ed.date)); +export function getExtraDates(item: IAgendaItem): Array { + return getDisplayDates(item).map((displayDate) => moment(displayDate.date)); } /** @@ -636,41 +633,43 @@ export function getExtraDates(item: any) { * @param item: Event or Planning item * @returns {Array.<{date: moment.Moment}>} */ -export function getDisplayDates(item: any) { - const matchedPlanning = get(item, '_hits.matched_planning_items'); - - if (matchedPlanning == null) { - return get(item, 'display_dates') || []; +export function getDisplayDates(item: IAgendaItem): Array<{date: string}> { + if (item._hits == null || item._hits.matched_planning_items == null) { + return item.display_dates ?? []; + } else if (item.planning_items == null || item.planning_items.length === 0) { + return []; } - const dates: Array = []; - const planningItems = get(item, 'planning_items') || []; + const dates: Array<{date: string}> = []; const planningIds = item._hits.matched_planning_items; - const coverageIds = get(item, '_hits.matched_coverages') != null ? + const coverageIds = item._hits.matched_coverages != null ? item._hits.matched_coverages : - (get(item, 'coverages') || []).map((coverage: any) => coverage.coverage_id); + (item.coverages ?? []).map((coverage) => coverage.coverage_id); - planningItems - .forEach((plan: any) => { - if (!planningIds.includes(plan._id)) { - return; - } + item.planning_items.forEach((plan) => { + if (!planningIds.includes(plan._id)) { + return; + } - const coverages = (get(plan, 'coverages') || []).filter((coverage: any) => coverage.scheduled); + const coverages = (plan.coverages ?? []).filter( + (coverage) => coverage.scheduled != null || coverage.planning?.scheduled != null + ); - if (!coverages.length) { + if (!coverages.length) { + if (plan.planning_date != null) { dates.push({date: plan.planning_date}); - return; } + return; + } - coverages.forEach((coverage: any) => { - if (!coverageIds.includes(coverage.coverage_id)) { - return; - } + coverages.forEach((coverage) => { + if (!coverageIds.includes(coverage.coverage_id)) { + return; + } - dates.push({date: coverage.planning.scheduled}); - }); + dates.push({date: coverage.scheduled ?? coverage.planning?.scheduled}); }); + }); return dates; } @@ -682,17 +681,25 @@ export function getDisplayDates(item: any) { * @param {Date} date to check (moment) * @return {Boolean} */ -export function containsExtraDate(item: any, dateToCheck: any) { - return getDisplayDates(item).map((ed: any) => moment(ed.date).format('YYYY-MM-DD')).includes(dateToCheck.format('YYYY-MM-DD')); +export function containsExtraDate(item: IAgendaItem, dateToCheck: moment.Moment) { + return getDisplayDates(item) + .map((ed) => moment(ed.date).format('YYYY-MM-DD')) + .includes(dateToCheck.format('YYYY-MM-DD')); } // get start date in utc mode if there is no time info -const getStartDate = (item: any) => item.dates.all_day ? moment.utc(item.dates.start) : moment(item.dates.start); +export function getStartDate(item: IAgendaItem): moment.Moment { + return item.dates.all_day === true ? + moment.utc(item.dates.start) : + moment(item.dates.start); +} // get end date in utc mode if there is no end time info -const getEndDate = (item: any) => item.dates.no_end_time || item.dates.all_day ? - moment.utc(item.dates.end || item.dates.start) : - moment(item.dates.end || item.dates.start); +export function getEndDate(item: IAgendaItem): moment.Moment { + return item.dates.no_end_time === true || item.dates.all_day === true ? + moment.utc(item.dates.end || item.dates.start) : + moment(item.dates.end || item.dates.start); +} // compare days without being affected by timezone const isBetweenDay = (day: moment.Moment, start: moment.Moment, end: moment.Moment, allDay=false, noEndTime=false) => { @@ -721,33 +728,47 @@ const isBetweenDay = (day: moment.Moment, start: moment.Moment, end: moment.Mome * @param activeDate: date that the grouping will start from * @param activeGrouping: type of grouping i.e. day, week, month */ -export function groupItems(items: any, activeDate: any, activeGrouping: any, featuredOnly?: any) { - const minStart = moment(activeDate).set({'h': 0, 'm': 0, 's': 0}); - const groupedItems: any = {}; - const grouper = Groupers[activeGrouping]; +export function groupItems( + items: Array, + minDate: moment.Moment, + maxDate: moment.Moment | undefined, + activeGrouping: string, + featuredOnly?: boolean +): Array { + if (items.length === 0) { + return []; + } + + const groupedItems: {[key: string]: Array} = {}; + const grouper: (dateString: moment.Moment) => string = Groupers[activeGrouping]; items // Filter out items that didn't match any Planning items - .filter((item: any) => ( - get(item, 'planning_items.length', 0) === 0 || - get(item, '_hits.matched_planning_items') == null || - get(item, '_hits.matched_planning_items.length', 0) > 0) - ) - .forEach((item: any) => { + .filter((item) => ( + (item.planning_items?.length ?? 0) === 0 || + item._hits?.matched_planning_items == null || + item._hits?.matched_planning_items.length > 0 + )) + .forEach((item) => { const itemExtraDates = getExtraDates(item); const itemStartDate = getStartDate(item); - const start = item._display_from ? moment(item._display_from) : - moment.max(minStart, moment.min(itemExtraDates.concat([itemStartDate]))); + const start = item._display_from != null ? + moment(item._display_from) : + moment.max(minDate, moment.min(itemExtraDates.concat([itemStartDate]))); const itemEndDate = getEndDate(item); + const scheduleType = getScheduleType(item); // If item is an event and was actioned (postponed, rescheduled, cancelled only incase of multi-day event) // actioned_date is set. In this case, use that as the cut off date. - let end = get(item, 'event.actioned_date') ? moment(item.event.actioned_date) : null; - if (!end || !moment.isMoment(end)) { - end = item._display_to ? moment(item._display_to) : + let end = item.event?.actioned_date != null ? + moment(item.event.actioned_date) : + null; + if (end != null || !moment.isMoment(end)) { + end = item._display_to != null ? + moment(item._display_to) : moment.max( itemExtraDates - .concat([minStart]) + .concat([minDate]) // If event is all day the end timestamp is the same as // start and depending on the local timezone offset it // might not give enough room for the event to show up, @@ -757,79 +778,111 @@ export function groupItems(items: any, activeDate: any, activeGrouping: any, fea } let key = null; - end = moment.min(end, start.clone().add(10, 'd')); // show each event for 10 days max not to destroy the UI + end = maxDate != null ? + moment.min(end, maxDate) : + moment.min(end, start.clone().add(10, 'd')); // show each event for 10 days max not to destroy the UI // use clone otherwise it would modify start and potentially also maxStart, moments are mutable for (const day = start.clone(); day.isSameOrBefore(end, 'day'); day.add(1, 'd')) { const isBetween = isBetweenDay(day, itemStartDate, itemEndDate, item.dates.all_day, item.dates.no_end_time); const containsExtra = containsExtraDate(item, day); - const addGroupItem = (item.event == null || get(item, '_hits.matched_planning_items') != null) ? - containsExtra : + const addGroupItem: boolean = item.event == null || item._hits?.matched_planning_items != null ? + containsExtra || (scheduleType === SCHEDULE_TYPE.MULTI_DAY && isBetween) : isBetween || containsExtra; if (grouper(day) !== key && addGroupItem) { key = grouper(day); - const groupList = groupedItems[key] || []; - groupList.push(item); - groupedItems[key] = groupList; + if (groupedItems[key] == null) { + groupedItems[key] = []; + } + groupedItems[key].push(item); } } }); - Object.keys(groupedItems).forEach((k: any) => { - if (featuredOnly) { - groupedItems[k] = groupedItems[k].map((i: any) => i._id); - } else { - const tbcPartitioned = partition(groupedItems[k], (i) => isItemTBC(i)); - groupedItems[k] = [ - ...tbcPartitioned[0], - ...tbcPartitioned[1], - ].map((i: any) => i._id); - } - }); + const groupedItemIds: {[group: string]: {day: Array, hiddenItems: Array}} = {}; + const sortDates: {[date: string]: moment.Moment} = {}; + + if (featuredOnly) { + Object.keys(groupedItems).forEach((dateString) => { + groupedItemIds[dateString] = {day: groupedItems[dateString].map((i) => i._id), hiddenItems: []}; + sortDates[dateString] = moment(dateString, DATE_FORMAT); + }); + } else { + Object.keys(groupedItems).forEach((dateString) => { + const itemsWithoutTime: Array = []; + const itemsWithTime: Array = []; + const hiddenItems: Array = []; + + groupedItems[dateString].forEach((groupItem) => { + const itemStartDateGroup: string = grouper(getStartDate(groupItem)); + + if (itemStartDateGroup !== dateString) { + hiddenItems.push(groupItem._id); + } else if (isItemTBC(groupItem)) { + itemsWithoutTime.push(groupItem._id); + } else { + itemsWithTime.push(groupItem._id); + } + }); + + groupedItemIds[dateString] = { + day: [ + ...itemsWithoutTime, + ...itemsWithTime, + ], + hiddenItems: hiddenItems, + }; + sortDates[dateString] = moment(dateString, DATE_FORMAT); + }); + } return sortBy( - Object.keys(groupedItems).map((k: any) => ( + Object.keys(groupedItemIds).map((dateString) => ( { - date: k, - items: groupedItems[k], - _sortDate: moment(k, DATE_FORMAT) - })), - (g: any) => g._sortDate); + date: dateString, + items: groupedItemIds[dateString].day, + hiddenItems: groupedItemIds[dateString].hiddenItems, + } + )), + (g) => sortDates[g.date] + ); } /** * Get Planning Item for the day - * @param item: Agenda item - * @param group: Group Date */ -export function getPlanningItemsByGroup(item: any, group: any) { - const planningItems = get(item, 'planning_items') || []; +export function getPlanningItemsByGroup(item: IAgendaItem, group: string): Array { + const planningItems = item.planning_items || []; if (planningItems.length === 0) { return []; } // Planning item without coverages - const plansWithoutCoverages = planningItems.filter((p: any) => - formatDate(p.planning_date) === group && get(p, 'coverages.length', 0) === 0); + const plansWithoutCoverages: Array = planningItems.filter((planningItem) => ( + formatDate(planningItem.planning_date) === group && + (planningItem.coverages?.length ?? 0) === 0 + )); - const allPlans = keyBy(planningItems, '_id'); - const processed: any = {}; + const allPlans: {[itemId: string]: IAgendaItem} = keyBy(planningItems, '_id'); + const processed: {[itemId: string]: boolean} = {}; // get unique plans for that group based on the coverage. - const plansWithCoverages = (item.coverages || []) - .map((coverage: any) => { - if (isCoverageForExtraDay(coverage)) { - if (!processed[coverage.planning_id]) { - processed[coverage.planning_id] = 1; - return allPlans[coverage.planning_id]; - } - return null; + const plansWithCoverages: Array = (item.coverages || []) + .filter((coverage) => { + if (isCoverageForExtraDay(coverage, group) === false) { + return false; } - return null; + + if (processed[coverage.planning_id] !== true) { + processed[coverage.planning_id] = true; + return true; + } + + return false; }) - .filter((p: any) => p); + .map((coverage) => allPlans[coverage.planning_id]); return [...plansWithCoverages, ...plansWithoutCoverages]; } @@ -849,7 +902,7 @@ export function getCoveragesForDisplay(item: any, plan: any, group: any) { (get(item, 'coverages') || []) .forEach((coverage: any) => { if (!get(plan, 'guid') || coverage.planning_id === get(plan, 'guid')) { - if (isCoverageForExtraDay(coverage)) { + if (isCoverageForExtraDay(coverage, group)) { currentCoverage.push(coverage); } else if (isCoverageOnPreviousDay(coverage, group)) { previousCoverage.push(coverage); @@ -862,18 +915,26 @@ export function getCoveragesForDisplay(item: any, plan: any, group: any) { return {current: currentCoverage, previous: previousCoverage}; } -export function getListItems(groups: any, itemsById: any) { - const listItems: any = []; +export function getListItems( + groups: Array, + itemsById: {[itemId: string]: IAgendaItem}, + hiddenGroupsShown: {[dateString: string]: boolean} = {} +): Array { + const listItems: Array = []; + + groups.forEach((group) => { + const items = hiddenGroupsShown[group.date] === true ? + [...group.hiddenItems, ...group.items] : + group.items; + items.forEach((itemId) => { + const plans = getPlanningItemsByGroup(itemsById[itemId], group.date); - groups.forEach((group: any) => { - group.items.forEach((_id: any) => { - const plans = getPlanningItemsByGroup(itemsById[_id], group.date); if (plans.length > 0) { - plans.forEach((plan: any) => { - listItems.push({_id, group: group.date, plan}); + plans.forEach((plan) => { + listItems.push({_id: itemId, group: group.date, plan: plan._id}); }); } else { - listItems.push({_id, group: group.date, plan: null}); + listItems.push({_id: itemId, group: group.date, plan: undefined}); } }); }); @@ -906,9 +967,11 @@ export const groupRegions = (filter: any, aggregations: any, props: any) => { export const getRegionName = (key: any, locator: any) => locator.label || key; -export const isItemTBC = (item: any) => ( - !get(item, 'event') ? get(item, `planning_items[0].${TO_BE_CONFIRMED_FIELD}`) : get(item, `event.${TO_BE_CONFIRMED_FIELD}`) -); +export function isItemTBC(item: IAgendaItem): boolean { + return item.event != null ? + item.event._time_to_be_confirmed === true : + item.planning_items?.[0]?._time_to_be_confirmed === true; +} /** @@ -969,7 +1032,7 @@ export const getCoverageTooltip = (coverage: any, beingUpdated?: any) => { return gettext('{{ type }} coverage', {type: coverageType}); }; -function getScheduleType(item: any) { +function getScheduleType(item: IAgendaItem): string { const start = moment(item.dates.start); const end = moment(item.dates.end); const duration = end.diff(start, 'minutes'); @@ -1005,8 +1068,8 @@ function getScheduleType(item: any) { * @param {Object} options * @return {Array} [time string, date string] */ -export function formatAgendaDate(item: any, group: any, {localTimeZone = true, onlyDates = false}) { - const getFormattedTimezone = (date: any) => { +export function formatAgendaDate(item: IAgendaItem, group?: string, {localTimeZone = true, onlyDates = false} = {}) { + function getFormattedTimezone(date: moment.Moment): string { const tzStr = date.format('z'); if (tzStr.indexOf('+0') >= 0) { return tzStr.replace('+0', 'GMT+'); @@ -1017,7 +1080,7 @@ export function formatAgendaDate(item: any, group: any, {localTimeZone = true, o } return tzStr; - }; + } const isTBCItem = isItemTBC(item); let start = parseDate(item.dates.start, item.dates.all_day); @@ -1027,17 +1090,12 @@ export function formatAgendaDate(item: any, group: any, {localTimeZone = true, o const isGroupBetweenEventDates = dateGroup ? start.isSameOrBefore(dateGroup, 'day') && end.isSameOrAfter(dateGroup, 'day') : true; - if (!isGroupBetweenEventDates && hasCoverages(item)) { + if (group != null && !isGroupBetweenEventDates && hasCoverages(item)) { // we rendering for extra days - const scheduleDates = item.coverages - .map((coverage: any) => { - if (isCoverageForExtraDay(coverage)) { - return coverage.scheduled; - } - return null; - }) - .filter((d: any) => d) - .sort((a: any, b: any) => { + const scheduleDates = (item.coverages ?? []) + .filter((coverage) => isCoverageForExtraDay(coverage, group)) + .map((coverage) => coverage.scheduled) + .sort((a, b) => { if (a < b) return -1; if (a > b) return 1; return 0; diff --git a/assets/components/PersonalizeHomeModal.tsx b/assets/components/PersonalizeHomeModal.tsx index 2e7a72ce8..214007c41 100644 --- a/assets/components/PersonalizeHomeModal.tsx +++ b/assets/components/PersonalizeHomeModal.tsx @@ -3,16 +3,15 @@ import React from 'react'; import {connect} from 'react-redux'; import {partition} from 'lodash'; import {gettext} from 'utils'; + +import {IUser, IUserDashboard, ITopic, IAgendaState} from 'interfaces'; import Modal from 'components/Modal'; import {Input} from 'reactstrap'; import CheckboxInput from './CheckboxInput'; -import {IUser, IUserDashboard} from 'interfaces/user'; import {RadioButtonGroup} from 'features/sections/SectionSwitch'; import {modalFormInvalid, modalFormValid} from 'actions'; import {updateUser} from 'users/actions'; import {getCurrentUser} from 'company-admin/selectors'; -import {IAgendaState} from 'agenda/reducers'; -import {ITopic} from 'interfaces/topic'; import {IPersonalizedDashboardsWithData} from 'home/reducers'; import {searchIcon} from 'search/components/search-icon'; diff --git a/assets/home/components/HomeApp.tsx b/assets/home/components/HomeApp.tsx index 06fba82d2..d5e2f389f 100644 --- a/assets/home/components/HomeApp.tsx +++ b/assets/home/components/HomeApp.tsx @@ -1,7 +1,9 @@ import React from 'react'; import {connect} from 'react-redux'; -import {getConfig, gettext, isDisplayed, isMobilePhone} from 'utils'; import {get} from 'lodash'; + +import {ITopic, IItemAction} from 'interfaces'; +import {gettext, isDisplayed, isMobilePhone} from 'utils'; import {getCard} from 'components/cards/utils'; import getItemActions from 'wire/item-actions'; import ItemDetails from 'wire/components/ItemDetails'; @@ -20,7 +22,6 @@ import {personalizeHome} from 'agenda/actions'; import {RadioButtonGroup} from 'features/sections/SectionSwitch'; import {getCurrentUser} from 'company-admin/selectors'; import {IPersonalizedDashboardsWithData} from 'home/reducers'; -import {ITopic} from 'interfaces/topic'; export const WIRE_SECTION = 'wire'; @@ -35,37 +36,40 @@ interface IState { activeOptionId: 'default' | 'my-home'; } -interface IProps { +interface IStateProps { cards: Array; + personalizedDashboards: Array; itemsByCard: any; products: Array; user: string; userType: string; + userSections: any; company: string; - format: Array; itemToOpen: any; - personalizedDashboards: Array; modal: any; - openItemDetails: () => void; activeCard: string; - actions: Array<{name: string; action: (action?: any) => void;}>; - fetchCardExternalItems: (cardId: string, cardLabel: string) => void; - personalizeHome: () => void; - fetchCompanyCardItems: () => void; - followStory: () => void; previewConfig: any; listConfig: any; detailsConfig: any; - downloadMedia: () => void; topics: Array; - isFollowing: boolean; isSearchEnabled: boolean; filterGroupLabels: any; currentUser: any; +} + +interface IDispatchProps { + openItemDetails: (item: any, state: any) => void; fetchItems: () => any; - userSections: any; + personalizeHome: () => void; + actions: Array; + fetchCardExternalItems: (cardId: string, cardLabel: string) => any; + fetchCompanyCardItems: () => any; + followStory: (item: any) => void; + downloadMedia: (href: any, id: any) => any; } +type IProps = IStateProps & IDispatchProps; + class HomeApp extends React.Component { static propTypes: any; @@ -343,7 +347,7 @@ class HomeApp extends React.Component { user={this.props.user} topics={this.props.topics} actions={this.filterActions(this.props.itemToOpen, this.props.previewConfig)} - onClose={() => this.props.actions.filter((a: any) => a.id === 'open')[0].action(null)} + onClose={() => this.props.actions.filter((a: any) => a.id === 'open')[0].action()} followStory={this.props.followStory} detailsConfig={this.props.detailsConfig} filterGroupLabels={this.props.filterGroupLabels} @@ -369,7 +373,7 @@ class HomeApp extends React.Component { actions={this.filterActions(this.props.itemToOpen, this.props.previewConfig)} followStory={this.props.followStory} isFollowing={!!isFollowing} - closePreview={() => this.props.actions.filter((a: any) => a.id === 'open')[0].action(null)} + closePreview={() => this.props.actions.filter((a) => a.id === 'open')[0].action()} previewConfig={this.props.previewConfig} downloadMedia={this.props.downloadMedia} listConfig={this.props.listConfig} @@ -426,4 +430,9 @@ const mapDispatchToProps = (dispatch: any, state: any) => ({ }); -export default connect(mapStateToProps, mapDispatchToProps)(HomeApp); +export default connect< + IStateProps, + IDispatchProps, + {}, + any +>(mapStateToProps, mapDispatchToProps)(HomeApp); diff --git a/assets/interfaces/agenda.ts b/assets/interfaces/agenda.ts index 997f6dda1..b9e3945ac 100644 --- a/assets/interfaces/agenda.ts +++ b/assets/interfaces/agenda.ts @@ -1,3 +1,13 @@ +import {AnyAction} from 'redux'; +import {ThunkAction, ThunkDispatch} from 'redux-thunk'; +import {IFilterGroup, IResourceItem, ISection} from './common'; +import {IAgendaUIConfig} from './configs'; +import {IUser, IUserType} from './user'; +import {ITopic, ITopicFolder} from './topic'; +import {ICompany} from './company'; +import {IArticle} from './content'; +import {ISearchState} from './search'; + interface IPhoneNumber { public: boolean; number: string; @@ -36,12 +46,158 @@ export interface ILocation { } export interface IEvent { + _id: string; event_contact_info?: Array; location?: Array; + actioned_date?: string; + _time_to_be_confirmed?: boolean; + files?: Array; +} + +export type ICoverageStatus = 'coverage intended' | + 'coverage not planned' | + 'coverage not intended' | + 'coverage not decided' | + 'coverage not decided yet' | + 'coverage upon request'; + +export type ICoverageWorkflowStatus = 'draft' | + 'assigned' | + 'active' | + 'completed' | + 'cancelled'; + +export interface ICoverage { + planning_id: IAgendaItem['_id']; + coverage_id: IAgendaItem['_id']; + scheduled: string; + coverage_type: string; + planning?: { + scheduled: string; + }; + watches?: Array; + coverage_status: ICoverageStatus; + workflow_status: ICoverageWorkflowStatus; } -export interface IAgendaItem { - type: 'event' | 'planning'; +export interface IAgendaItem extends IResourceItem { + guid: string; + type: 'agenda'; + item_type: 'event' | 'planning'; event?: IEvent; location?: IEvent['location']; -} \ No newline at end of file + version?: number | string; + plan?: IAgendaItem; + planning_items?: Array; + _hits?: { + matched_planning_items?: Array; + matched_coverages?: Array; + }; + _display_from?: string; + _display_to?: string; + display_dates?: Array<{date: string}>; + dates: { + all_day?: boolean; + no_end_time?: boolean; + start: string; + end?: string; + tz?: string; + }; + coverages?: Array + planning_date?: string; + _time_to_be_confirmed?: boolean; + name?: string; + slugline?: string; + headline?: string; + description_text?: string; + definition_short?: string; + bookmarks?: Array; + watches?: Array; + es_highlight?: {[field: string]: Array}; + state: string; +} + +export interface IAgendaListGroup { + date: string; + items: Array; + hiddenItems: Array; +} + +export interface IAgendaListGroupItem { + _id: IAgendaItem['_id']; + group: IAgendaListGroup['date']; + plan?: IAgendaItem['_id']; +} + +export interface IAgendaState { + items: Array; + fetchFrom: number; + itemsById: {[itemId: string]: IAgendaItem}; + listItems: { + groups: Array; + hiddenGroupsShown: {[dateString: string]: boolean}; + }; + aggregations?: {[field: string]: any}; // Too complex to even bother + activeItem?: IAgendaListGroupItem; + previewItem?: IAgendaItem['_id']; + previewGroup?: string; + previewPlan?: IAgendaItem['_id']; + openItem?: IAgendaItem; + isLoading: boolean; + resultsFiltered: boolean; + totalItems: number; + activeQuery?: {[key: string]: any}; + user: IUser['_id']; + userObject: IUser; + userFolders: Array; + company?: ICompany['_id']; + companyFolders: Array; + topics: Array; + selectedItems: Array; + bookmarks: boolean; + context: 'agenda'; + formats: Array<{ + format: string; + name: string; + }>; + newItems: Array; + newItemsByTopic: {[topidId: string]: Array}; + readItems: {[itemId: string]: number}; + agenda: { + activeView: 'list-view' | 'list-view-compact'; + activeDate: number; + activeGrouping: 'day'; // Week and month is partially supported in code, but never exposed in the UI + eventsOnlyAccess: boolean; + itemType?: 'events' | 'planning'; + featuredOnly: boolean; + agendaWireItems: Array; + }; + search: ISearchState; + detail: boolean; + userSections: {[sectionId: string]: ISection}; + searchInitiated: boolean; + uiConfig: IAgendaUIConfig; + groups: Array; + userType: IUserType; + hasAgendaFeaturedItems: boolean; + savedItemsCount: number; + locators?: { + _id: 'locators'; + items: Array<{ + name: string; + state?: string; + country?: string; + world_region?: string; + }>; + }; + errors?: {[field: string]: Array}; +} + +export type AgendaGetState = () => IAgendaState; +export type AgendaThunkAction = ThunkAction< + ReturnType, + IAgendaState, + unknown, + AnyAction +>; +export type AgendaThunkDispatch = ThunkDispatch; diff --git a/assets/interfaces/common.ts b/assets/interfaces/common.ts index c9c2140a2..c9d39ca95 100644 --- a/assets/interfaces/common.ts +++ b/assets/interfaces/common.ts @@ -28,28 +28,43 @@ export interface ICountry { text: string; } -export type IListConfig = {[key: string]: string | number | boolean}; - interface IBaseAction { - _id: string; + _id?: string; id: string; name: string; - shortcut: boolean; - icon: string; - tooltip: string; - multi: boolean; + shortcut?: boolean; + icon?: string; + tooltip?: string; visited?(user: IUser['_id'], item: IArticle | IAgendaItem): void; when?(props: any, item: IArticle | IAgendaItem): boolean; } interface ISingleItemAction extends IBaseAction { - multi: false; - action(item: IArticle | IAgendaItem, group: string, plan: IAgendaItem): void; + action(item?: IArticle | IAgendaItem, group?: string, plan?: IAgendaItem): void; } interface IMultiItemAction extends IBaseAction { multi: true; - action(items: Array): void; + action(items?: Array): void; } export type IItemAction = ISingleItemAction | IMultiItemAction; + +export interface IResourceItem { + _id: string; + _created: string; + _updated: string; + _etag: string; + type: string; +} + +export interface IRestApiResponse { + _items: Array; + _links: {}; + _meta: { + max_results: number; + page: number; + total: number; + }; + _aggregations: {[key: string]: any}; +} diff --git a/assets/interfaces/configs.ts b/assets/interfaces/configs.ts new file mode 100644 index 000000000..ac6fea118 --- /dev/null +++ b/assets/interfaces/configs.ts @@ -0,0 +1,81 @@ + +export type IDisplayFieldsConfig = string | + '/' | + '//' | + { + field: string, + component?: string; + styles?: {[key: string]: string | number} + } | + Array< + string | + '/' | + '//' | + { + field: string, + component?: string; + styles?: {[key: string]: string | number} + } + > + +export interface IListConfig { + subject?: { + scheme?: Array | string; + }; + highlights?: { + urgency?: Array; + }; + metadata_fields?: Array; + compact_metadata_fields?: Array; + show_list_action_icons?: { + large?: boolean; + compact?: boolean; + mobile?: boolean; + }; + abstract?: {displayed: boolean}; + wordcount?: {displayed: boolean}; + charcount?: {displayed: boolean}; + slugline?: {displayed: boolean}; + contacts?: {displayed: boolean}; +} + +export interface IPreviewConfig { + slugline?: {displayed: boolean}; + abstract?: {displayed: boolean}; + category?: {displayed: boolean}; + subject?: {displayed: boolean}; + authors?: {displayed: boolean}; + byline?: {displayed: boolean}; + located?: {displayed: boolean}; + subjects?: {displayed: boolean}; + metadata_fields?: Array; +} + +interface IBaseUIConfig { + _id: string; + preview?: IPreviewConfig; + details?: IPreviewConfig; + list?: IListConfig; + advanced_search_tabs?: {[tabId: string]: boolean}; + multi_select_topics?: boolean; + enable_global_topics?: boolean; +} + +export interface IHomeUIConfig extends IBaseUIConfig { + _id: 'home'; + search?: boolean; +} + +export interface IWireUIConfig extends IBaseUIConfig { + _id: 'wire'; +} + +export interface IAgendaUIConfig extends IBaseUIConfig { + _id: 'agenda'; + open_coverage_content_in_same_page?: boolean; + subnav?: { + filters?: Array; + }; +} + +export type IUIConfig = IHomeUIConfig | IWireUIConfig | IAgendaUIConfig; diff --git a/assets/interfaces/content.ts b/assets/interfaces/content.ts index da719f32c..03e43e65e 100644 --- a/assets/interfaces/content.ts +++ b/assets/interfaces/content.ts @@ -1,3 +1,4 @@ +import {IResourceItem} from './common'; export type IContentType = 'text' | 'picture' | 'video' | 'audio'; @@ -9,8 +10,7 @@ export interface IRendition { height?: number; } -export interface IArticle { - _id: string; +export interface IArticle extends IResourceItem { guid: string; type: IContentType; ancestors?: Array; @@ -22,6 +22,7 @@ export interface IArticle { anpa_take_key?: string; source: string; versioncreated: string; + version?: number | string; extra?: { type?: 'transcript'; [key: string]: any; diff --git a/assets/interfaces/index.ts b/assets/interfaces/index.ts index 257f3960e..a0be38c38 100644 --- a/assets/interfaces/index.ts +++ b/assets/interfaces/index.ts @@ -1,11 +1,25 @@ -export {TDatetime, IFilterGroup, ISection, ICountry, IListConfig, IItemAction} from './common'; +export {TDatetime, IFilterGroup, ISection, ICountry, IItemAction, IResourceItem, IRestApiResponse} from './common'; +export {IListConfig, IPreviewConfig, IDisplayFieldsConfig} from './configs'; export {ICompany, ICompanyType, IAuthProvider, IService} from './company'; export {IClientConfig} from './config'; export {INavigation} from './navigation'; export {ITopicNotificationScheduleType, ITopicFolder, ITopic, ISearchParams, ISearchFields} from './topic'; -export {IUserDashboard, IUser} from './user'; +export {IUserDashboard, IUser, IUserType} from './user'; export {IDashboardCard} from './dashboard'; export {IProduct} from './product'; export {ISectionFilter} from './section_filter'; -export {IAgendaItem} from './agenda'; +export { + IAgendaItem, + IAgendaListGroup, + IAgendaListGroupItem, + IEvent, + ICoverage, + IAgendaState, + AgendaGetState, + AgendaThunkAction, + AgendaThunkDispatch, + ICoverageStatus, + ICoverageWorkflowStatus, +} from './agenda'; export {IArticle, IRendition, IContentType} from './content'; +export {ISearchState} from './search'; diff --git a/assets/interfaces/search.ts b/assets/interfaces/search.ts new file mode 100644 index 000000000..1cba0a34d --- /dev/null +++ b/assets/interfaces/search.ts @@ -0,0 +1,25 @@ +import {ITopic} from './topic'; +import {INavigation} from './navigation'; +import {IProduct} from './product'; + +export interface ISearchState { + activeTopic?: ITopic['_id']; + activeNavigation?: Array; + activeQuery?: string; + activeSortQuery?: string; + activeFilter: {[key: string]: any}; + createdFilter: { + from?: string; + to?: string; + }; + productId?: IProduct['_id']; + navigations: Array; + products: Array; + activeView: 'list-view' | 'list-view-compact'; + advanced: { + all: string; + any: string; + exclude: string; + fields: Array; + }; +} diff --git a/assets/interfaces/user.ts b/assets/interfaces/user.ts index 1dc3561a3..092c4f31a 100644 --- a/assets/interfaces/user.ts +++ b/assets/interfaces/user.ts @@ -8,6 +8,8 @@ export interface IUserDashboard { topic_ids: Array; } +export type IUserType = 'administrator' | 'internal' | 'public' | 'company_admin' | 'account_management'; + export interface IUser { _id: string; first_name: string; @@ -19,7 +21,7 @@ export interface IUser { signup_details?: {[key: string]: any}; country: string; company: ICompany['_id']; - user_type: 'administrator' | 'internal' | 'public' | 'company_admin' | 'account_management'; + user_type: IUserType; is_validated?: boolean; is_enabled?: boolean; is_approved?: boolean; diff --git a/assets/item-actions.ts b/assets/item-actions.ts index 941d875be..65a0679ff 100644 --- a/assets/item-actions.ts +++ b/assets/item-actions.ts @@ -1,6 +1,7 @@ +import {IItemAction} from 'interfaces'; import {gettext, isActionEnabled} from './utils'; -export function getItemActions(dispatch: any, actions: any) { +export function getItemActions(dispatch: any, actions: any): Array { const { openItem, shareItems, diff --git a/assets/layout/components/BaseApp.tsx b/assets/layout/components/BaseApp.tsx index 296177717..71534519f 100644 --- a/assets/layout/components/BaseApp.tsx +++ b/assets/layout/components/BaseApp.tsx @@ -3,6 +3,8 @@ import PropTypes from 'prop-types'; import {get} from 'lodash'; import {createPortal} from 'react-dom'; import {Tooltip} from 'bootstrap'; + +import {IArticle, IAgendaItem, IListConfig, IPreviewConfig, IItemAction} from 'interfaces'; import {isTouchDevice, gettext, isDisplayed, isMobilePhone} from 'utils'; import {getSingleFilterValue} from 'search/utils'; import {getFilterPanelOpenState, setFilterPanelOpenState} from 'local-store'; @@ -171,7 +173,15 @@ export default class BaseApp extends React.Component { } } - filterActions(item: any, config?: any, includeCoverages: any = false) { + filterActions( + item?: IArticle | IAgendaItem, + config?: IListConfig | IPreviewConfig, + includeCoverages = false + ): Array { + if (item == null) { + return []; + } + return this.props.actions.filter((action: any) => (!config || isDisplayed(action.id, config)) && (!action.when || action.when(this.props.state, item, includeCoverages))); } diff --git a/assets/search/reducers.ts b/assets/search/reducers.ts index 91b9bf85f..2700a5bc9 100644 --- a/assets/search/reducers.ts +++ b/assets/search/reducers.ts @@ -1,5 +1,6 @@ import {get} from 'lodash'; +import {ISearchState} from 'interfaces'; import {toggleValue} from 'utils'; import {getAdvancedSearchFields} from './utils'; @@ -28,33 +29,14 @@ import { import {EXTENDED_VIEW} from 'wire/defaults'; -interface IInitialState { - activeTopic: any; - activeNavigation: any; - activeQuery: any; - activeSortQuery: any; - activeFilter: any; - createdFilter: any; - productId: any; - navigations: any; - products: any; - activeView: typeof EXTENDED_VIEW; - advanced: { - all: any; - any: any; - exclude: any; - fields: any; - }; -} - -const INITIAL_STATE: IInitialState = { - activeTopic: null, +const INITIAL_STATE: ISearchState = { + activeTopic: undefined, activeNavigation: [], activeQuery: '', activeSortQuery: '', activeFilter: {}, createdFilter: {}, - productId: null, + productId: undefined, navigations: [], products: [], @@ -69,7 +51,7 @@ const INITIAL_STATE: IInitialState = { }, }; -export function searchReducer(state=INITIAL_STATE, action?: any, context?: any) : IInitialState { +export function searchReducer(state=INITIAL_STATE, action?: any, context?: any) : ISearchState { if (!action) { state.advanced.fields = getAdvancedSearchFields(context); diff --git a/assets/styles/article-list.scss b/assets/styles/article-list.scss index edff4e377..068794062 100644 --- a/assets/styles/article-list.scss +++ b/assets/styles/article-list.scss @@ -849,6 +849,10 @@ a.wire-articles__versions { gap: var(--space--1); .list-group-header__title-info { font-weight: 400; + + @include phone { + display: none; + } } } @@ -859,6 +863,9 @@ a.wire-articles__versions { padding-inline-end: var(--space--1); border-inline-end: 1px dotted var(--color-line--medium); margin-inline-start: var(--space--0-5); + @include phone { + display: none; + } } .list-group-header__coverage-item { display: flex; @@ -979,4 +986,4 @@ a.wire-articles__versions { .list-group-header__actions { margin-inline-start: auto; -} \ No newline at end of file +} diff --git a/assets/users/components/EditUser.tsx b/assets/users/components/EditUser.tsx index 95df497fd..8bfc2d52c 100644 --- a/assets/users/components/EditUser.tsx +++ b/assets/users/components/EditUser.tsx @@ -45,7 +45,7 @@ interface IUserProfileStore { seats?: any; } -interface IProps extends IReduxStoreProps { +interface IOwnProps { original: IUser; user: IUser; @@ -67,6 +67,8 @@ interface IProps extends IReduxStoreProps { toolbar?: any; } +type IProps = IReduxStoreProps & IOwnProps; + const EditUserComponent: React.ComponentType = (props: IProps) => { const { original, @@ -455,6 +457,6 @@ const mapStateToProps = (state: IUserProfileStore): IReduxStoreProps => ({ seats: companyProductSeatsSelector(state), }); -const EditUser = connect(mapStateToProps)(EditUserComponent); +const EditUser = connect(mapStateToProps)(EditUserComponent); export default EditUser; diff --git a/assets/utils.tsx b/assets/utils.tsx index 7f6045498..0f6acd68f 100644 --- a/assets/utils.tsx +++ b/assets/utils.tsx @@ -3,9 +3,9 @@ import server from 'server'; import analytics from 'analytics'; import {get, isInteger, keyBy, isEmpty, cloneDeep, throttle, memoize} from 'lodash'; import {Provider} from 'react-redux'; -import {createStore as _createStore, applyMiddleware, compose} from 'redux'; +import {createStore as _createStore, applyMiddleware, compose, Store, Middleware} from 'redux'; import {createLogger} from 'redux-logger'; -import thunk from 'redux-thunk'; +import thunk, {ThunkAction} from 'redux-thunk'; import {render as _render} from 'react-dom'; import alertify from 'alertifyjs'; import moment from 'moment-timezone'; @@ -90,10 +90,10 @@ export function assertNever(x: any): never { * @param {String} name * @return {Store} */ -export function createStore(reducer: any, name: any = 'default') { +export function createStore(reducer: any, name: any = 'default'): Store { // https://redux.js.org/api-reference/compose let _compose = compose; - const middlewares = [ + const middlewares: Array = [ thunk ]; @@ -123,7 +123,7 @@ export function createStore(reducer: any, name: any = 'default') { } } - return _createStore(reducer, _compose(applyMiddleware(...middlewares))); + return _createStore(reducer, _compose(applyMiddleware(...middlewares))); } /** diff --git a/assets/wire/tests/actions.spec.ts b/assets/wire/tests/actions.spec.ts index 684fcd35f..3ff3bc4cc 100644 --- a/assets/wire/tests/actions.spec.ts +++ b/assets/wire/tests/actions.spec.ts @@ -21,6 +21,9 @@ const testArticle: IArticle = { _id: 'foo', guid: 'foo', type: 'text', + _created: '2023-11-16T04:00:00+0000', + _updated: '2023-11-16T04:00:00+0000', + _etag: 'etag123', associations: {}, slugline: 'test-article', headline: 'My test article', diff --git a/assets/wire/utils.ts b/assets/wire/utils.ts index 98b0471e4..6b170367b 100644 --- a/assets/wire/utils.ts +++ b/assets/wire/utils.ts @@ -1,6 +1,6 @@ import {get, isEmpty, isEqual, pickBy} from 'lodash'; -import {IArticle, IContentType, IRendition} from '../interfaces'; +import {IArticle, IAgendaItem, IContentType, IRendition} from 'interfaces'; import {getTextFromHtml, getConfig, isDisplayed, gettext} from 'utils'; export const DISPLAY_ABSTRACT = getConfig('display_abstract'); @@ -15,9 +15,11 @@ const STATUS_KILLED = 'canceled'; * @param {Object} item * @returns {number} */ -export function getIntVersion(item: any) { - if (item) { - return parseInt(item.version, 10) || 0; +export function getIntVersion(item: IArticle | IAgendaItem | undefined): number | undefined { + if (item != null && item.version != null) { + return typeof item.version === 'number' ? + item.version : + parseInt(item.version, 10) || 0; } } diff --git a/newsroom/agenda/agenda.py b/newsroom/agenda/agenda.py index f5fe60bb5..253dddbe4 100644 --- a/newsroom/agenda/agenda.py +++ b/newsroom/agenda/agenda.py @@ -319,6 +319,25 @@ def get_date_filters(args): return date_range +def gen_date_range_filter(field: str, operator: str, date_str: str, datetime_instance: datetime): + return [ + { + "bool": { + "must_not": {"term": {"dates.all_day": True}}, + "filter": {"range": {field: {operator: datetime_instance}}}, + }, + }, + { + "bool": { + "filter": [ + {"term": {"dates.all_day": True}}, + {"range": {field: {operator: date_str}}}, + ], + }, + }, + ] + + def _set_event_date_range(search): """Get events for selected date. @@ -334,42 +353,11 @@ def _set_event_date_range(search): should = [] if date_from and not date_to: - dates_field = "dates.start" if app.config.get("AGENDA_SHOW_MULTIDAY_ON_START_ONLY") else "dates.end" # Filter from a particular date onwards - should = [ - { - "bool": { - "must_not": {"term": {"dates.all_day": True}}, - "filter": {"range": {dates_field: {"gte": date_from}}}, - }, - }, - { - "bool": { - "filter": [ - {"term": {"dates.all_day": True}}, - {"range": {dates_field: {"gte": search.args["date_from"]}}}, - ], - }, - }, - ] + should = gen_date_range_filter("dates.end", "gte", search.args["date_from"], date_from) elif not date_from and date_to: # Filter up to a particular date - should = [ - { - "bool": { - "filter": {"range": {"dates.end": {"lte": date_to}}}, - "must_not": {"term": {"dates.all_day": True}}, - }, - }, - { - "bool": { - "filter": [ - {"range": {"dates.end": {"lte": search.args["date_to"]}}}, - {"term": {"dates.all_day": True}}, - ], - }, - }, - ] + should = gen_date_range_filter("dates.end", "lte", search.args["date_to"], date_to) elif date_from and date_to: # Filter based on the date range provided should = [ diff --git a/newsroom/web/default_settings.py b/newsroom/web/default_settings.py index 0cba3ac53..b9f9bff5a 100644 --- a/newsroom/web/default_settings.py +++ b/newsroom/web/default_settings.py @@ -655,14 +655,6 @@ } ] -#: -#: If `True` it will show multi day events only on starting day, -# when `False` those will be visible on every day. -#: -#: .. versionadded: 2.5.0 -#: -AGENDA_SHOW_MULTIDAY_ON_START_ONLY = True - FIREBASE_CLIENT_CONFIG = { "apiKey": env("FIREBASE_API_KEY"), "authDomain": env("FIREBASE_AUTH_DOMAIN"), diff --git a/package-lock.json b/package-lock.json index 3e14d8675..5ccd26a33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,40 +19,79 @@ } }, "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", + "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", "requires": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==" + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==" }, "@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", + "json5": "^2.2.3", "semver": "^6.3.1" }, "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -66,11 +105,11 @@ } }, "@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz", + "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==", "requires": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.23.4", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -84,26 +123,26 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "requires": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, "dependencies": { "browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "requires": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" } }, "lru-cache": { @@ -127,17 +166,17 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" }, "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { @@ -149,23 +188,23 @@ } }, "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" } }, "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" } }, "@babel/helper-simple-access": { @@ -185,37 +224,37 @@ } }, "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" }, "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==" + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==" }, "@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz", + "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==", "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.4", + "@babel/types": "^7.23.4" } }, "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -253,41 +292,41 @@ } }, "@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==" + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz", + "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==" }, "@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz", + "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==", "requires": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" } }, "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz", + "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==", + "requires": { + "@babel/code-frame": "^7.23.4", + "@babel/generator": "^7.23.4", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", + "@babel/parser": "^7.23.4", + "@babel/types": "^7.23.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -300,12 +339,12 @@ } }, "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz", + "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==", "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "dependencies": { @@ -317,35 +356,21 @@ } }, "@dnd-kit/accessibility": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.0.1.tgz", - "integrity": "sha512-HXRrwS9YUYQO9lFRc/49uO/VICbM+O+ZRpFDe9Pd1rwVv2PCNkRiTZRdxrDgng/UkvdC3Re9r2vwPpXXrWeFzg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.0.tgz", + "integrity": "sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==", "requires": { "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@dnd-kit/core": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.0.8.tgz", - "integrity": "sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.1.0.tgz", + "integrity": "sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==", "requires": { - "@dnd-kit/accessibility": "^3.0.0", - "@dnd-kit/utilities": "^3.2.1", + "@dnd-kit/accessibility": "^3.1.0", + "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@dnd-kit/sortable": { @@ -355,28 +380,14 @@ "requires": { "@dnd-kit/utilities": "^3.2.0", "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@dnd-kit/utilities": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.1.tgz", - "integrity": "sha512-OOXqISfvBw/1REtkSK2N3Fi2EQiLMlWUlqnOK/UpOISqBZPWpE6TqL+jcPtMOkE8TqYGiURvRdPSI9hltNUjEA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", + "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", "requires": { "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@eslint-community/eslint-utils": { @@ -388,14 +399,14 @@ } }, "@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==" + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==" }, "@eslint/eslintrc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", - "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", + "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -414,9 +425,9 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "requires": { "type-fest": "^0.20.2" } @@ -432,9 +443,9 @@ } }, "@eslint/js": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", - "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==" + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==" }, "@firebase/analytics": { "version": "0.10.0", @@ -446,13 +457,6 @@ "@firebase/logger": "0.4.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/analytics-compat": { @@ -465,13 +469,6 @@ "@firebase/component": "0.6.4", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/analytics-types": { @@ -495,11 +492,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -512,13 +504,6 @@ "@firebase/logger": "0.4.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/app-check-compat": { @@ -532,13 +517,6 @@ "@firebase/logger": "0.4.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/app-check-interop-types": { @@ -561,13 +539,6 @@ "@firebase/logger": "0.4.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/app-types": { @@ -585,40 +556,6 @@ "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } } }, "@firebase/auth-compat": { @@ -632,40 +569,6 @@ "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } } }, "@firebase/auth-interop-types": { @@ -685,13 +588,6 @@ "requires": { "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/database": { @@ -705,21 +601,6 @@ "@firebase/util": "1.9.3", "faye-websocket": "0.11.4", "tslib": "^2.1.0" - }, - "dependencies": { - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/database-compat": { @@ -733,13 +614,6 @@ "@firebase/logger": "0.4.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/database-types": { @@ -764,40 +638,6 @@ "@grpc/proto-loader": "^0.6.13", "node-fetch": "2.6.7", "tslib": "^2.1.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } } }, "@firebase/firestore-compat": { @@ -810,13 +650,6 @@ "@firebase/firestore-types": "2.5.1", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/firestore-types": { @@ -836,40 +669,6 @@ "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } } }, "@firebase/functions-compat": { @@ -882,13 +681,6 @@ "@firebase/functions-types": "0.6.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/functions-types": { @@ -905,13 +697,6 @@ "@firebase/util": "1.9.3", "idb": "7.0.1", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/installations-compat": { @@ -924,13 +709,6 @@ "@firebase/installations-types": "0.5.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/installations-types": { @@ -944,13 +722,6 @@ "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/messaging": { @@ -964,13 +735,6 @@ "@firebase/util": "1.9.3", "idb": "7.0.1", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/messaging-compat": { @@ -982,13 +746,6 @@ "@firebase/messaging": "0.12.4", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/messaging-interop-types": { @@ -1006,13 +763,6 @@ "@firebase/logger": "0.4.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/performance-compat": { @@ -1026,13 +776,6 @@ "@firebase/performance-types": "0.2.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/performance-types": { @@ -1048,15 +791,8 @@ "@firebase/component": "0.6.4", "@firebase/installations": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } + "@firebase/util": "1.9.3", + "tslib": "^2.1.0" } }, "@firebase/remote-config-compat": { @@ -1070,13 +806,6 @@ "@firebase/remote-config-types": "0.3.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/remote-config-types": { @@ -1093,40 +822,6 @@ "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } } }, "@firebase/storage-compat": { @@ -1139,13 +834,6 @@ "@firebase/storage-types": "0.8.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/storage-types": { @@ -1159,13 +847,6 @@ "integrity": "sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@firebase/webchannel-wrapper": { @@ -1192,104 +873,6 @@ "protobufjs": "^7.2.4", "yargs": "^17.7.2" } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "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==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" } } }, @@ -1310,14 +893,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -1328,29 +903,6 @@ "wrap-ansi": "^7.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "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==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", @@ -1376,16 +928,6 @@ "long": "^4.0.0" } }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -1394,16 +936,6 @@ "ansi-regex": "^5.0.1" } }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -1431,11 +963,11 @@ } }, "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "requires": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" } @@ -1446,9 +978,9 @@ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" }, "@jridgewell/gen-mapping": { "version": "0.3.3", @@ -1461,9 +993,9 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" }, "@jridgewell/set-array": { "version": "1.1.2", @@ -1476,19 +1008,12 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - } + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@nodelib/fs.scandir": { @@ -1574,9 +1099,9 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "@remix-run/router": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz", - "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.13.0.tgz", + "integrity": "sha512-5dMOnVnefRsl4uRnAdoWjtVTdh8e6aZqgM4puy9nmEADH72ck+uXwzpJLEKE9Q6F8ZljNewLgmTfkxUrBdv4WA==" }, "@sinonjs/commons": { "version": "1.8.6", @@ -1617,52 +1142,37 @@ "acorn": "^5.3.0", "acorn-dynamic-import": "^3.0.0", "acorn-object-rest-spread": "^1.1.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" - }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "requires": { - "acorn": "^5.0.0" - } - } } }, "@types/bootstrap": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.6.tgz", - "integrity": "sha512-BlAc3YATdasbHoxMoBWODrSF6qwQO/E9X8wVxCCSa6rWjnaZfpkr2N6pUMCY6jj2+wf0muUtLySbvU9etX6YqA==", + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.10.tgz", + "integrity": "sha512-F2X+cd6551tep0MvVZ6nM8v7XgGN/twpdNDjqS1TUM7YFNEtQYWk+dKAnH+T1gr6QgCoGMPl487xw/9hXooa2g==", "requires": { "@popperjs/core": "^2.9.2" } }, "@types/cheerio": { - "version": "0.22.31", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.31.tgz", - "integrity": "sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw==", + "version": "0.22.35", + "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.35.tgz", + "integrity": "sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==", "requires": { "@types/node": "*" } }, "@types/enzyme": { - "version": "3.10.13", - "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.13.tgz", - "integrity": "sha512-FCtoUhmFsud0Yx9fmZk179GkdZ4U9B0GFte64/Md+W/agx0L5SxsIIbhLBOxIb9y2UfBA4WQnaG1Od/UsUQs9Q==", + "version": "3.10.16", + "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.16.tgz", + "integrity": "sha512-17uMdJjSKjvdn/MhO/G2lRNPZGvJxFpvgONrsRoS1+khtJ6UcnCwC9v3gk2UqPyAkMZb6a1VYxScc/vOgkDl9w==", "requires": { "@types/cheerio": "*", "@types/react": "^16" }, "dependencies": { "@types/react": { - "version": "16.14.43", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.43.tgz", - "integrity": "sha512-7zdjv7jvoLLQg1tTvpQsm+hyNUMT2mPlNV1+d0I8fbGhkJl82spopMyBlu4wb1dviZAxpGdk5eHu/muacknnfw==", + "version": "16.14.52", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.52.tgz", + "integrity": "sha512-4+ZN73hgRW3Gang3QMqWjrqPPkf+lWZYiyG4uXtUbpd+7eiBDw6Gemila6rXDd8DorADupTiIERL6Mb5BQTF2w==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1671,46 +1181,55 @@ } } }, + "@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/jasmine": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.5.tgz", - "integrity": "sha512-9YHUdvuNDDRJYXZwHqSsO72Ok0vmqoJbNn73ttyITQp/VA60SarnZ+MPLD37rJAhVoKp+9BWOvJP5tHIRfZylQ==" + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==" }, "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/karma": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/@types/karma/-/karma-6.3.4.tgz", - "integrity": "sha512-aefuFcs4e4NAOi1Ue4AP9fR2TQv45NFpdaLXdg+3FxDDndk/4T6LoHRTmKtRVqkwtQPh5Ntc3CxsoOgzldAAfg==", + "version": "6.3.8", + "resolved": "https://registry.npmjs.org/@types/karma/-/karma-6.3.8.tgz", + "integrity": "sha512-+QGoOPhb1f6Oli8pG+hxdnGDzVhIrpsHaFSJ4UJg15Xj+QBtluKELkJY+L4Li532HmT3l5K5o1FoUZHRQeOOaQ==", "requires": { "@types/node": "*", "log4js": "^6.4.1" } }, "@types/karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-Yh4CuoVjpcXh+p+TPKZC6AlodS4w9217Y+uWy1jNkhX/9+wuvSiyE0uD8SaZCkpWVoJUisuhC8eS4QpZ6EKCtQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/karma-chrome-launcher/-/karma-chrome-launcher-3.1.4.tgz", + "integrity": "sha512-DmZXMnOG1zcl/GqtWbfAePFqWLuDFOYdfa+TpvlNvGHiT8GxJjr5RKTptX8K8ZUokjX1pZGAf4KeC46iok3VcA==", "requires": { "@types/karma": "*" } }, "@types/karma-jasmine": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/karma-jasmine/-/karma-jasmine-4.0.2.tgz", - "integrity": "sha512-eI7nm/IOPMMMYv9E0iVJVb90sp+mYSVCeWAEToyji37jOGEJKf8nfQZ7OwG9gMbymYuiaViEHY3l+fU7cmlI6w==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/karma-jasmine/-/karma-jasmine-4.0.5.tgz", + "integrity": "sha512-BCkxhflM7N5oLOCV+Jdz2fBFa9Yev4wm5iA80k3EVDyh3rUXminuCSuX16jTT/fr2J1dKrOfp22/2WuvW4nyPg==", "requires": { "@types/jasmine": "*", "@types/karma": "*" } }, "@types/lodash": { - "version": "4.14.196", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz", - "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==" + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" }, "@types/long": { "version": "4.0.2", @@ -1718,19 +1237,22 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "@types/node": { - "version": "20.4.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.8.tgz", - "integrity": "sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==" + "version": "20.9.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.5.tgz", + "integrity": "sha512-Uq2xbNq0chGg+/WQEU0LJTSs/1nKxz6u1iemLcGomkSnKokbW1fbLqc3HOqCf2JP7KjlL4QkS7oZZTrOQHQYgQ==", + "requires": { + "undici-types": "~5.26.4" + } }, "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "@types/react": { - "version": "17.0.62", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.62.tgz", - "integrity": "sha512-eANCyz9DG8p/Vdhr0ZKST8JV12PhH2ACCDYlFw6DIO+D+ca+uP4jtEDEpVqXZrh/uZdXQGwk7whJa3ah5DtyLw==", + "version": "17.0.71", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.71.tgz", + "integrity": "sha512-lfqOu9mp16nmaGRrS8deS2Taqhd5Ih0o92Te5Ws6I1py4ytHBcXLqh0YIqVsViqwVI5f+haiFM6hju814BzcmA==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1738,9 +1260,9 @@ } }, "@types/react-datepicker": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@types/react-datepicker/-/react-datepicker-4.15.0.tgz", - "integrity": "sha512-kr10s8ex4+MmCJmzdhA9kfmoMQBmsW5uDYDlH+8f/PgStrp7rRaz23Y/cvTiMgvESVq8ujDh4SOo6jlSwEw13g==", + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/@types/react-datepicker/-/react-datepicker-4.19.3.tgz", + "integrity": "sha512-85F9eKWu9fGiD9r4KVVMPYAdkJJswR3Wci9PvqplmB6T+D+VbUqPeKtifg96NZ4nEhufjehW+SX4JLrEWVplWw==", "requires": { "@popperjs/core": "^2.9.2", "@types/react": "*", @@ -1749,88 +1271,74 @@ } }, "@types/react-dom": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.20.tgz", - "integrity": "sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==", + "version": "17.0.25", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.25.tgz", + "integrity": "sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA==", "requires": { "@types/react": "^17" } }, - "@types/react-redux": { - "version": "5.0.24", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-5.0.24.tgz", - "integrity": "sha512-EJfdjLtxceQmrVZrcwSZR6V97e6qyG/gaJ2MQrsVzGYiXO2cN+oHBSizB1/SnReTkorpEgQulhVdYcFee8abqQ==", - "requires": { - "@types/react": "*", - "redux": "^3.6.0" - } - }, "@types/react-toggle": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/react-toggle/-/react-toggle-4.0.3.tgz", - "integrity": "sha512-57QdMWeeQdRjM2/p+udgYerxUbSkmeUIW18kwUttcci6GHkgxoqCsDZfRtsCsAHcvvM5VBQdtDUEgLWo2e87mA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/react-toggle/-/react-toggle-4.0.5.tgz", + "integrity": "sha512-MHHEDe7GnF/EhLtI5sT70Dqab8rwlgjRZtu/u6gmfbYd+HeYxWiUSRog16+1BCfkz7Wy2VU6+TPU2oCsDtqDzA==", "requires": { "@types/react": "*" } }, "@types/react-transition-group": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", - "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.9.tgz", + "integrity": "sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==", "requires": { "@types/react": "*" } }, "@types/redux-logger": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/redux-logger/-/redux-logger-3.0.9.tgz", - "integrity": "sha512-cwYhVbYNgH01aepeMwhd0ABX6fhVB2rcQ9m80u8Fl50ZODhsZ8RhQArnLTkE7/Zrfq4Sz/taNoF7DQy9pCZSKg==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/redux-logger/-/redux-logger-3.0.12.tgz", + "integrity": "sha512-5vAlwokZi/Unb1eGoZfVVzIBTPNDflwXiDzPLT1SynP6hdJfsOEf+w6ZOySOyboLWciCRYeE5DGYUnwVCq+Uyg==", "requires": { "redux": "^4.0.0" - }, - "dependencies": { - "redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "requires": { - "@babel/runtime": "^7.9.2" - } - } } }, "@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" }, "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==" + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==" }, "@types/sinon": { - "version": "10.0.16", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.16.tgz", - "integrity": "sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ==", + "version": "10.0.20", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.20.tgz", + "integrity": "sha512-2APKKruFNCAZgx3daAyACGzWuJ028VVCUDk6o2rw/Z4PXT0ogwdV4KUegW0MwVs0Zu59auPXbbuBJHF12Sx1Eg==", "requires": { "@types/sinonjs__fake-timers": "*" } }, "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==" + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==" }, "@types/store": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/store/-/store-2.0.2.tgz", - "integrity": "sha512-ZPHnXkzmGMfk+pHqAGzTSpA9CbsHmJLgkvOl5w52LZ0XTxB1ZIHWZzQ7lEtjTNWScBbsQekg8TjApMXkMe4nkw==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/store/-/store-2.0.5.tgz", + "integrity": "sha512-5NmTKe3GWdOaykzq7no+Ahf6mafJu0oLc9JNhJ3E26+0oFvd6GnksnZQpMXcH526mfG4xDYjFiKzyDL51PzeWQ==" + }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" }, "@types/webpack-env": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.1.tgz", - "integrity": "sha512-D0HJET2/UY6k9L6y3f5BL+IDxZmPkYmPT4+qBrRdmRLYRuV0qNKizMgTvYxXZYn+36zjPeoDZAEYBCM6XB+gww==" + "version": "1.18.4", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.4.tgz", + "integrity": "sha512-I6e+9+HtWADAWeeJWDFQtdk4EVSAbj6Rtz4q8fJ7mSr1M0jzlFcs8/HZ+Xb5SHzVm1dxH7aUiI+A8kA8Gcrm0A==" }, "@typescript-eslint/eslint-plugin": { "version": "5.62.0", @@ -1923,6 +1431,11 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, "@wojtekmaj/enzyme-adapter-react-17": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.8.0.tgz", @@ -1975,23 +1488,16 @@ } }, "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" }, "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha512-GKp5tQ8h0KMPWIYGRHHXI1s5tUpZixZ3IHF2jAu42wSCf6In/G873s6/y4DdKdhWvzhu1T6mE1JgvnhAKqyYYQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "requires": { - "acorn": "^4.0.3" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha512-fu2ygVGuMmlzG8ZeRJ0bvR41nsAkxxhbyk8bZ1SS521Z7vmgJFTQQlfz/Mp/nJexGBz+v8sC9bM6+lNgskt4Ug==" - } + "acorn": "^5.0.0" } }, "acorn-jsx": { @@ -2005,13 +1511,6 @@ "integrity": "sha512-v/lolbMJxMB2tm66GjxhNSYEz2I+a8S99emxJu2mhqhDE348dJkxyliJ3pMV79tbTQEzGJA8pyRvC5qoSbjJAA==", "requires": { "acorn": "^5.0.3" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" - } } }, "after": { @@ -2199,14 +1698,14 @@ "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==" }, "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" } }, @@ -2231,71 +1730,72 @@ "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==" }, "array.prototype.filter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.2.tgz", - "integrity": "sha512-us+UrmGOilqttSOgoWZTpOvHu68vZT2YCjc/H4vhu56vzZpaDFBhB+Se2UwqWzMKbDv7Myq5M5pcZLAtUvTQdQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-array-method-boxes-properly": "^1.0.0", "is-string": "^1.0.7" } }, "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", + "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-array-method-boxes-properly": "^1.0.0", "is-string": "^1.0.7" } }, "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" } }, "arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "requires": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" @@ -2333,25 +1833,25 @@ } }, "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" + "object.assign": "^4.1.4", + "util": "^0.10.4" }, "dependencies": { "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "requires": { - "inherits": "2.0.1" + "inherits": "2.0.3" } } } @@ -2384,6 +1884,14 @@ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==" }, + "asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "requires": { + "has-symbols": "^1.0.3" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -3106,52 +2614,30 @@ "define-property": "^1.0.0", "isobject": "^3.0.1", "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "requires": { - "kind-of": "^6.0.0" + "is-descriptor": "^1.0.0" } }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -3364,19 +2850,19 @@ } }, "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.4", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" }, "dependencies": { "readable-stream": { @@ -3534,12 +3020,13 @@ } }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" } }, "callsite": { @@ -3587,14 +3074,14 @@ } }, "caniuse-db": { - "version": "1.0.30001519", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001519.tgz", - "integrity": "sha512-nY0JTY0Po8r8bNBred32hc3QMr2+I/CsJCGmH6tZaVEFUzLSfv64i1E8VwTqP3Of6yyzu4MDKus2eoR0pHCZ2A==" + "version": "1.0.30001564", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001564.tgz", + "integrity": "sha512-nNf2MZGDyVVTiy8Hrzg3kaqlZ4JIaNLQi66C8zHA0QNfkMA1XJXq9FWDReiVqOts5fXIt3aCilsmyLlFPgTTJQ==" }, "caniuse-lite": { - "version": "1.0.30001519", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", - "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==" + "version": "1.0.30001564", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz", + "integrity": "sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==" }, "caseless": { "version": "0.12.0", @@ -3757,41 +3244,26 @@ } }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "dependencies": { "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" } } } @@ -3932,9 +3404,9 @@ "integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==" }, "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==" }, "component-inherit": { "version": "0.0.3", @@ -4437,16 +3909,16 @@ "integrity": "sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug==" }, "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "regexp.prototype.flags": "^1.5.1" } }, "deep-is": { @@ -4454,11 +3926,22 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "requires": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } @@ -4472,41 +3955,19 @@ "isobject": "^3.0.1" }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -4726,9 +4187,9 @@ } }, "dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", + "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" }, "domutils": { "version": "3.1.0", @@ -4766,9 +4227,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.485", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.485.tgz", - "integrity": "sha512-1ndQ5IBNEnFirPwvyud69GHL+31FkE09gH/CJ6m3KCbkx3i0EVOrjwz4UNxRmN9H8OVHbC6vMRZGN1yCvjSs9w==" + "version": "1.4.593", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.593.tgz", + "integrity": "sha512-c7+Hhj87zWmdpmjDONbvNKNo24tvmD4mjal1+qqTYTrlF0/sNpAcDlU0Ki84ftA/5yj3BF2QhSGEC0Rky6larg==" }, "elliptic": { "version": "6.5.4", @@ -4792,9 +4253,9 @@ } }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "3.0.0", @@ -4985,25 +4446,25 @@ } }, "es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "requires": { "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", + "hasown": "^2.0.0", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", @@ -5011,23 +4472,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", "typed-array-buffer": "^1.0.0", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.13" } }, "es-array-method-boxes-properly": { @@ -5035,22 +4496,43 @@ "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, + "es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "requires": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" } }, "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "es-to-primitive": { @@ -5163,17 +4645,18 @@ } }, "eslint": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", + "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.1", - "@eslint/js": "^8.46.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.54.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -5181,7 +4664,7 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.2", + "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", @@ -5283,9 +4766,9 @@ } }, "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "requires": { "type-fest": "^0.20.2" } @@ -5351,14 +4834,15 @@ } }, "eslint-plugin-react": { - "version": "7.33.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz", - "integrity": "sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==", + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "requires": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", @@ -5402,9 +4886,9 @@ } }, "eslint-visitor-keys": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", - "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==" + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" }, "espree": { "version": "9.6.1", @@ -5414,6 +4898,13 @@ "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" + }, + "dependencies": { + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" + } } }, "esprima": { @@ -5878,9 +5369,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5913,9 +5404,9 @@ } }, "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "requires": { "websocket-driver": ">=0.5.1" } @@ -5938,9 +5429,9 @@ }, "dependencies": { "core-js": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.0.tgz", - "integrity": "sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==" + "version": "3.33.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.3.tgz", + "integrity": "sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==" } } }, @@ -6106,11 +5597,12 @@ } }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "requires": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "dependencies": { @@ -6125,9 +5617,9 @@ } }, "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" }, "flatten": { "version": "1.0.3", @@ -6144,9 +5636,9 @@ } }, "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" }, "for-each": { "version": "0.3.3", @@ -6267,19 +5759,19 @@ } }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" } }, "functions-have-names": { @@ -6300,6 +5792,26 @@ "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } } }, "gaze": { @@ -6321,14 +5833,14 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-stdin": { @@ -6470,11 +5982,6 @@ "path-is-absolute": "^1.0.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, "minimatch": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", @@ -6523,12 +6030,9 @@ } }, "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==" }, "has-ansi": { "version": "2.0.0", @@ -6569,11 +6073,11 @@ "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==" }, "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "requires": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" } }, "has-proto": { @@ -6689,6 +6193,14 @@ "minimalistic-assert": "^1.0.1" } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -6705,9 +6217,19 @@ } }, "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } }, "home-or-tmp": { "version": "2.0.0", @@ -7020,9 +6542,9 @@ "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" }, "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==" }, "import-fresh": { "version": "3.3.0", @@ -7093,12 +6615,12 @@ } }, "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, @@ -7136,11 +6658,11 @@ "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==" }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", "requires": { - "kind-of": "^3.0.2" + "hasown": "^2.0.0" } }, "is-arguments": { @@ -7167,6 +6689,14 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -7203,19 +6733,19 @@ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", "requires": { - "kind-of": "^3.0.2" + "hasown": "^2.0.0" } }, "is-date-object": { @@ -7227,20 +6757,12 @@ } }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, "is-dotfile": { @@ -7266,17 +6788,30 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, + "is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "requires": { + "call-bind": "^1.0.2" + } + }, "is-finite": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "requires": { - "number-is-nan": "^1.0.0" + "has-tostringtag": "^1.0.0" } }, "is-glob": { @@ -7287,6 +6822,11 @@ "is-extglob": "^2.1.1" } }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -7372,6 +6912,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" + }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -7432,6 +6977,11 @@ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -7440,6 +6990,15 @@ "call-bind": "^1.0.2" } }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -7490,6 +7049,17 @@ "requires": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } } }, "isstream": { @@ -7497,6 +7067,18 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, + "iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "requires": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, "jasmine-core": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.3.0.tgz", @@ -7719,6 +7301,11 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==" }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, "json-loader": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", @@ -7910,6 +7497,14 @@ "webpack-dev-middleware": "^1.12.0" } }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "requires": { + "json-buffer": "3.0.1" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -8007,14 +7602,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" - }, - "lodash-es": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.camelcase": { "version": "4.3.0", @@ -8410,9 +8000,9 @@ "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==" }, "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, "nanomatch": { "version": "1.2.13", @@ -8524,28 +8114,48 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "requires": { - "isarray": "0.0.1" + "isarray": "0.0.1" + } + } + } + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } } } }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, "node-forge": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", @@ -8704,9 +8314,9 @@ }, "dependencies": { "resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -8829,9 +8439,9 @@ } }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" }, "object-is": { "version": "1.1.5", @@ -8874,44 +8484,44 @@ } }, "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "object.getownpropertydescriptors": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz", - "integrity": "sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", + "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", "requires": { - "array.prototype.reduce": "^1.0.5", + "array.prototype.reduce": "^1.0.6", "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "es-abstract": "^1.21.2", + "es-abstract": "^1.22.1", "safe-array-concat": "^1.0.0" } }, "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "object.omit": { @@ -8939,13 +8549,13 @@ } }, "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "obuf": { @@ -9870,13 +9480,6 @@ "requires": { "lodash": "^4.17.20", "renderkid": "^2.0.4" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } } }, "pretty-format": { @@ -10037,9 +9640,9 @@ } }, "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "q": { "version": "1.5.1", @@ -10232,33 +9835,40 @@ } }, "react-redux": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", - "integrity": "sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg==", - "requires": { - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.0.0", - "lodash": "^4.17.5", - "lodash-es": "^4.17.5", - "loose-envify": "^1.1.0", - "prop-types": "^15.6.0" + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", + "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", + "requires": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } } }, "react-router": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.2.tgz", - "integrity": "sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.20.0.tgz", + "integrity": "sha512-pVvzsSsgUxxtuNfTHC4IxjATs10UaAtvLGVSA1tbUE4GDaOSU1Esu2xF5nWLz7KPiMuW8BJWuPFdlGYJ7/rW0w==", "requires": { - "@remix-run/router": "1.7.2" + "@remix-run/router": "1.13.0" } }, "react-router-dom": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.2.tgz", - "integrity": "sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.20.0.tgz", + "integrity": "sha512-CbcKjEyiSVpA6UtCHOIYLUYn/UJfwzp55va4yEfpk7JBN3GPqWfHrdLkAvNCcpXr8QoihcDMuk0dzWZxtlB/mQ==", "requires": { - "@remix-run/router": "1.7.2", - "react-router": "6.14.2" + "@remix-run/router": "1.13.0", + "react-router": "6.20.0" } }, "react-shallow-renderer": { @@ -10500,56 +10110,14 @@ "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -10607,30 +10175,13 @@ } } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, "is-number": { @@ -10732,14 +10283,11 @@ } }, "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "requires": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" + "@babel/runtime": "^7.9.2" } }, "redux-logger": { @@ -10751,9 +10299,22 @@ } }, "redux-thunk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", - "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==" + }, + "reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + } }, "regenerate": { "version": "1.4.2", @@ -10761,9 +10322,9 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "regenerator-transform": { "version": "0.10.1", @@ -10793,13 +10354,13 @@ } }, "regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "set-function-name": "^2.0.0" } }, "regexpu-core": { @@ -10909,11 +10470,6 @@ "domutils": "^2.5.2", "entities": "^2.0.0" } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" } } }, @@ -10990,11 +10546,11 @@ "integrity": "sha512-b/6tFZCmRhtBMa4xGqiiRp9jh9Aqi2A687Lo265cN0/QohJQEBPiQ52f4QB6i0eF3yp3hmLL21LSGBcML2dlxA==" }, "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -11090,12 +10646,12 @@ } }, "safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } @@ -11142,6 +10698,138 @@ "lodash": "^4.0.0", "scss-tokenizer": "^0.2.3", "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } }, "sass-loader": { @@ -11378,6 +11066,27 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -11561,41 +11270,19 @@ "is-descriptor": "^1.0.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -11746,6 +11433,16 @@ "requires": { "faye-websocket": "^0.10.0", "uuid": "^3.0.1" + }, + "dependencies": { + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", + "requires": { + "websocket-driver": ">=0.5.1" + } + } } }, "sockjs-client": { @@ -11769,14 +11466,6 @@ "ms": "2.0.0" } }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -11851,9 +11540,9 @@ } }, "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" }, "spdy": { "version": "3.4.7", @@ -11926,9 +11615,9 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -12037,58 +11726,74 @@ "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", "side-channel": "^1.0.4" } }, "string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "string_decoder": { @@ -12166,11 +11871,6 @@ "whet.extend": "~0.9.9" } }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -12628,56 +12328,14 @@ "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -12740,30 +12398,13 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, "is-number": { @@ -12844,9 +12485,9 @@ } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "tsutils": { "version": "3.21.0", @@ -12854,6 +12495,13 @@ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "requires": { "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, "tty-browserify": { @@ -13055,6 +12703,11 @@ "which-boxed-primitive": "^1.0.2" } }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -13154,9 +12807,9 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -13181,18 +12834,26 @@ "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" }, "url": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.1.tgz", - "integrity": "sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "requires": { "punycode": "^1.4.1", - "qs": "^6.11.0" + "qs": "^6.11.2" }, "dependencies": { "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "requires": { + "side-channel": "^1.0.4" + } } } }, @@ -13215,6 +12876,11 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" + }, "useragent": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", @@ -13382,9 +13048,9 @@ } }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "optional": true }, "is-binary-path": { @@ -13546,62 +13212,15 @@ "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "optional": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "optional": true } } }, @@ -13685,33 +13304,14 @@ } } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "optional": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, "is-number": { @@ -13833,10 +13433,20 @@ "yargs": "^8.0.2" }, "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha512-GKp5tQ8h0KMPWIYGRHHXI1s5tUpZixZ3IHF2jAu42wSCf6In/G873s6/y4DdKdhWvzhu1T6mE1JgvnhAKqyYYQ==", + "requires": { + "acorn": "^4.0.3" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha512-fu2ygVGuMmlzG8ZeRJ0bvR41nsAkxxhbyk8bZ1SS521Z7vmgJFTQQlfz/Mp/nJexGBz+v8sC9bM6+lNgskt4Ug==" + } + } }, "ansi-regex": { "version": "3.0.1", @@ -13880,6 +13490,14 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==" }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -14168,6 +13786,13 @@ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } } }, "expand-brackets": { @@ -14208,61 +13833,14 @@ "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -14349,30 +13927,21 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "requires": { - "kind-of": "^6.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, - "is-data-descriptor": { + "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "number-is-nan": "^1.0.0" } }, "is-number": { @@ -14423,6 +13992,11 @@ "to-regex": "^3.0.2" } }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -14441,6 +14015,16 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -14609,18 +14193,48 @@ "is-symbol": "^1.0.3" } }, + "which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "requires": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, "which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "requires": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" @@ -14653,49 +14267,47 @@ } }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, - "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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "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==", "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "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==" + }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" } } } @@ -14740,105 +14352,30 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" } } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } - } + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, "yeast": { "version": "0.1.2", diff --git a/package.json b/package.json index 417fd23a5..54901a7df 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "@types/react": "^17.0.2", "@types/react-datepicker": "^4.11.2", "@types/react-dom": "^17.0.1", - "@types/react-redux": "^5.0.7", "@types/react-toggle": "^4.0.3", "@types/redux-logger": "^3.0.9", "@types/sinon": "^10.0.16", @@ -77,15 +76,15 @@ "react": "^17.0.2", "react-datepicker": "4.7.0", "react-dom": "^17.0.2", - "react-redux": "5.0.7", + "react-redux": "8.1.3", "react-router-dom": "^6.3.0", "react-sortable-hoc": "0.8.3", "react-test-renderer": "^16.14.0", "react-toggle": "4.0.2", "reactstrap": "9.0.1", - "redux": "3.7.2", + "redux": "4.2.1", "redux-logger": "3.0.6", - "redux-thunk": "2.3.0", + "redux-thunk": "2.4.2", "reselect": "3.0.1", "sass-loader": "^6.0.6", "sinon": "^4.0.0", diff --git a/webpack.design.js b/webpack.design.js index 8b375ee3e..eca25f8ec 100644 --- a/webpack.design.js +++ b/webpack.design.js @@ -27,17 +27,16 @@ const config = { module: { rules: [ { - test: /\.jsx?$/, + test: /\.(ts|tsx|js|jsx)$/, include: [ path.resolve(__dirname, 'design_app/src'), path.resolve(__dirname, 'assets'), path.resolve(__dirname, 'node_modules/bootstrap'), path.resolve(process.cwd(), 'node_modules/bootstrap'), ], - loader: 'babel-loader', + loader: 'ts-loader', options: { - presets: ['es2015', 'react'], - plugins: ['transform-object-rest-spread'], + transpileOnly: true, }, }, { @@ -61,9 +60,6 @@ const config = { 'file-loader', ], }, - { - test: /\.([cm]?ts|tsx)$/, loader: "ts-loader", - }, ], }, resolve: { From 1cec47c53dabc8fdb71fe5d624d8889f5025d769 Mon Sep 17 00:00:00 2001 From: Nikola Stojanovic <68916411+dzonidoo@users.noreply.github.com> Date: Fri, 24 Nov 2023 13:46:55 +0100 Subject: [PATCH 14/22] Translating the search tips (#663) * added fy transaltion * change after review * changed file name --- .../templates/search_tips_advanced.fi.html | 5 ++++ .../templates/search_tips_regular.fi.html | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 newsroom/templates/search_tips_advanced.fi.html create mode 100644 newsroom/templates/search_tips_regular.fi.html diff --git a/newsroom/templates/search_tips_advanced.fi.html b/newsroom/templates/search_tips_advanced.fi.html new file mode 100644 index 000000000..bf11ed84c --- /dev/null +++ b/newsroom/templates/search_tips_advanced.fi.html @@ -0,0 +1,5 @@ +
+
+

Tarkennettu sanahaku ohjaa hakuasi. Hakusivulta näet tarkemmat ohjeet ja vinkit hakuun.

+
+
diff --git a/newsroom/templates/search_tips_regular.fi.html b/newsroom/templates/search_tips_regular.fi.html new file mode 100644 index 000000000..8d60e4171 --- /dev/null +++ b/newsroom/templates/search_tips_regular.fi.html @@ -0,0 +1,25 @@ +
+
+

Yleistä Mediapankin hauista

+

Mediapankki käyttää boolean-hakua, jossa erilaisia komentoja ja hakutermejä yhdistelemällä voi hakea juttujen otsikoista, leipätekstistä ja metatiedoista.

+ +

Jos hakukenttään kirjoittaa useamman kuin yhden sanan tai hakutermin, hakutuloksina esitetään jutut, joissa ne kaikki esiintyvät.

+ +

Mediapankin haku on hyvin tarkka siitä, että merkit ovat oikeanlaisia, joten jos haku ei anna odotettuja tuloksia, kokeile uudestaan näiden ohjeiden avulla. Esimerkiksi lainausmerkkien pitää olla juuri oikeanlaiset eli kuten tässä ohjeessa.

+
+
+
+

Tärkeimmät hakutermit

+

* = katkaisee sanan, jotta voidaan ottaa huomioon taivutusmuodot. Esimerkiksi älä hae korhonen vaan korho*. Voit käyttää myös tähteä sanan sisällä. Jos esimerkiksi et muista, oliko haettava henkilö Silvennoinen vai Silventoinen, voit hakea Silven*oi*

+ +

"" = lainausmerkkien avulla voit tehdä kahden tai useamman sanan yhdistelmästä täsmällisen termin jota haetaan. Esimerkiksi voit hakea "eduskunnan kahvila", ei eduskunnan kahvila. Huom! Tähtisymboli ei toimi sitaattimerkkien sisällä.

+ +

AND tarkoittaa, että kaikkien hakutermien pitää olla haussa mukana. Monesti AND on tarpeeton Mediapankissa, koska välilyönti vastaa AND-termiä, mutta pitkissä ja monimutkaisissa hakulausekkeissa AND voi auttaa hahmottamaan, mitä oikeastaan on hakemassa.

+ +

OR tarkoittaa, että hakutulokseksi päätymiseen riittää, että joku hakutermeistä osuu.

+ +

NOT tarkoittaa, että jutut joissa on tämä hakutermi, eivät tule mukaan hakutuloksiin.

+ +

Lisää hakuohjeita: stt.fi/ajankohtaista-tietoa-media-asiakkaille/stt-mediapankki/

+
+
From e7231759935574c4088bd3df06a44fea45308707 Mon Sep 17 00:00:00 2001 From: Nikola Stojanovic <68916411+dzonidoo@users.noreply.github.com> Date: Fri, 24 Nov 2023 13:47:16 +0100 Subject: [PATCH 15/22] When selecting a location filter drop down in the calendar the page goes blank (#665) fixed filter location --- .../SearchResultsBar/SearchResultsFiltersRow.tsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/assets/search/components/SearchResultsBar/SearchResultsFiltersRow.tsx b/assets/search/components/SearchResultsBar/SearchResultsFiltersRow.tsx index 6037e96be..efb9cb444 100644 --- a/assets/search/components/SearchResultsBar/SearchResultsFiltersRow.tsx +++ b/assets/search/components/SearchResultsBar/SearchResultsFiltersRow.tsx @@ -85,10 +85,15 @@ function SearchResultsFiltersRow({ { + if (filter === 'coverage_status') { + return getActiveFilterLabel(agendaCoverageStatusFilter, activeFilter); + } else if (filter === 'location') { + return activeFilter?.[filter as IActiveFilterUnionType].name; + } else { + return activeFilter?.[filter as IActiveFilterUnionType]; + } + })()} readOnly={readonly} onClick={(event) => { event.preventDefault(); From 4d8dd2a81b25dc5f9aa6e44b5d86d833842c6b5f Mon Sep 17 00:00:00 2001 From: Nikola Stojanovic <68916411+dzonidoo@users.noreply.github.com> Date: Fri, 24 Nov 2023 13:48:32 +0100 Subject: [PATCH 16/22] Refresh widget - new items indicator is missing when new items arrive to Newshub (#666) refresh icon --- assets/reducers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/reducers.ts b/assets/reducers.ts index 2cc5e6905..06b5108b2 100644 --- a/assets/reducers.ts +++ b/assets/reducers.ts @@ -361,7 +361,7 @@ export function defaultReducer(state: any = {}, action: any) { } case SET_NEW_ITEM: { - const item = state.data || {}; + const item = action.data || {}; if (!item.nextversion && !state.itemsById[item._id]) { return { From c6975634c66a160c1ead0f3308d319ceb1083573 Mon Sep 17 00:00:00 2001 From: Darko Tomic Date: Fri, 24 Nov 2023 13:49:29 +0100 Subject: [PATCH 17/22] STTNHUB-288 (#667) --- assets/agenda/components/AgendaApp.tsx | 2 +- .../components/AgendaDateNavigation.tsx | 2 +- assets/styles/index.scss | 89 +++++++++---------- design_app/src/components/MainLayout.jsx | 2 +- newsroom/templates/base_layout.html | 2 +- 5 files changed, 45 insertions(+), 52 deletions(-) diff --git a/assets/agenda/components/AgendaApp.tsx b/assets/agenda/components/AgendaApp.tsx index 67e1fae84..682827a86 100644 --- a/assets/agenda/components/AgendaApp.tsx +++ b/assets/agenda/components/AgendaApp.tsx @@ -170,7 +170,7 @@ class AgendaApp extends BaseApp { -
diff --git a/newsroom/templates/layout_wire.html b/newsroom/templates/layout_wire.html index 4878c5e34..50695e932 100644 --- a/newsroom/templates/layout_wire.html +++ b/newsroom/templates/layout_wire.html @@ -11,8 +11,7 @@
- - {% block contentMain %}{% endblock %} + {% block contentMain %}{% endblock %} {% block sidebar %}{% endblock %}
diff --git a/newsroom/templates/login_form.html b/newsroom/templates/login_form.html index f5126ca98..2a2d10419 100644 --- a/newsroom/templates/login_form.html +++ b/newsroom/templates/login_form.html @@ -1,6 +1,10 @@
{{ form.csrf_token }} +
+ {{ form.firebase_status(type="hidden", id="firebase-status") }} +
+ {% include "form_alerts.html" %}
From a4d1ace66fa9c5b02a2a460c5570e24cc1307f24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ja=C5=A1ek?= Date: Tue, 28 Nov 2023 10:44:49 +0100 Subject: [PATCH 22/22] fix picture text card display error with missing picture (#672) * fix picture text card display error with missing picture CPCN-488 * add missing types --- .../components/cards/render/PictureTextCard.tsx | 16 ++++++++++++---- assets/components/cards/utils.ts | 4 ++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/assets/components/cards/render/PictureTextCard.tsx b/assets/components/cards/render/PictureTextCard.tsx index 999c2278b..5c3752343 100644 --- a/assets/components/cards/render/PictureTextCard.tsx +++ b/assets/components/cards/render/PictureTextCard.tsx @@ -4,19 +4,27 @@ import CardBody from './CardBody'; import CardFooter from './CardFooter'; import CardRow from './CardRow'; import {ICardProps} from '../utils'; +import {IArticle, IListConfig} from 'interfaces'; -const getPictureTextPanel = (item: any, picture: any, openItem: any, withPictures: any, cardId: any, listConfig: any) => { - const rendition = withPictures && getThumbnailRendition(picture); +const getPictureTextPanel = ( + item: IArticle, + picture: IArticle | null, + openItem: ICardProps['openItem'], + withPictures: boolean, + cardId: ICardProps['cardId'], + listConfig: IListConfig, +) => { + const rendition = withPictures && picture != null && getThumbnailRendition(picture); const imageUrl = rendition && rendition.href; const caption = rendition && getCaption(picture); return (
openItem(item, cardId)}> - {rendition && + {(rendition && imageUrl) ? (
{caption}
- } + ) : null} ; title: string; id: string; - openItem: any; + openItem: (item: IArticle, cardId: string) => void; isActive: boolean; cardId: string; listConfig: IListConfig;