diff --git a/.env.dev.example b/.env.dev.example
index 22e12de1..0a9865cd 100644
--- a/.env.dev.example
+++ b/.env.dev.example
@@ -16,6 +16,7 @@ DEFAULT_LANGUAGE="English"
MEDIA_ROOT=images/
+# Database configuration
PGPORT=5432
POSTGRES_PASSWORD=securedbypassword123
POSTGRES_USER=fedireads
@@ -26,22 +27,31 @@ POSTGRES_HOST=db
MAX_STREAM_LENGTH=200
REDIS_ACTIVITY_HOST=redis_activity
REDIS_ACTIVITY_PORT=6379
-#REDIS_ACTIVITY_PASSWORD=redispassword345
+REDIS_ACTIVITY_PASSWORD=redispassword345
# Redis as celery broker
REDIS_BROKER_PORT=6379
-#REDIS_BROKER_PASSWORD=redispassword123
+REDIS_BROKER_PASSWORD=redispassword123
+# Monitoring for celery
FLOWER_PORT=8888
-#FLOWER_USER=mouse
-#FLOWER_PASSWORD=changeme
+FLOWER_USER=mouse
+FLOWER_PASSWORD=changeme
+# Email config
EMAIL_HOST=smtp.mailgun.org
EMAIL_PORT=587
EMAIL_HOST_USER=mail@your.domain.here
EMAIL_HOST_PASSWORD=emailpassword123
EMAIL_USE_TLS=true
EMAIL_USE_SSL=false
+EMAIL_SENDER_NAME=admin
+# defaults to DOMAIN
+EMAIL_SENDER_DOMAIN=
+
+# Query timeouts
+SEARCH_TIMEOUT=15
+QUERY_TIMEOUT=5
# Thumbnails Generation
ENABLE_THUMBNAIL_GENERATION=false
diff --git a/.env.prod.example b/.env.prod.example
index 2e0ced5e..3c935287 100644
--- a/.env.prod.example
+++ b/.env.prod.example
@@ -16,6 +16,7 @@ DEFAULT_LANGUAGE="English"
MEDIA_ROOT=images/
+# Database configuration
PGPORT=5432
POSTGRES_PASSWORD=securedbypassword123
POSTGRES_USER=fedireads
@@ -32,16 +33,25 @@ REDIS_ACTIVITY_PASSWORD=redispassword345
REDIS_BROKER_PORT=6379
REDIS_BROKER_PASSWORD=redispassword123
+# Monitoring for celery
FLOWER_PORT=8888
FLOWER_USER=mouse
FLOWER_PASSWORD=changeme
+# Email config
EMAIL_HOST=smtp.mailgun.org
EMAIL_PORT=587
EMAIL_HOST_USER=mail@your.domain.here
EMAIL_HOST_PASSWORD=emailpassword123
EMAIL_USE_TLS=true
EMAIL_USE_SSL=false
+EMAIL_SENDER_NAME=admin
+# defaults to DOMAIN
+EMAIL_SENDER_DOMAIN=
+
+# Query timeouts
+SEARCH_TIMEOUT=15
+QUERY_TIMEOUT=5
# Thumbnails Generation
ENABLE_THUMBNAIL_GENERATION=false
diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml
index 03875193..00e08dad 100644
--- a/.github/workflows/django-tests.yml
+++ b/.github/workflows/django-tests.yml
@@ -46,6 +46,8 @@ jobs:
POSTGRES_HOST: 127.0.0.1
CELERY_BROKER: ""
REDIS_BROKER_PORT: 6379
+ REDIS_BROKER_PASSWORD: beep
+ USE_DUMMY_CACHE: true
FLOWER_PORT: 8888
EMAIL_HOST: "smtp.mailgun.org"
EMAIL_PORT: 587
diff --git a/.stylelintrc.js b/.stylelintrc.js
index eadc4a89..68c68f89 100644
--- a/.stylelintrc.js
+++ b/.stylelintrc.js
@@ -12,6 +12,9 @@ module.exports = {
"custom-properties",
"declarations"
],
- "indentation": 4
+ "indentation": 4,
+ "property-no-vendor-prefix": null,
+ "color-function-notation": null,
+ "declaration-block-no-redundant-longhand-properties": null,
}
};
diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py
index 20a17526..5ed57df1 100644
--- a/bookwyrm/connectors/abstract_connector.py
+++ b/bookwyrm/connectors/abstract_connector.py
@@ -35,7 +35,7 @@ class AbstractMinimalConnector(ABC):
for field in self_fields:
setattr(self, field, getattr(info, field))
- def search(self, query, min_confidence=None, timeout=5):
+ def search(self, query, min_confidence=None, timeout=settings.QUERY_TIMEOUT):
"""free text search"""
params = {}
if min_confidence:
@@ -52,12 +52,13 @@ class AbstractMinimalConnector(ABC):
results.append(self.format_search_result(doc))
return results
- def isbn_search(self, query):
+ def isbn_search(self, query, timeout=settings.QUERY_TIMEOUT):
"""isbn search"""
params = {}
data = self.get_search_data(
f"{self.isbn_search_url}{query}",
params=params,
+ timeout=timeout,
)
results = []
diff --git a/bookwyrm/connectors/connector_manager.py b/bookwyrm/connectors/connector_manager.py
index 45530cd6..3bdd5cb4 100644
--- a/bookwyrm/connectors/connector_manager.py
+++ b/bookwyrm/connectors/connector_manager.py
@@ -11,6 +11,7 @@ from django.db.models import signals
from requests import HTTPError
from bookwyrm import book_search, models
+from bookwyrm.settings import SEARCH_TIMEOUT
from bookwyrm.tasks import app
logger = logging.getLogger(__name__)
@@ -30,7 +31,6 @@ def search(query, min_confidence=0.1, return_first=False):
isbn = re.sub(r"[\W_]", "", query)
maybe_isbn = len(isbn) in [10, 13] # ISBN10 or ISBN13
- timeout = 15
start_time = datetime.now()
for connector in get_connectors():
result_set = None
@@ -62,7 +62,7 @@ def search(query, min_confidence=0.1, return_first=False):
"results": result_set,
}
)
- if (datetime.now() - start_time).seconds >= timeout:
+ if (datetime.now() - start_time).seconds >= SEARCH_TIMEOUT:
break
if return_first:
diff --git a/bookwyrm/emailing.py b/bookwyrm/emailing.py
index 08fd9ef8..efef1263 100644
--- a/bookwyrm/emailing.py
+++ b/bookwyrm/emailing.py
@@ -69,7 +69,7 @@ def format_email(email_name, data):
def send_email(recipient, subject, html_content, text_content):
"""use a task to send the email"""
email = EmailMultiAlternatives(
- subject, text_content, settings.DEFAULT_FROM_EMAIL, [recipient]
+ subject, text_content, settings.EMAIL_SENDER, [recipient]
)
email.attach_alternative(html_content, "text/html")
email.send()
diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py
index 5cc11afd..5edac57d 100644
--- a/bookwyrm/models/author.py
+++ b/bookwyrm/models/author.py
@@ -1,6 +1,8 @@
""" database schema for info about authors """
import re
from django.contrib.postgres.indexes import GinIndex
+from django.core.cache import cache
+from django.core.cache.utils import make_template_fragment_key
from django.db import models
from bookwyrm import activitypub
@@ -34,6 +36,17 @@ class Author(BookDataModel):
)
bio = fields.HtmlField(null=True, blank=True)
+ def save(self, *args, **kwargs):
+ """clear related template caches"""
+ # clear template caches
+ if self.id:
+ cache_keys = [
+ make_template_fragment_key("titleby", [book])
+ for book in self.book_set.values_list("id", flat=True)
+ ]
+ cache.delete_many(cache_keys)
+ return super().save(*args, **kwargs)
+
@property
def isni_link(self):
"""generate the url from the isni id"""
diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py
index 0a551bf2..a9dd9508 100644
--- a/bookwyrm/models/book.py
+++ b/bookwyrm/models/book.py
@@ -3,6 +3,8 @@ import re
from django.contrib.postgres.search import SearchVectorField
from django.contrib.postgres.indexes import GinIndex
+from django.core.cache import cache
+from django.core.cache.utils import make_template_fragment_key
from django.db import models, transaction
from django.db.models import Prefetch
from django.dispatch import receiver
@@ -185,6 +187,11 @@ class Book(BookDataModel):
"""can't be abstract for query reasons, but you shouldn't USE it"""
if not isinstance(self, Edition) and not isinstance(self, Work):
raise ValueError("Books should be added as Editions or Works")
+
+ # clear template caches
+ cache_key = make_template_fragment_key("titleby", [self.id])
+ cache.delete(cache_key)
+
return super().save(*args, **kwargs)
def get_remote_id(self):
diff --git a/bookwyrm/models/relationship.py b/bookwyrm/models/relationship.py
index fc7a9df8..03417454 100644
--- a/bookwyrm/models/relationship.py
+++ b/bookwyrm/models/relationship.py
@@ -1,5 +1,7 @@
""" defines relationships between users """
from django.apps import apps
+from django.core.cache import cache
+from django.core.cache.utils import make_template_fragment_key
from django.db import models, transaction, IntegrityError
from django.db.models import Q
@@ -36,6 +38,20 @@ class UserRelationship(BookWyrmModel):
"""the remote user needs to recieve direct broadcasts"""
return [u for u in [self.user_subject, self.user_object] if not u.local]
+ def save(self, *args, **kwargs):
+ """clear the template cache"""
+ # invalidate the template cache
+ cache_keys = [
+ make_template_fragment_key(
+ "follow_button", [self.user_subject.id, self.user_object.id]
+ ),
+ make_template_fragment_key(
+ "follow_button", [self.user_object.id, self.user_subject.id]
+ ),
+ ]
+ cache.delete_many(cache_keys)
+ super().save(*args, **kwargs)
+
class Meta:
"""relationships should be unique"""
diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py
index c7c0a425..ee138d97 100644
--- a/bookwyrm/models/status.py
+++ b/bookwyrm/models/status.py
@@ -82,6 +82,7 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel):
if not self.reply_parent:
self.thread_id = self.id
+
super().save(broadcast=False, update_fields=["thread_id"])
def delete(self, *args, **kwargs): # pylint: disable=unused-argument
diff --git a/bookwyrm/redis_store.py b/bookwyrm/redis_store.py
index 78f373a2..595868ff 100644
--- a/bookwyrm/redis_store.py
+++ b/bookwyrm/redis_store.py
@@ -5,7 +5,10 @@ import redis
from bookwyrm import settings
r = redis.Redis(
- host=settings.REDIS_ACTIVITY_HOST, port=settings.REDIS_ACTIVITY_PORT, db=0
+ host=settings.REDIS_ACTIVITY_HOST,
+ port=settings.REDIS_ACTIVITY_PORT,
+ password=settings.REDIS_ACTIVITY_PASSWORD,
+ db=0,
)
diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py
index f2068a16..5920ed80 100644
--- a/bookwyrm/settings.py
+++ b/bookwyrm/settings.py
@@ -24,7 +24,9 @@ EMAIL_HOST_USER = env("EMAIL_HOST_USER")
EMAIL_HOST_PASSWORD = env("EMAIL_HOST_PASSWORD")
EMAIL_USE_TLS = env.bool("EMAIL_USE_TLS", True)
EMAIL_USE_SSL = env.bool("EMAIL_USE_SSL", False)
-DEFAULT_FROM_EMAIL = f"admin@{DOMAIN}"
+EMAIL_SENDER_NAME = env("EMAIL_SENDER_NAME", "admin")
+EMAIL_SENDER_DOMAIN = env("EMAIL_SENDER_NAME", DOMAIN)
+EMAIL_SENDER = f"{EMAIL_SENDER_NAME}@{EMAIL_SENDER_DOMAIN}"
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -119,6 +121,34 @@ STREAMS = [
{"key": "books", "name": _("Books Timeline"), "shortname": _("Books")},
]
+# Search configuration
+# total time in seconds that the instance will spend searching connectors
+SEARCH_TIMEOUT = int(env("SEARCH_TIMEOUT", 15))
+# timeout for a query to an individual connector
+QUERY_TIMEOUT = int(env("QUERY_TIMEOUT", 5))
+
+# Redis cache backend
+if env("USE_DUMMY_CACHE", False):
+ CACHES = {
+ "default": {
+ "BACKEND": "django.core.cache.backends.dummy.DummyCache",
+ }
+ }
+else:
+ # pylint: disable=line-too-long
+ CACHES = {
+ "default": {
+ "BACKEND": "django_redis.cache.RedisCache",
+ "LOCATION": f"redis://:{REDIS_ACTIVITY_PASSWORD}@{REDIS_ACTIVITY_HOST}:{REDIS_ACTIVITY_PORT}/0",
+ "OPTIONS": {
+ "CLIENT_CLASS": "django_redis.client.DefaultClient",
+ },
+ }
+ }
+
+ SESSION_ENGINE = "django.contrib.sessions.backends.cache"
+ SESSION_CACHE_ALIAS = "default"
+
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css
index 15324a14..4d960734 100644
--- a/bookwyrm/static/css/bookwyrm.css
+++ b/bookwyrm/static/css/bookwyrm.css
@@ -183,7 +183,7 @@ button .button-invisible-overlay {
align-items: center;
flex-direction: column;
justify-content: center;
- background: rgba(0, 0, 0, 0.66);
+ background: rgba(0, 0, 0, 66%);
color: white;
opacity: 0;
transition: opacity 0.2s ease;
@@ -198,7 +198,7 @@ button:focus-visible .button-invisible-overlay {
/** File input styles
******************************************************************************/
-input[type=file]::file-selector-button {
+input[type="file"]::file-selector-button {
-moz-appearance: none;
-webkit-appearance: none;
background-color: #fff;
@@ -219,7 +219,7 @@ input[type=file]::file-selector-button {
white-space: nowrap;
}
-input[type=file]::file-selector-button:hover {
+input[type="file"]::file-selector-button:hover {
border-color: #b5b5b5;
color: #363636;
}
@@ -279,7 +279,7 @@ details.dropdown .dropdown-menu a:focus-visible {
@media only screen and (max-width: 768px) {
details.dropdown[open] summary.dropdown-trigger::before {
- background-color: rgba(0, 0, 0, 0.5);
+ background-color: rgba(0, 0, 0, 50%);
z-index: 30;
}
@@ -305,14 +305,14 @@ details.dropdown .dropdown-menu a:focus-visible {
******************************************************************************/
details.details-panel {
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 10%);
transition: box-shadow 0.2s ease;
padding: 0.75rem;
}
details[open].details-panel,
details.details-panel:hover {
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 20%);
}
details.details-panel summary {
@@ -333,7 +333,7 @@ details[open].details-panel summary .details-close {
@media only screen and (min-width: 769px) {
.details-panel .filters-field:not(:last-child) {
- border-right: 1px solid rgba(0, 0, 0, 0.1);
+ border-right: 1px solid rgba(0, 0, 0, 10%);
margin-top: 0.75rem;
margin-bottom: 0.75rem;
padding-top: 0.25rem;
@@ -347,7 +347,7 @@ details[open].details-panel summary .details-close {
/** @todo Replace icons with SVG symbols.
@see https://www.youtube.com/watch?v=9xXBYcWgCHA */
.shelf-option:disabled > *::after {
- font-family: "icomoon"; /* stylelint-disable font-family-no-missing-generic-family-keyword */
+ font-family: icomoon; /* stylelint-disable font-family-no-missing-generic-family-keyword */
content: "\e919"; /* icon-check */
margin-left: 0.5em;
}
@@ -355,14 +355,14 @@ details[open].details-panel summary .details-close {
/** Toggles
******************************************************************************/
-.toggle-button[aria-pressed=true],
-.toggle-button[aria-pressed=true]:hover {
- background-color: hsl(171, 100%, 41%);
+.toggle-button[aria-pressed="true"],
+.toggle-button[aria-pressed="true"]:hover {
+ background-color: hsl(171deg, 100%, 41%);
color: white;
}
-.hide-active[aria-pressed=true],
-.hide-inactive[aria-pressed=false] {
+.hide-active[aria-pressed="true"],
+.hide-inactive[aria-pressed="false"] {
display: none;
}
@@ -419,36 +419,36 @@ details[open].details-panel summary .details-close {
/* All stars are visually filled by default. */
.form-rate-stars .icon::before {
- content: '\e9d9'; /* icon-star-full */
+ content: "\e9d9"; /* icon-star-full */
}
/* Icons directly following half star inputs are marked as half */
.form-rate-stars input.half:checked ~ .icon::before {
- content: '\e9d8'; /* icon-star-half */
+ content: "\e9d8"; /* icon-star-half */
}
/* stylelint-disable no-descending-specificity */
.form-rate-stars input.half:checked + input + .icon:hover::before {
- content: '\e9d8' !important; /* icon-star-half */
+ content: "\e9d8" !important; /* icon-star-half */
}
/* Icons directly following half check inputs that follow the checked input are emptied. */
.form-rate-stars input.half:checked + input + .icon ~ .icon::before {
- content: '\e9d7'; /* icon-star-empty */
+ content: "\e9d7"; /* icon-star-empty */
}
/* Icons directly following inputs that follow the checked input are emptied. */
.form-rate-stars input:checked ~ input + .icon::before {
- content: '\e9d7'; /* icon-star-empty */
+ content: "\e9d7"; /* icon-star-empty */
}
/* When a label is hovered, repeat the fill-all-then-empty-following pattern. */
.form-rate-stars:hover .icon.icon::before {
- content: '\e9d9' !important; /* icon-star-full */
+ content: "\e9d9" !important; /* icon-star-full */
}
.form-rate-stars .icon:hover ~ .icon::before {
- content: '\e9d7' !important; /* icon-star-empty */
+ content: "\e9d7" !important; /* icon-star-empty */
}
/** Book covers
@@ -556,7 +556,7 @@ details[open].details-panel summary .details-close {
.quote > blockquote::before,
.quote > blockquote::after {
- font-family: 'icomoon';
+ font-family: icomoon;
position: absolute;
}
diff --git a/bookwyrm/suggested_users.py b/bookwyrm/suggested_users.py
index 5769ca8b..b30e8412 100644
--- a/bookwyrm/suggested_users.py
+++ b/bookwyrm/suggested_users.py
@@ -29,6 +29,7 @@ class SuggestedUsers(RedisStore):
def get_counts_from_rank(self, rank): # pylint: disable=no-self-use
"""calculate mutuals count and shared books count from rank"""
+ # pylint: disable=c-extension-no-member
return {
"mutuals": math.floor(rank),
# "shared_books": int(1 / (-1 * (rank % 1 - 1))) - 1,
@@ -94,7 +95,7 @@ class SuggestedUsers(RedisStore):
).annotate(mutuals=Case(*annotations, output_field=IntegerField(), default=0))
if local:
users = users.filter(local=True)
- return users[:5]
+ return users.order_by("-mutuals")[:5]
def get_annotated_users(viewer, *args, **kwargs):
@@ -112,16 +113,17 @@ def get_annotated_users(viewer, *args, **kwargs):
),
distinct=True,
),
- # shared_books=Count(
- # "shelfbook",
- # filter=Q(
- # ~Q(id=viewer.id),
- # shelfbook__book__parent_work__in=[
- # s.book.parent_work for s in viewer.shelfbook_set.all()
- # ],
- # ),
- # distinct=True,
- # ),
+ # pylint: disable=line-too-long
+ # shared_books=Count(
+ # "shelfbook",
+ # filter=Q(
+ # ~Q(id=viewer.id),
+ # shelfbook__book__parent_work__in=[
+ # s.book.parent_work for s in viewer.shelfbook_set.all()
+ # ],
+ # ),
+ # distinct=True,
+ # ),
)
)
diff --git a/bookwyrm/templates/annual_summary/layout.html b/bookwyrm/templates/annual_summary/layout.html
index ab25458c..c333c26d 100644
--- a/bookwyrm/templates/annual_summary/layout.html
+++ b/bookwyrm/templates/annual_summary/layout.html
@@ -109,7 +109,7 @@
{% if not books %}
-
{% blocktrans %}Sadly {{ display_name }} didn’t finish any book in {{ year }}{% endblocktrans %}
+ {% blocktrans %}Sadly {{ display_name }} didn’t finish any books in {{ year }}{% endblocktrans %}
{% else %}
diff --git a/bookwyrm/templates/directory/sort_filter.html b/bookwyrm/templates/directory/sort_filter.html
index c7c19f6f..34436601 100644
--- a/bookwyrm/templates/directory/sort_filter.html
+++ b/bookwyrm/templates/directory/sort_filter.html
@@ -3,10 +3,12 @@
{% block filter %}
{% trans "Order by" %}
-
-
- {% trans "Recently active" %}
- {% trans "Suggested" %}
-
+
+
+
+ {% trans "Recently active" %}
+ {% trans "Suggested" %}
+
+
{% endblock %}
diff --git a/bookwyrm/templates/feed/layout.html b/bookwyrm/templates/feed/layout.html
index 6e7ec849..5697f266 100644
--- a/bookwyrm/templates/feed/layout.html
+++ b/bookwyrm/templates/feed/layout.html
@@ -8,82 +8,7 @@
{% if user.is_authenticated %}
-
- {% trans "Your Books" %}
- {% if not suggested_books %}
- {% trans "There are no books here right now! Try searching for a book to get started" %}
- {% else %}
- {% with active_book=request.GET.book %}
-
-
- {% for shelf in suggested_books %}
- {% with shelf_counter=forloop.counter %}
- {% for book in shelf.books %}
-
-
-
-
- {% include 'snippets/create_status.html' with book=book %}
-
-
- {% endfor %}
- {% endwith %}
- {% endfor %}
-
- {% endwith %}
- {% endif %}
-
-
+ {% include "feed/suggested_books.html" %}
{% if goal %}
diff --git a/bookwyrm/templates/feed/suggested_books.html b/bookwyrm/templates/feed/suggested_books.html
new file mode 100644
index 00000000..899767d1
--- /dev/null
+++ b/bookwyrm/templates/feed/suggested_books.html
@@ -0,0 +1,79 @@
+{% load i18n %}
+{% load bookwyrm_tags %}
+
+{% suggested_books as suggested_books %}
+
+ {% trans "Your Books" %}
+ {% if not suggested_books %}
+ {% trans "There are no books here right now! Try searching for a book to get started" %}
+ {% else %}
+ {% with active_book=request.GET.book %}
+
+
+ {% for shelf in suggested_books %}
+ {% with shelf_counter=forloop.counter %}
+ {% for book in shelf.books %}
+
+
+
+
+ {% include 'snippets/create_status.html' with book=book %}
+
+
+ {% endfor %}
+ {% endwith %}
+ {% endfor %}
+
+ {% endwith %}
+ {% endif %}
+
diff --git a/bookwyrm/templates/landing/landing.html b/bookwyrm/templates/landing/landing.html
index d13cd582..759e8c61 100644
--- a/bookwyrm/templates/landing/landing.html
+++ b/bookwyrm/templates/landing/landing.html
@@ -1,11 +1,13 @@
{% extends 'landing/layout.html' %}
{% load i18n %}
+{% load cache %}
{% block panel %}
{% trans "Recent Books" %}
+{% cache 60 * 60 %}
-
+{% endcache %}
{% endblock %}
diff --git a/bookwyrm/templates/settings/users/server_filter.html b/bookwyrm/templates/settings/users/server_filter.html
index 2a4b89fd..5879f748 100644
--- a/bookwyrm/templates/settings/users/server_filter.html
+++ b/bookwyrm/templates/settings/users/server_filter.html
@@ -3,5 +3,7 @@
{% block filter %}
{% trans "Instance name" %}
-
+
+
+
{% endblock %}
diff --git a/bookwyrm/templates/settings/users/username_filter.html b/bookwyrm/templates/settings/users/username_filter.html
index d7da033a..343e61c8 100644
--- a/bookwyrm/templates/settings/users/username_filter.html
+++ b/bookwyrm/templates/settings/users/username_filter.html
@@ -3,6 +3,7 @@
{% block filter %}
{% trans "Username" %}
-
+
+
+
{% endblock %}
-
diff --git a/bookwyrm/templates/snippets/book_titleby.html b/bookwyrm/templates/snippets/book_titleby.html
index 6dbaeb26..5e35e36a 100644
--- a/bookwyrm/templates/snippets/book_titleby.html
+++ b/bookwyrm/templates/snippets/book_titleby.html
@@ -1,7 +1,11 @@
{% load i18n %}
{% load utilities %}
+{% load cache %}
{% spaceless %}
+{# 6 month cache #}
+{% cache 15552000 titleby book.id %}
+
{% if book.authors.exists %}
{% blocktrans trimmed with path=book.local_path title=book|book_title %}
{{ title }} by
@@ -10,4 +14,6 @@
{% else %}
{{ book|book_title }}
{% endif %}
+
+{% endcache %}
{% endspaceless %}
diff --git a/bookwyrm/templates/snippets/follow_button.html b/bookwyrm/templates/snippets/follow_button.html
index 530322b9..f7025bba 100644
--- a/bookwyrm/templates/snippets/follow_button.html
+++ b/bookwyrm/templates/snippets/follow_button.html
@@ -1,4 +1,5 @@
{% load i18n %}
+
{% if request.user == user or not request.user.is_authenticated %}
{% elif user in request.user.blocks.all %}
{% include 'snippets/block_button.html' with blocks=True %}
diff --git a/bookwyrm/templates/snippets/status/headers/generatednote.html b/bookwyrm/templates/snippets/status/headers/generatednote.html
index cc684a5f..7fc635ab 100644
--- a/bookwyrm/templates/snippets/status/headers/generatednote.html
+++ b/bookwyrm/templates/snippets/status/headers/generatednote.html
@@ -1,3 +1,7 @@
+{% load cache %}
+
+{# Three day cache #}
+{% cache 259200 generated_note_header status.id %}
{% if status.content == 'wants to read' %}
{% include 'snippets/status/headers/to_read.html' with book=status.mention_books.first %}
{% elif status.content == 'finished reading' %}
@@ -7,3 +11,4 @@
{% else %}
{{ status.content }}
{% endif %}
+{% endcache %}
diff --git a/bookwyrm/templates/snippets/status/layout.html b/bookwyrm/templates/snippets/status/layout.html
index 93620a08..5cbcef20 100644
--- a/bookwyrm/templates/snippets/status/layout.html
+++ b/bookwyrm/templates/snippets/status/layout.html
@@ -30,38 +30,39 @@
{# nothing here #}
{% elif request.user.is_authenticated %}
-
-
-
-{% if not moderation_mode %}
-
-{% endif %}
+
+
+
+ {% if not moderation_mode %}
+
+ {% endif %}
{% else %}
-
{% endif %}
{% endblock %}
diff --git a/bookwyrm/templates/snippets/status/status_options.html b/bookwyrm/templates/snippets/status/status_options.html
index 854d4779..fdf8ac14 100644
--- a/bookwyrm/templates/snippets/status/status_options.html
+++ b/bookwyrm/templates/snippets/status/status_options.html
@@ -20,17 +20,21 @@
{% if status.status_type != 'GeneratedNote' and status.status_type != 'Rating' %}
-
- {% trans "Edit" %}
-
+
+
+ {% trans "Edit" %}
+
+
{% endif %}
{% else %}
{# things you can do to other people's statuses #}
-
- {% trans "Send direct message" %}
-
+
+
+ {% trans "Send direct message" %}
+
+
{% include 'snippets/report_button.html' with user=status.user status=status %}
diff --git a/bookwyrm/templatetags/bookwyrm_tags.py b/bookwyrm/templatetags/bookwyrm_tags.py
index 9d84d1ff..f173e052 100644
--- a/bookwyrm/templatetags/bookwyrm_tags.py
+++ b/bookwyrm/templatetags/bookwyrm_tags.py
@@ -3,6 +3,7 @@ from django import template
from django.db.models import Avg
from bookwyrm import models
+from bookwyrm.views.feed import get_suggested_books
register = template.Library()
@@ -62,6 +63,8 @@ def load_subclass(status):
return status.review
if hasattr(status, "comment"):
return status.comment
+ if hasattr(status, "generatednote"):
+ return status.generatednote
return status
@@ -115,3 +118,11 @@ def mutuals_count(context, user):
if not viewer.is_authenticated:
return None
return user.followers.filter(followers=viewer).count()
+
+
+@register.simple_tag(takes_context=True)
+def suggested_books(context):
+ """get books for suggested books panel"""
+ # this happens here instead of in the view so that the template snippet can
+ # be cached in the template
+ return get_suggested_books(context["request"].user)
diff --git a/bookwyrm/templatetags/interaction.py b/bookwyrm/templatetags/interaction.py
index 64c91f89..90309aaf 100644
--- a/bookwyrm/templatetags/interaction.py
+++ b/bookwyrm/templatetags/interaction.py
@@ -1,5 +1,7 @@
""" template filters for status interaction buttons """
from django import template
+from django.core.cache import cache
+
from bookwyrm import models
@@ -9,13 +11,21 @@ register = template.Library()
@register.filter(name="liked")
def get_user_liked(user, status):
"""did the given user fav a status?"""
- return models.Favorite.objects.filter(user=user, status=status).exists()
+ return cache.get_or_set(
+ f"fav-{user.id}-{status.id}",
+ models.Favorite.objects.filter(user=user, status=status).exists(),
+ 259200,
+ )
@register.filter(name="boosted")
def get_user_boosted(user, status):
"""did the given user fav a status?"""
- return status.boosters.filter(user=user).exists()
+ return cache.get_or_set(
+ f"boost-{user.id}-{status.id}",
+ status.boosters.filter(user=user).exists(),
+ 259200,
+ )
@register.filter(name="saved")
diff --git a/bookwyrm/tests/views/test_get_started.py b/bookwyrm/tests/views/test_get_started.py
index 9d022205..84ad966d 100644
--- a/bookwyrm/tests/views/test_get_started.py
+++ b/bookwyrm/tests/views/test_get_started.py
@@ -25,6 +25,13 @@ class GetStartedViews(TestCase):
local=True,
localname="mouse",
)
+ self.local_user = models.User.objects.create_user(
+ "rat@local.com",
+ "rat@rat.rat",
+ "password",
+ local=True,
+ localname="rat",
+ )
self.book = models.Edition.objects.create(
parent_work=models.Work.objects.create(title="hi"),
title="Example Edition",
@@ -121,14 +128,15 @@ class GetStartedViews(TestCase):
validate_html(result.render())
self.assertEqual(result.status_code, 200)
- @patch("bookwyrm.suggested_users.SuggestedUsers.get_suggestions")
def test_users_view_with_query(self, *_):
"""there are so many views, this just makes sure it LOADS"""
view = views.GetStartedUsers.as_view()
request = self.factory.get("?query=rat")
request.user = self.local_user
- result = view(request)
+ with patch("bookwyrm.suggested_users.SuggestedUsers.get_suggestions") as mock:
+ mock.return_value = models.User.objects.all()
+ result = view(request)
self.assertIsInstance(result, TemplateResponse)
validate_html(result.render())
diff --git a/bookwyrm/views/feed.py b/bookwyrm/views/feed.py
index f6f9fb37..e060ae61 100644
--- a/bookwyrm/views/feed.py
+++ b/bookwyrm/views/feed.py
@@ -223,7 +223,6 @@ def feed_page_data(user):
goal = models.AnnualGoal.objects.filter(user=user, year=timezone.now().year).first()
return {
- "suggested_books": get_suggested_books(user),
"goal": goal,
"goal_form": forms.GoalForm(),
}
diff --git a/bookwyrm/views/get_started.py b/bookwyrm/views/get_started.py
index 709b3754..48423b11 100644
--- a/bookwyrm/views/get_started.py
+++ b/bookwyrm/views/get_started.py
@@ -113,13 +113,16 @@ class GetStartedUsers(View):
.filter(
similarity__gt=0.5,
)
+ .exclude(
+ id=request.user.id,
+ )
.order_by("-similarity")[:5]
)
data = {"no_results": not user_results}
if user_results.count() < 5:
- user_results = list(user_results) + suggested_users.get_suggestions(
- request.user
+ user_results = list(user_results) + list(
+ suggested_users.get_suggestions(request.user)
)
data["suggested_users"] = user_results
diff --git a/bookwyrm/views/interaction.py b/bookwyrm/views/interaction.py
index 910360d7..f59271bd 100644
--- a/bookwyrm/views/interaction.py
+++ b/bookwyrm/views/interaction.py
@@ -1,6 +1,7 @@
""" boosts and favs """
-from django.db import IntegrityError
from django.contrib.auth.decorators import login_required
+from django.core.cache import cache
+from django.db import IntegrityError
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotFound
from django.shortcuts import redirect
from django.utils.decorators import method_decorator
@@ -17,6 +18,7 @@ class Favorite(View):
def post(self, request, status_id):
"""create a like"""
+ cache.delete(f"fav-{request.user.id}-{status_id}")
status = models.Status.objects.get(id=status_id)
try:
models.Favorite.objects.create(status=status, user=request.user)
@@ -35,6 +37,7 @@ class Unfavorite(View):
def post(self, request, status_id):
"""unlike a status"""
+ cache.delete(f"fav-{request.user.id}-{status_id}")
status = models.Status.objects.get(id=status_id)
try:
favorite = models.Favorite.objects.get(status=status, user=request.user)
@@ -54,6 +57,7 @@ class Boost(View):
def post(self, request, status_id):
"""boost a status"""
+ cache.delete(f"boost-{request.user.id}-{status_id}")
status = models.Status.objects.get(id=status_id)
# is it boostable?
if not status.boostable:
@@ -81,6 +85,7 @@ class Unboost(View):
def post(self, request, status_id):
"""boost a status"""
+ cache.delete(f"boost-{request.user.id}-{status_id}")
status = models.Status.objects.get(id=status_id)
boost = models.Boost.objects.filter(
boosted_status=status, user=request.user
diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py
index 35847558..c7eda10e 100644
--- a/bookwyrm/views/reading.py
+++ b/bookwyrm/views/reading.py
@@ -1,5 +1,7 @@
""" the good stuff! the books! """
from django.contrib.auth.decorators import login_required
+from django.core.cache import cache
+from django.core.cache.utils import make_template_fragment_key
from django.db import transaction
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotFound
from django.shortcuts import get_object_or_404, redirect
@@ -44,6 +46,13 @@ class ReadingStatus(View):
if not identifier:
return HttpResponseBadRequest()
+ # invalidate the template cache
+ cache_keys = [
+ make_template_fragment_key("shelve_button", [request.user.id, book_id]),
+ make_template_fragment_key("suggested_books", [request.user.id]),
+ ]
+ cache.delete_many(cache_keys)
+
desired_shelf = get_object_or_404(
models.Shelf, identifier=identifier, user=request.user
)
diff --git a/celerywyrm/settings.py b/celerywyrm/settings.py
index 05ffdcab..24729345 100644
--- a/celerywyrm/settings.py
+++ b/celerywyrm/settings.py
@@ -3,11 +3,15 @@
# pylint: disable=unused-wildcard-import
from bookwyrm.settings import *
-CELERY_BROKER_URL = "redis://:{}@redis_broker:{}/0".format(
- requests.utils.quote(env("REDIS_BROKER_PASSWORD", "")), env("REDIS_BROKER_PORT")
+REDIS_BROKER_PASSWORD = requests.utils.quote(env("REDIS_BROKER_PASSWORD", None))
+REDIS_BROKER_HOST = env("REDIS_BROKER_HOST", "redis_broker")
+REDIS_BROKER_PORT = env("REDIS_BROKER_PORT", 6379)
+
+CELERY_BROKER_URL = (
+ f"redis://:{REDIS_BROKER_PASSWORD}@{REDIS_BROKER_HOST}:{REDIS_BROKER_PORT}/0"
)
-CELERY_RESULT_BACKEND = "redis://:{}@redis_broker:{}/0".format(
- requests.utils.quote(env("REDIS_BROKER_PASSWORD", "")), env("REDIS_BROKER_PORT")
+CELERY_RESULT_BACKEND = (
+ f"redis://:{REDIS_BROKER_PASSWORD}@{REDIS_BROKER_HOST}:{REDIS_BROKER_PORT}/0"
)
CELERY_DEFAULT_QUEUE = "low_priority"
diff --git a/docker-compose.yml b/docker-compose.yml
index afa40b05..0f4e90e3 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -38,16 +38,17 @@ services:
- 8000:8000
redis_activity:
image: redis
- command: ["redis-server", "--appendonly", "yes"]
+ command: redis-server --requirepass ${REDIS_ACTIVITY_PASSWORD} --appendonly yes --port ${REDIS_ACTIVITY_PORT}
env_file: .env
networks:
- main
restart: on-failure
volumes:
+ - ./redis.conf:/etc/redis/redis.conf
- redis_activity_data:/data
redis_broker:
image: redis
- command: ["redis-server", "--appendonly", "yes"]
+ command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes --port ${REDIS_BROKER_PORT}
env_file: .env
ports:
- 6379:6379
@@ -55,6 +56,7 @@ services:
- main
restart: on-failure
volumes:
+ - ./redis.conf:/etc/redis/redis.conf
- redis_broker_data:/data
celery_worker:
env_file: .env
@@ -72,8 +74,10 @@ services:
restart: on-failure
flower:
build: .
- command: flower -A celerywyrm
+ command: celery -A celerywyrm flower
env_file: .env
+ ports:
+ - ${FLOWER_PORT}:${FLOWER_PORT}
volumes:
- .:/app
networks:
@@ -82,8 +86,6 @@ services:
- db
- redis_broker
restart: on-failure
- ports:
- - 8888:8888
volumes:
pgdata:
static_volume:
diff --git a/package.json b/package.json
index 3028f868..093e6ee9 100644
--- a/package.json
+++ b/package.json
@@ -5,13 +5,13 @@
"devDependencies": {
"eslint": "^7.23.0",
"prettier": "2.5.1",
- "stylelint": "^13.12.0",
- "stylelint-config-standard": "^21.0.0",
- "stylelint-order": "^4.1.0",
+ "stylelint": "^14.2.0",
+ "stylelint-config-standard": "^24.0.0",
+ "stylelint-order": "^5.0.0",
"watch": "^0.13.0"
},
"dependencies": {
"merge": "2.1.1",
- "postcss": "8.2.10"
+ "postcss": "8.2.13"
}
}
diff --git a/redis.conf b/redis.conf
new file mode 100644
index 00000000..2a417579
--- /dev/null
+++ b/redis.conf
@@ -0,0 +1,9 @@
+bind 127.0.0.1 ::1
+protected-mode yes
+port 6379
+
+rename-command FLUSHDB ""
+rename-command FLUSHALL ""
+rename-command DEBUG ""
+rename-command CONFIG ""
+rename-command SHUTDOWN ""
diff --git a/requirements.txt b/requirements.txt
index 9c22a6ed..534a0593 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,10 +1,10 @@
-celery==4.4.2
+celery==5.2.2
colorthief==0.2.1
Django==3.2.10
django-imagekit==4.1.0
django-model-utils==4.0.0
environs==9.3.4
-flower==0.9.4
+flower==1.0.0
Markdown==3.3.3
Pillow>=8.2.0
psycopg2==2.8.4
@@ -17,6 +17,7 @@ django-rename-app==0.1.2
pytz>=2021.1
boto3==1.17.88
django-storages==1.11.1
+django-redis==5.2.0
# Dev
black==21.4b0
diff --git a/yarn.lock b/yarn.lock
index 0de8a9d6..f6339073 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,153 +9,12 @@
dependencies:
"@babel/highlight" "^7.10.4"
-"@babel/code-frame@^7.12.13":
- "integrity" "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g=="
- "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz"
- "version" "7.12.13"
- dependencies:
- "@babel/highlight" "^7.12.13"
-
-"@babel/compat-data@^7.13.15":
- "integrity" "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q=="
- "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz"
- "version" "7.14.0"
-
-"@babel/core@^7.0.0", "@babel/core@>=7.9.0":
- "integrity" "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg=="
- "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz"
- "version" "7.14.3"
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@babel/generator" "^7.14.3"
- "@babel/helper-compilation-targets" "^7.13.16"
- "@babel/helper-module-transforms" "^7.14.2"
- "@babel/helpers" "^7.14.0"
- "@babel/parser" "^7.14.3"
- "@babel/template" "^7.12.13"
- "@babel/traverse" "^7.14.2"
- "@babel/types" "^7.14.2"
- "convert-source-map" "^1.7.0"
- "debug" "^4.1.0"
- "gensync" "^1.0.0-beta.2"
- "json5" "^2.1.2"
- "semver" "^6.3.0"
- "source-map" "^0.5.0"
-
-"@babel/generator@^7.14.2", "@babel/generator@^7.14.3":
- "integrity" "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA=="
- "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz"
- "version" "7.14.3"
- dependencies:
- "@babel/types" "^7.14.2"
- "jsesc" "^2.5.1"
- "source-map" "^0.5.0"
-
-"@babel/helper-compilation-targets@^7.13.16":
- "integrity" "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA=="
- "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz"
- "version" "7.13.16"
- dependencies:
- "@babel/compat-data" "^7.13.15"
- "@babel/helper-validator-option" "^7.12.17"
- "browserslist" "^4.14.5"
- "semver" "^6.3.0"
-
-"@babel/helper-function-name@^7.14.2":
- "integrity" "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ=="
- "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz"
- "version" "7.14.2"
- dependencies:
- "@babel/helper-get-function-arity" "^7.12.13"
- "@babel/template" "^7.12.13"
- "@babel/types" "^7.14.2"
-
-"@babel/helper-get-function-arity@^7.12.13":
- "integrity" "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg=="
- "resolved" "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz"
- "version" "7.12.13"
- dependencies:
- "@babel/types" "^7.12.13"
-
-"@babel/helper-member-expression-to-functions@^7.13.12":
- "integrity" "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw=="
- "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz"
- "version" "7.13.12"
- dependencies:
- "@babel/types" "^7.13.12"
-
-"@babel/helper-module-imports@^7.13.12":
- "integrity" "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA=="
- "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz"
- "version" "7.13.12"
- dependencies:
- "@babel/types" "^7.13.12"
-
-"@babel/helper-module-transforms@^7.14.2":
- "integrity" "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA=="
- "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz"
- "version" "7.14.2"
- dependencies:
- "@babel/helper-module-imports" "^7.13.12"
- "@babel/helper-replace-supers" "^7.13.12"
- "@babel/helper-simple-access" "^7.13.12"
- "@babel/helper-split-export-declaration" "^7.12.13"
- "@babel/helper-validator-identifier" "^7.14.0"
- "@babel/template" "^7.12.13"
- "@babel/traverse" "^7.14.2"
- "@babel/types" "^7.14.2"
-
-"@babel/helper-optimise-call-expression@^7.12.13":
- "integrity" "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA=="
- "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz"
- "version" "7.12.13"
- dependencies:
- "@babel/types" "^7.12.13"
-
-"@babel/helper-replace-supers@^7.13.12":
- "integrity" "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA=="
- "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz"
- "version" "7.14.3"
- dependencies:
- "@babel/helper-member-expression-to-functions" "^7.13.12"
- "@babel/helper-optimise-call-expression" "^7.12.13"
- "@babel/traverse" "^7.14.2"
- "@babel/types" "^7.14.2"
-
-"@babel/helper-simple-access@^7.13.12":
- "integrity" "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA=="
- "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz"
- "version" "7.13.12"
- dependencies:
- "@babel/types" "^7.13.12"
-
-"@babel/helper-split-export-declaration@^7.12.13":
- "integrity" "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg=="
- "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz"
- "version" "7.12.13"
- dependencies:
- "@babel/types" "^7.12.13"
-
"@babel/helper-validator-identifier@^7.14.0":
"integrity" "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A=="
"resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz"
"version" "7.14.0"
-"@babel/helper-validator-option@^7.12.17":
- "integrity" "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw=="
- "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz"
- "version" "7.12.17"
-
-"@babel/helpers@^7.14.0":
- "integrity" "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg=="
- "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz"
- "version" "7.14.0"
- dependencies:
- "@babel/template" "^7.12.13"
- "@babel/traverse" "^7.14.0"
- "@babel/types" "^7.14.0"
-
-"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13":
+"@babel/highlight@^7.10.4":
"integrity" "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg=="
"resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz"
"version" "7.14.0"
@@ -164,42 +23,6 @@
"chalk" "^2.0.0"
"js-tokens" "^4.0.0"
-"@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3":
- "integrity" "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ=="
- "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz"
- "version" "7.14.3"
-
-"@babel/template@^7.12.13":
- "integrity" "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA=="
- "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz"
- "version" "7.12.13"
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@babel/parser" "^7.12.13"
- "@babel/types" "^7.12.13"
-
-"@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2":
- "integrity" "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA=="
- "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz"
- "version" "7.14.2"
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@babel/generator" "^7.14.2"
- "@babel/helper-function-name" "^7.14.2"
- "@babel/helper-split-export-declaration" "^7.12.13"
- "@babel/parser" "^7.14.2"
- "@babel/types" "^7.14.2"
- "debug" "^4.1.0"
- "globals" "^11.1.0"
-
-"@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.14.0", "@babel/types@^7.14.2":
- "integrity" "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw=="
- "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz"
- "version" "7.14.2"
- dependencies:
- "@babel/helper-validator-identifier" "^7.14.0"
- "to-fast-properties" "^2.0.0"
-
"@eslint/eslintrc@^0.4.1":
"integrity" "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ=="
"resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz"
@@ -215,49 +38,27 @@
"minimatch" "^3.0.4"
"strip-json-comments" "^3.1.1"
-"@nodelib/fs.scandir@2.1.4":
- "integrity" "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA=="
- "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz"
- "version" "2.1.4"
+"@nodelib/fs.scandir@2.1.5":
+ "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="
+ "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
+ "version" "2.1.5"
dependencies:
- "@nodelib/fs.stat" "2.0.4"
+ "@nodelib/fs.stat" "2.0.5"
"run-parallel" "^1.1.9"
-"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.4":
- "integrity" "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q=="
- "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz"
- "version" "2.0.4"
+"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
+ "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+ "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
+ "version" "2.0.5"
"@nodelib/fs.walk@^1.2.3":
- "integrity" "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow=="
- "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz"
- "version" "1.2.6"
+ "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
+ "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
+ "version" "1.2.8"
dependencies:
- "@nodelib/fs.scandir" "2.1.4"
+ "@nodelib/fs.scandir" "2.1.5"
"fastq" "^1.6.0"
-"@stylelint/postcss-css-in-js@^0.37.2":
- "integrity" "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA=="
- "resolved" "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz"
- "version" "0.37.2"
- dependencies:
- "@babel/core" ">=7.9.0"
-
-"@stylelint/postcss-markdown@^0.36.2":
- "integrity" "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ=="
- "resolved" "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz"
- "version" "0.36.2"
- dependencies:
- "remark" "^13.0.0"
- "unist-util-find-all-after" "^3.0.2"
-
-"@types/mdast@^3.0.0":
- "integrity" "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw=="
- "resolved" "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz"
- "version" "3.0.3"
- dependencies:
- "@types/unist" "*"
-
"@types/minimist@^1.2.0":
"integrity" "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg=="
"resolved" "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz"
@@ -273,11 +74,6 @@
"resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz"
"version" "4.0.0"
-"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
- "integrity" "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ=="
- "resolved" "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz"
- "version" "2.0.3"
-
"acorn-jsx@^5.3.1":
"integrity" "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng=="
"resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz"
@@ -313,7 +109,7 @@
"resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz"
"version" "4.1.1"
-"ansi-regex@^5.0.0":
+"ansi-regex@^5.0.1":
"integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
"resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
"version" "5.0.1"
@@ -354,24 +150,6 @@
"resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz"
"version" "2.0.0"
-"autoprefixer@^9.8.6":
- "integrity" "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg=="
- "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz"
- "version" "9.8.6"
- dependencies:
- "browserslist" "^4.12.0"
- "caniuse-lite" "^1.0.30001109"
- "colorette" "^1.2.1"
- "normalize-range" "^0.1.2"
- "num2fraction" "^1.2.2"
- "postcss" "^7.0.32"
- "postcss-value-parser" "^4.1.0"
-
-"bail@^1.0.0":
- "integrity" "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ=="
- "resolved" "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz"
- "version" "1.0.5"
-
"balanced-match@^1.0.0":
"integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
"resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
@@ -397,17 +175,6 @@
dependencies:
"fill-range" "^7.0.1"
-"browserslist@^4.12.0", "browserslist@^4.14.5":
- "integrity" "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ=="
- "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz"
- "version" "4.16.6"
- dependencies:
- "caniuse-lite" "^1.0.30001219"
- "colorette" "^1.2.2"
- "electron-to-chromium" "^1.3.723"
- "escalade" "^3.1.1"
- "node-releases" "^1.1.71"
-
"callsites@^3.0.0":
"integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
"resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
@@ -427,11 +194,6 @@
"resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
"version" "5.3.1"
-"caniuse-lite@^1.0.30001109", "caniuse-lite@^1.0.30001219":
- "integrity" "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A=="
- "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz"
- "version" "1.0.30001228"
-
"chalk@^2.0.0":
"integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
"resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
@@ -441,7 +203,7 @@
"escape-string-regexp" "^1.0.5"
"supports-color" "^5.3.0"
-"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1":
+"chalk@^4.0.0":
"integrity" "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg=="
"resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz"
"version" "4.1.1"
@@ -449,21 +211,6 @@
"ansi-styles" "^4.1.0"
"supports-color" "^7.1.0"
-"character-entities-legacy@^1.0.0":
- "integrity" "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA=="
- "resolved" "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz"
- "version" "1.1.4"
-
-"character-entities@^1.0.0":
- "integrity" "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw=="
- "resolved" "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz"
- "version" "1.2.4"
-
-"character-reference-invalid@^1.0.0":
- "integrity" "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg=="
- "resolved" "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz"
- "version" "1.1.4"
-
"clone-regexp@^2.1.0":
"integrity" "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q=="
"resolved" "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz"
@@ -495,7 +242,12 @@
"resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
"version" "1.1.3"
-"colorette@^1.2.1", "colorette@^1.2.2":
+"colord@^2.9.2":
+ "integrity" "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ=="
+ "resolved" "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz"
+ "version" "2.9.2"
+
+"colorette@^1.2.2":
"integrity" "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w=="
"resolved" "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz"
"version" "1.2.2"
@@ -505,17 +257,10 @@
"resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
"version" "0.0.1"
-"convert-source-map@^1.7.0":
- "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA=="
- "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz"
- "version" "1.7.0"
- dependencies:
- "safe-buffer" "~5.1.1"
-
-"cosmiconfig@^7.0.0":
- "integrity" "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA=="
- "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz"
- "version" "7.0.0"
+"cosmiconfig@^7.0.1":
+ "integrity" "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ=="
+ "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz"
+ "version" "7.0.1"
dependencies:
"@types/parse-json" "^4.0.0"
"import-fresh" "^3.2.1"
@@ -537,10 +282,10 @@
"resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
"version" "3.0.0"
-"debug@^4.0.0", "debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1":
- "integrity" "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ=="
- "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz"
- "version" "4.3.1"
+"debug@^4.0.1", "debug@^4.1.1", "debug@^4.3.3":
+ "integrity" "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q=="
+ "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz"
+ "version" "4.3.3"
dependencies:
"ms" "2.1.2"
@@ -576,44 +321,6 @@
dependencies:
"esutils" "^2.0.2"
-"dom-serializer@0":
- "integrity" "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g=="
- "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz"
- "version" "0.2.2"
- dependencies:
- "domelementtype" "^2.0.1"
- "entities" "^2.0.0"
-
-"domelementtype@^1.3.1", "domelementtype@1":
- "integrity" "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
- "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz"
- "version" "1.3.1"
-
-"domelementtype@^2.0.1":
- "integrity" "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
- "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz"
- "version" "2.2.0"
-
-"domhandler@^2.3.0":
- "integrity" "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA=="
- "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz"
- "version" "2.4.2"
- dependencies:
- "domelementtype" "1"
-
-"domutils@^1.5.1":
- "integrity" "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg=="
- "resolved" "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz"
- "version" "1.7.0"
- dependencies:
- "dom-serializer" "0"
- "domelementtype" "1"
-
-"electron-to-chromium@^1.3.723":
- "integrity" "sha512-cp7MWzC3NseUJV2FJFgaiesdrS+A8ZUjX5fLAxdRlcaPDkaPGFplX930S5vf84yqDp4LjuLdKouWuVOTwUfqHQ=="
- "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.735.tgz"
- "version" "1.3.735"
-
"emoji-regex@^8.0.0":
"integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
"resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
@@ -626,16 +333,6 @@
dependencies:
"ansi-colors" "^4.1.1"
-"entities@^1.1.1":
- "integrity" "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
- "resolved" "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz"
- "version" "1.1.2"
-
-"entities@^2.0.0":
- "integrity" "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
- "resolved" "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz"
- "version" "2.2.0"
-
"error-ex@^1.3.1":
"integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="
"resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"
@@ -643,11 +340,6 @@
dependencies:
"is-arrayish" "^0.2.1"
-"escalade@^3.1.1":
- "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
- "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
- "version" "3.1.1"
-
"escape-string-regexp@^1.0.5":
"integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
"resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
@@ -781,27 +473,21 @@
dependencies:
"clone-regexp" "^2.1.0"
-"extend@^3.0.0":
- "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"
- "version" "3.0.2"
-
"fast-deep-equal@^3.1.1":
"integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
"resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
"version" "3.1.3"
-"fast-glob@^3.1.1", "fast-glob@^3.2.5":
- "integrity" "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg=="
- "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz"
- "version" "3.2.5"
+"fast-glob@^3.1.1", "fast-glob@^3.2.7":
+ "integrity" "sha512-MBwILhhD92sziIrMQwpqcuGERF+BH99ei2a3XsGJuqEKcSycAL+w0HWokFenZXona+kjFr82Lf71eTxNRC06XQ=="
+ "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.9.tgz"
+ "version" "3.2.9"
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
- "glob-parent" "^5.1.0"
+ "glob-parent" "^5.1.2"
"merge2" "^1.3.0"
- "micromatch" "^4.0.2"
- "picomatch" "^2.2.1"
+ "micromatch" "^4.0.4"
"fast-json-stable-stringify@^2.0.0":
"integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
@@ -819,9 +505,9 @@
"version" "1.0.12"
"fastq@^1.6.0":
- "integrity" "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g=="
- "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz"
- "version" "1.11.0"
+ "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw=="
+ "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz"
+ "version" "1.13.0"
dependencies:
"reusify" "^1.0.4"
@@ -875,17 +561,12 @@
"resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"
"version" "1.0.1"
-"gensync@^1.0.0-beta.2":
- "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
- "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"
- "version" "1.0.0-beta.2"
-
"get-stdin@^8.0.0":
"integrity" "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg=="
"resolved" "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz"
"version" "8.0.0"
-"glob-parent@^5.0.0", "glob-parent@^5.1.0":
+"glob-parent@^5.0.0", "glob-parent@^5.1.2":
"integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
"resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
"version" "5.1.2"
@@ -920,11 +601,6 @@
"kind-of" "^6.0.2"
"which" "^1.3.1"
-"globals@^11.1.0":
- "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
- "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
- "version" "11.12.0"
-
"globals@^12.1.0":
"integrity" "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg=="
"resolved" "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz"
@@ -939,10 +615,10 @@
dependencies:
"type-fest" "^0.20.2"
-"globby@^11.0.3":
- "integrity" "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg=="
- "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz"
- "version" "11.0.3"
+"globby@^11.0.4":
+ "integrity" "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg=="
+ "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz"
+ "version" "11.0.4"
dependencies:
"array-union" "^2.1.0"
"dir-glob" "^3.0.1"
@@ -956,13 +632,6 @@
"resolved" "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz"
"version" "0.1.4"
-"gonzales-pe@^4.3.0":
- "integrity" "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ=="
- "resolved" "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz"
- "version" "4.3.0"
- dependencies:
- "minimist" "^1.2.5"
-
"hard-rejection@^2.1.0":
"integrity" "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA=="
"resolved" "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz"
@@ -1002,32 +671,20 @@
"resolved" "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz"
"version" "3.1.0"
-"htmlparser2@^3.10.0":
- "integrity" "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ=="
- "resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz"
- "version" "3.10.1"
- dependencies:
- "domelementtype" "^1.3.1"
- "domhandler" "^2.3.0"
- "domutils" "^1.5.1"
- "entities" "^1.1.1"
- "inherits" "^2.0.1"
- "readable-stream" "^3.1.1"
-
"ignore@^4.0.6":
"integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
"resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz"
"version" "4.0.6"
"ignore@^5.1.4":
- "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="
- "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz"
- "version" "5.1.8"
+ "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ=="
+ "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz"
+ "version" "5.2.0"
-"ignore@^5.1.8":
- "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="
- "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz"
- "version" "5.1.8"
+"ignore@^5.2.0":
+ "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ=="
+ "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz"
+ "version" "5.2.0"
"import-fresh@^3.0.0", "import-fresh@^3.2.1":
"integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="
@@ -1060,7 +717,7 @@
"once" "^1.3.0"
"wrappy" "1"
-"inherits@^2.0.1", "inherits@^2.0.3", "inherits@2":
+"inherits@2":
"integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
"resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
"version" "2.0.4"
@@ -1070,29 +727,11 @@
"resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz"
"version" "1.3.8"
-"is-alphabetical@^1.0.0":
- "integrity" "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg=="
- "resolved" "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz"
- "version" "1.0.4"
-
-"is-alphanumerical@^1.0.0":
- "integrity" "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A=="
- "resolved" "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz"
- "version" "1.0.4"
- dependencies:
- "is-alphabetical" "^1.0.0"
- "is-decimal" "^1.0.0"
-
"is-arrayish@^0.2.1":
"integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
"resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
"version" "0.2.1"
-"is-buffer@^2.0.0":
- "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
- "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz"
- "version" "2.0.5"
-
"is-core-module@^2.2.0":
"integrity" "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A=="
"resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz"
@@ -1100,11 +739,6 @@
dependencies:
"has" "^1.0.3"
-"is-decimal@^1.0.0":
- "integrity" "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw=="
- "resolved" "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz"
- "version" "1.0.4"
-
"is-extglob@^2.1.1":
"integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
"resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
@@ -1122,11 +756,6 @@
dependencies:
"is-extglob" "^2.1.1"
-"is-hexadecimal@^1.0.0":
- "integrity" "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="
- "resolved" "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz"
- "version" "1.0.4"
-
"is-number@^7.0.0":
"integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
"resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
@@ -1137,10 +766,10 @@
"resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz"
"version" "1.1.0"
-"is-plain-obj@^2.0.0":
- "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
- "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz"
- "version" "2.1.0"
+"is-plain-object@^5.0.0":
+ "integrity" "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+ "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz"
+ "version" "5.0.0"
"is-regexp@^2.0.0":
"integrity" "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA=="
@@ -1152,11 +781,6 @@
"resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"
"version" "1.0.0"
-"is-unicode-supported@^0.1.0":
- "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="
- "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz"
- "version" "0.1.0"
-
"isexe@^2.0.0":
"integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
"resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
@@ -1175,11 +799,6 @@
"argparse" "^1.0.7"
"esprima" "^4.0.0"
-"jsesc@^2.5.1":
- "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
- "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
- "version" "2.5.2"
-
"json-parse-even-better-errors@^2.3.0":
"integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
"resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"
@@ -1200,22 +819,15 @@
"resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
"version" "1.0.1"
-"json5@^2.1.2":
- "integrity" "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA=="
- "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz"
- "version" "2.2.0"
- dependencies:
- "minimist" "^1.2.5"
-
"kind-of@^6.0.2", "kind-of@^6.0.3":
"integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
"resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"
"version" "6.0.3"
-"known-css-properties@^0.21.0":
- "integrity" "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw=="
- "resolved" "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz"
- "version" "0.21.0"
+"known-css-properties@^0.24.0":
+ "integrity" "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA=="
+ "resolved" "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz"
+ "version" "0.24.0"
"levn@^0.4.1":
"integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="
@@ -1237,34 +849,16 @@
dependencies:
"p-locate" "^4.1.0"
-"lodash.clonedeep@^4.5.0":
- "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
- "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"
- "version" "4.5.0"
-
"lodash.truncate@^4.4.2":
"integrity" "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM="
"resolved" "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz"
"version" "4.4.2"
-"lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.21":
+"lodash@^4.17.21":
"integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
"resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
"version" "4.17.21"
-"log-symbols@^4.1.0":
- "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="
- "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz"
- "version" "4.1.0"
- dependencies:
- "chalk" "^4.1.0"
- "is-unicode-supported" "^0.1.0"
-
-"longest-streak@^2.0.0":
- "integrity" "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg=="
- "resolved" "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz"
- "version" "2.0.4"
-
"lru-cache@^6.0.0":
"integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="
"resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
@@ -1287,34 +881,6 @@
"resolved" "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz"
"version" "2.1.3"
-"mdast-util-from-markdown@^0.8.0":
- "integrity" "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ=="
- "resolved" "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz"
- "version" "0.8.5"
- dependencies:
- "@types/mdast" "^3.0.0"
- "mdast-util-to-string" "^2.0.0"
- "micromark" "~2.11.0"
- "parse-entities" "^2.0.0"
- "unist-util-stringify-position" "^2.0.0"
-
-"mdast-util-to-markdown@^0.6.0":
- "integrity" "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ=="
- "resolved" "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz"
- "version" "0.6.5"
- dependencies:
- "@types/unist" "^2.0.0"
- "longest-streak" "^2.0.0"
- "mdast-util-to-string" "^2.0.0"
- "parse-entities" "^2.0.0"
- "repeat-string" "^1.0.0"
- "zwitch" "^1.0.0"
-
-"mdast-util-to-string@^2.0.0":
- "integrity" "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w=="
- "resolved" "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz"
- "version" "2.0.0"
-
"meow@^9.0.0":
"integrity" "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ=="
"resolved" "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz"
@@ -1343,15 +909,7 @@
"resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
"version" "1.4.1"
-"micromark@~2.11.0":
- "integrity" "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA=="
- "resolved" "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz"
- "version" "2.11.4"
- dependencies:
- "debug" "^4.0.0"
- "parse-entities" "^2.0.0"
-
-"micromatch@^4.0.2", "micromatch@^4.0.4":
+"micromatch@^4.0.4":
"integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg=="
"resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz"
"version" "4.0.4"
@@ -1380,7 +938,7 @@
"is-plain-obj" "^1.1.0"
"kind-of" "^6.0.3"
-"minimist@^1.1.0", "minimist@^1.2.5":
+"minimist@^1.1.0":
"integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
"resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"
"version" "1.2.5"
@@ -1390,21 +948,16 @@
"resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
"version" "2.1.2"
-"nanoid@^3.1.22":
- "integrity" "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw=="
- "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz"
- "version" "3.1.23"
+"nanoid@^3.1.22", "nanoid@^3.1.30":
+ "integrity" "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ=="
+ "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz"
+ "version" "3.1.30"
"natural-compare@^1.4.0":
"integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
"resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
"version" "1.4.0"
-"node-releases@^1.1.71":
- "integrity" "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw=="
- "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz"
- "version" "1.1.72"
-
"normalize-package-data@^2.5.0":
"integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="
"resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz"
@@ -1425,21 +978,16 @@
"semver" "^7.3.4"
"validate-npm-package-license" "^3.0.1"
-"normalize-range@^0.1.2":
- "integrity" "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
- "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz"
- "version" "0.1.2"
+"normalize-path@^3.0.0":
+ "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
+ "version" "3.0.0"
"normalize-selector@^0.2.0":
"integrity" "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM="
"resolved" "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz"
"version" "0.2.0"
-"num2fraction@^1.2.2":
- "integrity" "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
- "resolved" "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz"
- "version" "1.2.2"
-
"once@^1.3.0":
"integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
"resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
@@ -1485,18 +1033,6 @@
dependencies:
"callsites" "^3.0.0"
-"parse-entities@^2.0.0":
- "integrity" "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ=="
- "resolved" "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz"
- "version" "2.0.0"
- dependencies:
- "character-entities" "^1.0.0"
- "character-entities-legacy" "^1.0.0"
- "character-reference-invalid" "^1.0.0"
- "is-alphanumerical" "^1.0.0"
- "is-decimal" "^1.0.0"
- "is-hexadecimal" "^1.0.0"
-
"parse-json@^5.0.0":
"integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="
"resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz"
@@ -1532,27 +1068,15 @@
"resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
"version" "4.0.0"
-"picocolors@^0.2.1":
- "version" "0.2.1"
+"picocolors@^1.0.0":
+ "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
+ "version" "1.0.0"
-"picomatch@^2.2.1", "picomatch@^2.2.3":
- "integrity" "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg=="
- "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz"
- "version" "2.2.3"
-
-"postcss-html@^0.36.0":
- "integrity" "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw=="
- "resolved" "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz"
- "version" "0.36.0"
- dependencies:
- "htmlparser2" "^3.10.0"
-
-"postcss-less@^3.1.4":
- "integrity" "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA=="
- "resolved" "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz"
- "version" "3.1.4"
- dependencies:
- "postcss" "^7.0.14"
+"picomatch@^2.2.3":
+ "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
+ "version" "2.3.1"
"postcss-media-query-parser@^0.2.3":
"integrity" "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ="
@@ -1564,112 +1088,42 @@
"resolved" "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz"
"version" "0.1.1"
-"postcss-safe-parser@^4.0.2":
- "integrity" "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g=="
- "resolved" "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz"
- "version" "4.0.2"
- dependencies:
- "postcss" "^7.0.26"
+"postcss-safe-parser@^6.0.0":
+ "integrity" "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ=="
+ "resolved" "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz"
+ "version" "6.0.0"
-"postcss-sass@^0.4.4":
- "integrity" "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg=="
- "resolved" "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz"
- "version" "0.4.4"
- dependencies:
- "gonzales-pe" "^4.3.0"
- "postcss" "^7.0.21"
-
-"postcss-scss@^2.1.1":
- "integrity" "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA=="
- "resolved" "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz"
- "version" "2.1.1"
- dependencies:
- "postcss" "^7.0.6"
-
-"postcss-selector-parser@^6.0.5":
- "integrity" "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg=="
- "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz"
- "version" "6.0.6"
+"postcss-selector-parser@^6.0.7":
+ "integrity" "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ=="
+ "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz"
+ "version" "6.0.8"
dependencies:
"cssesc" "^3.0.0"
"util-deprecate" "^1.0.2"
-"postcss-sorting@^5.0.1":
- "integrity" "sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA=="
- "resolved" "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-5.0.1.tgz"
- "version" "5.0.1"
- dependencies:
- "lodash" "^4.17.14"
- "postcss" "^7.0.17"
-
-"postcss-syntax@^0.36.2", "postcss-syntax@>=0.36.0", "postcss-syntax@>=0.36.2":
- "integrity" "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w=="
- "resolved" "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz"
- "version" "0.36.2"
+"postcss-sorting@^7.0.1":
+ "integrity" "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g=="
+ "resolved" "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz"
+ "version" "7.0.1"
"postcss-value-parser@^4.1.0":
- "integrity" "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
- "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz"
- "version" "4.1.0"
+ "integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
+ "version" "4.2.0"
-"postcss@^7.0.14":
- "version" "7.0.39"
+"postcss@^8.3.11", "postcss@^8.3.3", "postcss@^8.3.9":
+ "integrity" "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg=="
+ "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz"
+ "version" "8.4.5"
dependencies:
- "picocolors" "^0.2.1"
- "source-map" "^0.6.1"
+ "nanoid" "^3.1.30"
+ "picocolors" "^1.0.0"
+ "source-map-js" "^1.0.1"
-"postcss@^7.0.17":
- "version" "7.0.39"
- dependencies:
- "picocolors" "^0.2.1"
- "source-map" "^0.6.1"
-
-"postcss@^7.0.2":
- "version" "7.0.39"
- dependencies:
- "picocolors" "^0.2.1"
- "source-map" "^0.6.1"
-
-"postcss@^7.0.21":
- "version" "7.0.39"
- dependencies:
- "picocolors" "^0.2.1"
- "source-map" "^0.6.1"
-
-"postcss@^7.0.26":
- "version" "7.0.39"
- dependencies:
- "picocolors" "^0.2.1"
- "source-map" "^0.6.1"
-
-"postcss@^7.0.31":
- "version" "7.0.39"
- dependencies:
- "picocolors" "^0.2.1"
- "source-map" "^0.6.1"
-
-"postcss@^7.0.32":
- "version" "7.0.39"
- dependencies:
- "picocolors" "^0.2.1"
- "source-map" "^0.6.1"
-
-"postcss@^7.0.35", "postcss@>=5.0.0", "postcss@>=7.0.0":
- "version" "7.0.39"
- dependencies:
- "picocolors" "^0.2.1"
- "source-map" "^0.6.1"
-
-"postcss@^7.0.6":
- "version" "7.0.39"
- dependencies:
- "picocolors" "^0.2.1"
- "source-map" "^0.6.1"
-
-"postcss@8.2.10":
- "integrity" "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw=="
- "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz"
- "version" "8.2.10"
+"postcss@8.2.13":
+ "integrity" "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ=="
+ "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz"
+ "version" "8.2.13"
dependencies:
"colorette" "^1.2.2"
"nanoid" "^3.1.22"
@@ -1724,15 +1178,6 @@
"parse-json" "^5.0.0"
"type-fest" "^0.6.0"
-"readable-stream@^3.1.1":
- "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA=="
- "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz"
- "version" "3.6.0"
- dependencies:
- "inherits" "^2.0.3"
- "string_decoder" "^1.1.1"
- "util-deprecate" "^1.0.1"
-
"redent@^3.0.0":
"integrity" "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="
"resolved" "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz"
@@ -1746,34 +1191,6 @@
"resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz"
"version" "3.1.0"
-"remark-parse@^9.0.0":
- "integrity" "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw=="
- "resolved" "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz"
- "version" "9.0.0"
- dependencies:
- "mdast-util-from-markdown" "^0.8.0"
-
-"remark-stringify@^9.0.0":
- "integrity" "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg=="
- "resolved" "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz"
- "version" "9.0.1"
- dependencies:
- "mdast-util-to-markdown" "^0.6.0"
-
-"remark@^13.0.0":
- "integrity" "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA=="
- "resolved" "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz"
- "version" "13.0.0"
- dependencies:
- "remark-parse" "^9.0.0"
- "remark-stringify" "^9.0.0"
- "unified" "^9.1.0"
-
-"repeat-string@^1.0.0":
- "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
- "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"
- "version" "1.6.1"
-
"require-from-string@^2.0.2":
"integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
"resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz"
@@ -1816,21 +1233,6 @@
dependencies:
"queue-microtask" "^1.2.2"
-"safe-buffer@~5.1.1":
- "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
- "version" "5.1.2"
-
-"safe-buffer@~5.2.0":
- "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
- "version" "5.2.1"
-
-"semver@^6.3.0":
- "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
- "version" "6.3.0"
-
"semver@^7.2.1", "semver@^7.3.4":
"integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ=="
"resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz"
@@ -1874,10 +1276,10 @@
"astral-regex" "^2.0.0"
"is-fullwidth-code-point" "^3.0.0"
-"source-map@^0.5.0":
- "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
- "version" "0.5.7"
+"source-map-js@^1.0.1":
+ "integrity" "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA=="
+ "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz"
+ "version" "1.0.1"
"source-map@^0.6.1":
"integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
@@ -1920,28 +1322,21 @@
"resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
"version" "1.0.3"
-"string_decoder@^1.1.1":
- "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="
- "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
- "version" "1.3.0"
- dependencies:
- "safe-buffer" "~5.2.0"
-
-"string-width@^4.2.0", "string-width@^4.2.2":
- "integrity" "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA=="
- "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz"
- "version" "4.2.2"
+"string-width@^4.2.3":
+ "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="
+ "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
+ "version" "4.2.3"
dependencies:
"emoji-regex" "^8.0.0"
"is-fullwidth-code-point" "^3.0.0"
- "strip-ansi" "^6.0.0"
+ "strip-ansi" "^6.0.1"
-"strip-ansi@^6.0.0":
- "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w=="
- "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz"
- "version" "6.0.0"
+"strip-ansi@^6.0.0", "strip-ansi@^6.0.1":
+ "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="
+ "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+ "version" "6.0.1"
dependencies:
- "ansi-regex" "^5.0.0"
+ "ansi-regex" "^5.0.1"
"strip-indent@^3.0.0":
"integrity" "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="
@@ -1960,88 +1355,71 @@
"resolved" "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz"
"version" "0.1.0"
-"stylelint-config-recommended@^4.0.0":
- "integrity" "sha512-sgna89Ng+25Hr9kmmaIxpGWt2LStVm1xf1807PdcWasiPDaOTkOHRL61sINw0twky7QMzafCGToGDnHT/kTHtQ=="
- "resolved" "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-4.0.0.tgz"
- "version" "4.0.0"
+"stylelint-config-recommended@^6.0.0":
+ "integrity" "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw=="
+ "resolved" "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz"
+ "version" "6.0.0"
-"stylelint-config-standard@^21.0.0":
- "integrity" "sha512-Yf6mx5oYEbQQJxWuW7X3t1gcxqbUx52qC9SMS3saC2ruOVYEyqmr5zSW6k3wXflDjjFrPhar3kp68ugRopmlzg=="
- "resolved" "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-21.0.0.tgz"
- "version" "21.0.0"
+"stylelint-config-standard@^24.0.0":
+ "integrity" "sha512-+RtU7fbNT+VlNbdXJvnjc3USNPZRiRVp/d2DxOF/vBDDTi0kH5RX2Ny6errdtZJH3boO+bmqIYEllEmok4jiuw=="
+ "resolved" "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-24.0.0.tgz"
+ "version" "24.0.0"
dependencies:
- "stylelint-config-recommended" "^4.0.0"
+ "stylelint-config-recommended" "^6.0.0"
-"stylelint-order@^4.1.0":
- "integrity" "sha512-sVTikaDvMqg2aJjh4r48jsdfmqLT+nqB1MOsaBnvM3OwLx4S+WXcsxsgk5w18h/OZoxZCxuyXMh61iBHcj9Qiw=="
- "resolved" "https://registry.npmjs.org/stylelint-order/-/stylelint-order-4.1.0.tgz"
- "version" "4.1.0"
+"stylelint-order@^5.0.0":
+ "integrity" "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw=="
+ "resolved" "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz"
+ "version" "5.0.0"
dependencies:
- "lodash" "^4.17.15"
- "postcss" "^7.0.31"
- "postcss-sorting" "^5.0.1"
+ "postcss" "^8.3.11"
+ "postcss-sorting" "^7.0.1"
-"stylelint@^10.0.1 || ^11.0.0 || ^12.0.0 || ^13.0.0", "stylelint@^13.12.0":
- "integrity" "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ=="
- "resolved" "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz"
- "version" "13.13.1"
+"stylelint@^14.0.0", "stylelint@^14.2.0":
+ "integrity" "sha512-i0DrmDXFNpDsWiwx6SPRs4/pyw4kvZgqpDGvsTslQMY7hpUl6r33aQvNSn6cnTg2wtZ9rreFElI7XAKpOWi1vQ=="
+ "resolved" "https://registry.npmjs.org/stylelint/-/stylelint-14.2.0.tgz"
+ "version" "14.2.0"
dependencies:
- "@stylelint/postcss-css-in-js" "^0.37.2"
- "@stylelint/postcss-markdown" "^0.36.2"
- "autoprefixer" "^9.8.6"
"balanced-match" "^2.0.0"
- "chalk" "^4.1.1"
- "cosmiconfig" "^7.0.0"
- "debug" "^4.3.1"
+ "colord" "^2.9.2"
+ "cosmiconfig" "^7.0.1"
+ "debug" "^4.3.3"
"execall" "^2.0.0"
- "fast-glob" "^3.2.5"
+ "fast-glob" "^3.2.7"
"fastest-levenshtein" "^1.0.12"
"file-entry-cache" "^6.0.1"
"get-stdin" "^8.0.0"
"global-modules" "^2.0.0"
- "globby" "^11.0.3"
+ "globby" "^11.0.4"
"globjoin" "^0.1.4"
"html-tags" "^3.1.0"
- "ignore" "^5.1.8"
+ "ignore" "^5.2.0"
"import-lazy" "^4.0.0"
"imurmurhash" "^0.1.4"
- "known-css-properties" "^0.21.0"
- "lodash" "^4.17.21"
- "log-symbols" "^4.1.0"
+ "is-plain-object" "^5.0.0"
+ "known-css-properties" "^0.24.0"
"mathml-tag-names" "^2.1.3"
"meow" "^9.0.0"
"micromatch" "^4.0.4"
+ "normalize-path" "^3.0.0"
"normalize-selector" "^0.2.0"
- "postcss" "^7.0.35"
- "postcss-html" "^0.36.0"
- "postcss-less" "^3.1.4"
+ "picocolors" "^1.0.0"
+ "postcss" "^8.3.11"
"postcss-media-query-parser" "^0.2.3"
"postcss-resolve-nested-selector" "^0.1.1"
- "postcss-safe-parser" "^4.0.2"
- "postcss-sass" "^0.4.4"
- "postcss-scss" "^2.1.1"
- "postcss-selector-parser" "^6.0.5"
- "postcss-syntax" "^0.36.2"
+ "postcss-safe-parser" "^6.0.0"
+ "postcss-selector-parser" "^6.0.7"
"postcss-value-parser" "^4.1.0"
"resolve-from" "^5.0.0"
- "slash" "^3.0.0"
"specificity" "^0.4.1"
- "string-width" "^4.2.2"
- "strip-ansi" "^6.0.0"
+ "string-width" "^4.2.3"
+ "strip-ansi" "^6.0.1"
"style-search" "^0.1.0"
- "sugarss" "^2.0.0"
"svg-tags" "^1.0.0"
- "table" "^6.6.0"
+ "table" "^6.7.5"
"v8-compile-cache" "^2.3.0"
"write-file-atomic" "^3.0.3"
-"sugarss@^2.0.0":
- "integrity" "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ=="
- "resolved" "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz"
- "version" "2.0.0"
- dependencies:
- "postcss" "^7.0.2"
-
"supports-color@^5.3.0":
"integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="
"resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
@@ -2061,28 +1439,22 @@
"resolved" "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz"
"version" "1.0.0"
-"table@^6.0.4", "table@^6.6.0":
- "integrity" "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg=="
- "resolved" "https://registry.npmjs.org/table/-/table-6.7.1.tgz"
- "version" "6.7.1"
+"table@^6.0.4", "table@^6.7.5":
+ "integrity" "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA=="
+ "resolved" "https://registry.npmjs.org/table/-/table-6.8.0.tgz"
+ "version" "6.8.0"
dependencies:
"ajv" "^8.0.1"
- "lodash.clonedeep" "^4.5.0"
"lodash.truncate" "^4.4.2"
"slice-ansi" "^4.0.0"
- "string-width" "^4.2.0"
- "strip-ansi" "^6.0.0"
+ "string-width" "^4.2.3"
+ "strip-ansi" "^6.0.1"
"text-table@^0.2.0":
"integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
"resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
"version" "0.2.0"
-"to-fast-properties@^2.0.0":
- "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
- "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"
- "version" "2.0.0"
-
"to-regex-range@^5.0.1":
"integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
"resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
@@ -2095,11 +1467,6 @@
"resolved" "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz"
"version" "3.0.1"
-"trough@^1.0.0":
- "integrity" "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA=="
- "resolved" "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz"
- "version" "1.0.5"
-
"type-check@^0.4.0", "type-check@~0.4.0":
"integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="
"resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
@@ -2134,37 +1501,6 @@
dependencies:
"is-typedarray" "^1.0.0"
-"unified@^9.1.0":
- "integrity" "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA=="
- "resolved" "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz"
- "version" "9.2.1"
- dependencies:
- "bail" "^1.0.0"
- "extend" "^3.0.0"
- "is-buffer" "^2.0.0"
- "is-plain-obj" "^2.0.0"
- "trough" "^1.0.0"
- "vfile" "^4.0.0"
-
-"unist-util-find-all-after@^3.0.2":
- "integrity" "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ=="
- "resolved" "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz"
- "version" "3.0.2"
- dependencies:
- "unist-util-is" "^4.0.0"
-
-"unist-util-is@^4.0.0":
- "integrity" "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg=="
- "resolved" "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz"
- "version" "4.1.0"
-
-"unist-util-stringify-position@^2.0.0":
- "integrity" "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g=="
- "resolved" "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz"
- "version" "2.0.3"
- dependencies:
- "@types/unist" "^2.0.2"
-
"uri-js@^4.2.2":
"integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="
"resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
@@ -2172,7 +1508,7 @@
dependencies:
"punycode" "^2.1.0"
-"util-deprecate@^1.0.1", "util-deprecate@^1.0.2":
+"util-deprecate@^1.0.2":
"integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
"resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
"version" "1.0.2"
@@ -2190,24 +1526,6 @@
"spdx-correct" "^3.0.0"
"spdx-expression-parse" "^3.0.0"
-"vfile-message@^2.0.0":
- "integrity" "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ=="
- "resolved" "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz"
- "version" "2.0.4"
- dependencies:
- "@types/unist" "^2.0.0"
- "unist-util-stringify-position" "^2.0.0"
-
-"vfile@^4.0.0":
- "integrity" "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA=="
- "resolved" "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz"
- "version" "4.2.1"
- dependencies:
- "@types/unist" "^2.0.0"
- "is-buffer" "^2.0.0"
- "unist-util-stringify-position" "^2.0.0"
- "vfile-message" "^2.0.0"
-
"watch@^0.13.0":
"integrity" "sha1-/MbSs/DoxzSC61Qjmhn9W8+adTw="
"resolved" "https://registry.npmjs.org/watch/-/watch-0.13.0.tgz"
@@ -2263,8 +1581,3 @@
"integrity" "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw=="
"resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz"
"version" "20.2.7"
-
-"zwitch@^1.0.0":
- "integrity" "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw=="
- "resolved" "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz"
- "version" "1.0.5"