diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 19135cadc..2d78a283d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,6 +16,14 @@ updates: open-pull-requests-limit: 10 assignees: - BeryJu +- package-ecosystem: npm + directory: "/website" + schedule: + interval: daily + time: "04:00" + open-pull-requests-limit: 10 + assignees: + - BeryJu - package-ecosystem: pip directory: "/" schedule: diff --git a/Pipfile.lock b/Pipfile.lock index b91967c2b..b5a4dde08 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -53,10 +53,10 @@ }, "autobahn": { "hashes": [ - "sha256:410a93e0e29882c8b5d5ab05d220b07609b886ef5f23c0b8d39153254ffd6895", - "sha256:52ee4236ff9a1fcbbd9500439dcf3284284b37f8a6b31ecc8a36e00cf9f95049" + "sha256:93df8fc9d1821c9dabff9fed52181a9ad6eea5e9989d53102c391607d7c1666e", + "sha256:cceed2121b7a93024daa93c91fae33007f8346f0e522796421f36a6183abea99" ], - "version": "==20.12.3" + "version": "==21.1.1" }, "automat": { "hashes": [ @@ -74,17 +74,18 @@ }, "boto3": { "hashes": [ - "sha256:1a282c1cd7d5028cbb3a75d747df32162295253f55d263ac85840e264830963b" + "sha256:92041aa7589c886020cabd80eb58b89ace2f0094571792fccae24b9a8b3b97d7", + "sha256:9f132c34e20110dea019293c89cede49b0a56be615b3e1debf98390ed9f1f7b9" ], "index": "pypi", - "version": "==1.17.2" + "version": "==1.17.3" }, "botocore": { "hashes": [ - "sha256:7442fdbbdc841bfac7f94f92ecb807de070e32ed205743eb72d4ea27c5e8e778", - "sha256:bf587b044983a91a0124cc133ff167b8528c19fbbc8f0b956d9a1ac256cad7d7" + "sha256:1dae84c68b109f596f58cc2e9fa87704ccd40dcbc12144a89205f85efa7f9135", + "sha256:a0fdded1c9636899ab273f50bf123f79b91439a8c282b5face8b5f4a48b493cb" ], - "version": "==1.20.2" + "version": "==1.20.3" }, "cachetools": { "hashes": [ diff --git a/authentik/admin/templates/administration/certificatekeypair/generate.html b/authentik/admin/templates/administration/certificatekeypair/generate.html new file mode 100644 index 000000000..6af5c916c --- /dev/null +++ b/authentik/admin/templates/administration/certificatekeypair/generate.html @@ -0,0 +1,14 @@ +{% extends base_template|default:"generic/form.html" %} + +{% load authentik_utils %} +{% load i18n %} + +{% block above_form %} +

+ {% trans 'Generate Certificate-Key Pair' %} +

+{% endblock %} + +{% block action %} +{% trans 'Generate Certificate-Key Pair' %} +{% endblock %} diff --git a/authentik/admin/templates/administration/certificatekeypair/list.html b/authentik/admin/templates/administration/certificatekeypair/list.html index 8acfcb016..9bf8af298 100644 --- a/authentik/admin/templates/administration/certificatekeypair/list.html +++ b/authentik/admin/templates/administration/certificatekeypair/list.html @@ -26,6 +26,12 @@
+ + + {% trans 'Generate' %} + +
+
diff --git a/authentik/admin/templates/administration/policy/test.html b/authentik/admin/templates/administration/policy/test.html index 5110d19dd..aa00f162f 100644 --- a/authentik/admin/templates/administration/policy/test.html +++ b/authentik/admin/templates/administration/policy/test.html @@ -14,7 +14,7 @@ {% trans 'Passing' %} -
+
{{ result.passing|yesno:"Yes,No" }}
@@ -26,7 +26,7 @@ {% trans 'Messages' %}
-
+
    {% for m in result.messages %} diff --git a/authentik/admin/templates/administration/provider/list.html b/authentik/admin/templates/administration/provider/list.html deleted file mode 100644 index 059a63e8c..000000000 --- a/authentik/admin/templates/administration/provider/list.html +++ /dev/null @@ -1,181 +0,0 @@ -{% extends "administration/base.html" %} - -{% load i18n %} -{% load authentik_utils %} -{% load admin_reflection %} - -{% block content %} -
    -
    -

    - - {% trans 'Providers' %} -

    -

    {% trans "Provide support for protocols like SAML and OAuth to assigned applications." %} -

    -
    -
    -
    -
    - {% if object_list %} -
    -
    - {% include 'partials/toolbar_search.html' %} -
    - - - - - -
    - {% include 'partials/pagination.html' %} -
    -
    - - - - - - - - - - {% for provider in object_list %} - - - - - - {% endfor %} - -
    {% trans 'Name' %}{% trans 'Type' %}
    -
    -
    {{ provider.name }}
    - {% if not provider.application %} - - {% trans 'Warning: Provider not assigned to any application.' %} - {% else %} - - - {% blocktrans with app=provider.application %} - Assigned to application {{ app }}. - {% endblocktrans %} - - {% endif %} -
    -
    - - {{ provider|verbose_name }} - - - - - {% trans 'Edit' %} - -
    -
    - - - {% trans 'Delete' %} - -
    -
    - {% get_links provider as links %} - {% for name, href in links.items %} - {% trans name %} - {% endfor %} - {% get_htmls provider as htmls %} - {% for html in htmls %} - {{ html|safe }} - {% endfor %} -
    -
    - {% include 'partials/pagination.html' %} -
    - {% else %} -
    -
    - {% include 'partials/toolbar_search.html' %} -
    -
    -
    -
    - -

    - {% trans 'No Providers.' %} -

    -
    - {% if request.GET.search != "" %} - {% trans "Your search query doesn't match any providers." %} - {% else %} - {% trans 'Currently no providers exist. Click the button below to create one.' %} - {% endif %} -
    - - - - -
    -
    - {% endif %} -
    -
    -{% endblock %} diff --git a/authentik/admin/urls.py b/authentik/admin/urls.py index dc02b0073..577bdfbc6 100644 --- a/authentik/admin/urls.py +++ b/authentik/admin/urls.py @@ -24,7 +24,7 @@ from authentik.admin.views import ( tokens, users, ) -from authentik.providers.saml.views import MetadataImportView +from authentik.providers.saml.views.metadata import MetadataImportView urlpatterns = [ path( @@ -113,7 +113,6 @@ urlpatterns = [ name="policy-binding-delete", ), # Providers - path("providers/", providers.ProviderListView.as_view(), name="providers"), path( "providers/create/", providers.ProviderCreateView.as_view(), @@ -296,6 +295,11 @@ urlpatterns = [ certificate_key_pair.CertificateKeyPairCreateView.as_view(), name="certificatekeypair-create", ), + path( + "crypto/certificates/generate/", + certificate_key_pair.CertificateKeyPairGenerateView.as_view(), + name="certificatekeypair-generate", + ), path( "crypto/certificates//update/", certificate_key_pair.CertificateKeyPairUpdateView.as_view(), @@ -329,22 +333,22 @@ urlpatterns = [ ), # Outpost Service Connections path( - "outposts/service_connections/", + "outpost_service_connections/", outposts_service_connections.OutpostServiceConnectionListView.as_view(), name="outpost-service-connections", ), path( - "outposts/service_connections/create/", + "outpost_service_connections/create/", outposts_service_connections.OutpostServiceConnectionCreateView.as_view(), name="outpost-service-connection-create", ), path( - "outposts/service_connections//update/", + "outpost_service_connections//update/", outposts_service_connections.OutpostServiceConnectionUpdateView.as_view(), name="outpost-service-connection-update", ), path( - "outposts/service_connections//delete/", + "outpost_service_connections//delete/", outposts_service_connections.OutpostServiceConnectionDeleteView.as_view(), name="outpost-service-connection-delete", ), diff --git a/authentik/admin/views/certificate_key_pair.py b/authentik/admin/views/certificate_key_pair.py index 09e154cf4..7f01e45de 100644 --- a/authentik/admin/views/certificate_key_pair.py +++ b/authentik/admin/views/certificate_key_pair.py @@ -4,9 +4,11 @@ from django.contrib.auth.mixins import ( PermissionRequiredMixin as DjangoPermissionRequiredMixin, ) from django.contrib.messages.views import SuccessMessageMixin +from django.http.response import HttpResponse from django.urls import reverse_lazy from django.utils.translation import gettext as _ from django.views.generic import ListView, UpdateView +from django.views.generic.edit import FormView from guardian.mixins import PermissionListMixin, PermissionRequiredMixin from authentik.admin.views.utils import ( @@ -15,7 +17,11 @@ from authentik.admin.views.utils import ( SearchListMixin, UserPaginateListMixin, ) -from authentik.crypto.forms import CertificateKeyPairForm +from authentik.crypto.builder import CertificateBuilder +from authentik.crypto.forms import ( + CertificateKeyPairForm, + CertificateKeyPairGenerateForm, +) from authentik.crypto.models import CertificateKeyPair from authentik.lib.views import CreateAssignPermView @@ -52,7 +58,35 @@ class CertificateKeyPairCreateView( template_name = "generic/create.html" success_url = reverse_lazy("authentik_admin:certificate_key_pair") - success_message = _("Successfully created CertificateKeyPair") + success_message = _("Successfully created Certificate-Key Pair") + + +class CertificateKeyPairGenerateView( + SuccessMessageMixin, + BackSuccessUrlMixin, + LoginRequiredMixin, + DjangoPermissionRequiredMixin, + FormView, +): + """Generate new CertificateKeyPair""" + + model = CertificateKeyPair + form_class = CertificateKeyPairGenerateForm + permission_required = "authentik_crypto.add_certificatekeypair" + + template_name = "administration/certificatekeypair/generate.html" + success_url = reverse_lazy("authentik_admin:certificate_key_pair") + success_message = _("Successfully generated Certificate-Key Pair") + + def form_valid(self, form: CertificateKeyPairGenerateForm) -> HttpResponse: + builder = CertificateBuilder() + builder.common_name = form.data["common_name"] + builder.build( + subject_alt_names=form.data.get("subject_alt_name", "").split(","), + validity_days=int(form.data["validity_days"]), + ) + builder.save() + return super().form_valid(form) class CertificateKeyPairUpdateView( diff --git a/authentik/admin/views/overview.py b/authentik/admin/views/overview.py index dd9d78e17..c188c039b 100644 --- a/authentik/admin/views/overview.py +++ b/authentik/admin/views/overview.py @@ -3,6 +3,7 @@ from django.contrib.messages.views import SuccessMessageMixin from django.core.cache import cache from django.http.request import HttpRequest from django.http.response import HttpResponse +from django.urls.base import reverse_lazy from django.utils.translation import gettext as _ from django.views.generic import FormView from structlog.stdlib import get_logger @@ -20,7 +21,7 @@ class PolicyCacheClearView(AdminRequiredMixin, SuccessMessageMixin, FormView): form_class = PolicyCacheClearForm template_name = "generic/form_non_model.html" - success_url = "/" + success_url = reverse_lazy("authentik_core:shell") success_message = _("Successfully cleared Policy cache") def post(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: @@ -39,7 +40,7 @@ class FlowCacheClearView(AdminRequiredMixin, SuccessMessageMixin, FormView): form_class = FlowCacheClearForm template_name = "generic/form_non_model.html" - success_url = "/" + success_url = reverse_lazy("authentik_core:shell") success_message = _("Successfully cleared Flow cache") def post(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: diff --git a/authentik/admin/views/policies.py b/authentik/admin/views/policies.py index fd25167bf..8a5441686 100644 --- a/authentik/admin/views/policies.py +++ b/authentik/admin/views/policies.py @@ -115,6 +115,7 @@ class PolicyTestView(LoginRequiredMixin, DetailView, PermissionRequiredMixin, Fo user = form.cleaned_data.get("user") p_request = PolicyRequest(user) + p_request.debug = True p_request.http_request = self.request p_request.context = form.cleaned_data.get("context", {}) diff --git a/authentik/admin/views/property_mappings.py b/authentik/admin/views/property_mappings.py index 9df13cef5..ff87583e9 100644 --- a/authentik/admin/views/property_mappings.py +++ b/authentik/admin/views/property_mappings.py @@ -37,7 +37,7 @@ class PropertyMappingCreateView( permission_required = "authentik_core.add_propertymapping" template_name = "generic/create.html" - success_url = reverse_lazy("authentik_admin:property-mappings") + success_url = reverse_lazy("authentik_core:shell") success_message = _("Successfully created Property Mapping") @@ -54,7 +54,7 @@ class PropertyMappingUpdateView( permission_required = "authentik_core.change_propertymapping" template_name = "generic/update.html" - success_url = reverse_lazy("authentik_admin:property-mappings") + success_url = reverse_lazy("authentik_core:shell") success_message = _("Successfully updated Property Mapping") @@ -67,7 +67,7 @@ class PropertyMappingDeleteView( permission_required = "authentik_core.delete_propertymapping" template_name = "generic/delete.html" - success_url = reverse_lazy("authentik_admin:property-mappings") + success_url = reverse_lazy("authentik_core:shell") success_message = _("Successfully deleted Property Mapping") diff --git a/authentik/admin/views/providers.py b/authentik/admin/views/providers.py index ed4accf41..c94b0dfb0 100644 --- a/authentik/admin/views/providers.py +++ b/authentik/admin/views/providers.py @@ -6,36 +6,17 @@ from django.contrib.auth.mixins import ( from django.contrib.messages.views import SuccessMessageMixin from django.urls import reverse_lazy from django.utils.translation import gettext as _ -from guardian.mixins import PermissionListMixin, PermissionRequiredMixin +from guardian.mixins import PermissionRequiredMixin from authentik.admin.views.utils import ( BackSuccessUrlMixin, DeleteMessageView, InheritanceCreateView, - InheritanceListView, InheritanceUpdateView, - SearchListMixin, - UserPaginateListMixin, ) from authentik.core.models import Provider -class ProviderListView( - LoginRequiredMixin, - PermissionListMixin, - UserPaginateListMixin, - SearchListMixin, - InheritanceListView, -): - """Show list of all providers""" - - model = Provider - permission_required = "authentik_core.add_provider" - template_name = "administration/provider/list.html" - ordering = "pk" - search_fields = ["pk", "name"] - - class ProviderCreateView( SuccessMessageMixin, BackSuccessUrlMixin, diff --git a/authentik/crypto/builder.py b/authentik/crypto/builder.py index 122766a86..55799a496 100644 --- a/authentik/crypto/builder.py +++ b/authentik/crypto/builder.py @@ -1,6 +1,7 @@ """Create self-signed certificates""" import datetime import uuid +from typing import Optional from cryptography import x509 from cryptography.hazmat.backends import default_backend @@ -8,6 +9,9 @@ from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.x509.oid import NameOID +from authentik import __version__ +from authentik.crypto.models import CertificateKeyPair + class CertificateBuilder: """Build self-signed certificates""" @@ -17,19 +21,39 @@ class CertificateBuilder: __builder = None __certificate = None + common_name: str + def __init__(self): self.__public_key = None self.__private_key = None self.__builder = None self.__certificate = None + self.common_name = "authentik Self-signed Certificate" - def build(self): + def save(self) -> Optional[CertificateKeyPair]: + """Save generated certificate as model""" + if not self.__certificate: + return None + return CertificateKeyPair.objects.create( + name=self.common_name, + certificate_data=self.certificate, + key_data=self.private_key, + ) + + def build( + self, + validity_days: int = 365, + subject_alt_names: Optional[list[str]] = None, + ): """Build self-signed certificate""" one_day = datetime.timedelta(1, 0, 0) self.__private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, backend=default_backend() ) self.__public_key = self.__private_key.public_key() + alt_names: list[x509.GeneralName] = [ + x509.DNSName(x) for x in subject_alt_names or [] + ] self.__builder = ( x509.CertificateBuilder() .subject_name( @@ -37,7 +61,7 @@ class CertificateBuilder: [ x509.NameAttribute( NameOID.COMMON_NAME, - "authentik Self-signed Certificate", + self.common_name, ), x509.NameAttribute(NameOID.ORGANIZATION_NAME, "authentik"), x509.NameAttribute( @@ -51,13 +75,16 @@ class CertificateBuilder: [ x509.NameAttribute( NameOID.COMMON_NAME, - "authentik Self-signed Certificate", + f"authentik {__version__}", ), ] ) ) + .add_extension(x509.SubjectAlternativeName(alt_names), critical=True) .not_valid_before(datetime.datetime.today() - one_day) - .not_valid_after(datetime.datetime.today() + datetime.timedelta(days=365)) + .not_valid_after( + datetime.datetime.today() + datetime.timedelta(days=validity_days) + ) .serial_number(int(uuid.uuid4())) .public_key(self.__public_key) ) diff --git a/authentik/crypto/forms.py b/authentik/crypto/forms.py index 61d8cd594..f289cc207 100644 --- a/authentik/crypto/forms.py +++ b/authentik/crypto/forms.py @@ -8,6 +8,14 @@ from django.utils.translation import gettext_lazy as _ from authentik.crypto.models import CertificateKeyPair +class CertificateKeyPairGenerateForm(forms.Form): + """CertificateKeyPair generation form""" + + common_name = forms.CharField() + subject_alt_name = forms.CharField(required=False, label=_("Subject-alt name")) + validity_days = forms.IntegerField(initial=365) + + class CertificateKeyPairForm(forms.ModelForm): """CertificateKeyPair Form""" diff --git a/authentik/events/tasks.py b/authentik/events/tasks.py index 43505b8e5..68b46f92b 100644 --- a/authentik/events/tasks.py +++ b/authentik/events/tasks.py @@ -67,7 +67,7 @@ def event_trigger_handler(event_uuid: str, trigger_name: str): # Create the notification objects for transport in trigger.transports.all(): for user in trigger.group.users.all(): - LOGGER.debug("created notif") + LOGGER.debug("created notification") notification = Notification.objects.create( severity=trigger.severity, body=event.summary, event=event, user=user ) diff --git a/authentik/policies/process.py b/authentik/policies/process.py index 900614558..4eee182a2 100644 --- a/authentik/policies/process.py +++ b/authentik/policies/process.py @@ -80,7 +80,7 @@ class PolicyProcess(PROCESS_CLASS): ) try: policy_result = self.binding.policy.passes(self.request) - if self.binding.policy.execution_logging: + if self.binding.policy.execution_logging and not self.request.debug: self.create_event( EventAction.POLICY_EXECUTION, message="Policy Execution", @@ -94,8 +94,9 @@ class PolicyProcess(PROCESS_CLASS): + "".join(format_tb(src_exc.__traceback__)) + str(src_exc) ) - # Create policy exception event - self.create_event(EventAction.POLICY_EXCEPTION, message=error_string) + # Create policy exception event, only when we're not debugging + if not self.request.debug: + self.create_event(EventAction.POLICY_EXCEPTION, message=error_string) LOGGER.debug("P_ENG(proc): error", exc=src_exc) policy_result = PolicyResult(False, str(src_exc)) policy_result.source_policy = self.binding.policy diff --git a/authentik/policies/types.py b/authentik/policies/types.py index df2ad1951..4ffa7a8a1 100644 --- a/authentik/policies/types.py +++ b/authentik/policies/types.py @@ -20,6 +20,7 @@ class PolicyRequest: http_request: Optional[HttpRequest] obj: Optional[Model] context: dict[str, Any] + debug: bool = False def __init__(self, user: User): super().__init__() diff --git a/authentik/providers/saml/api.py b/authentik/providers/saml/api.py index ee2badc73..11d02bf62 100644 --- a/authentik/providers/saml/api.py +++ b/authentik/providers/saml/api.py @@ -11,7 +11,7 @@ from rest_framework.viewsets import ModelViewSet from authentik.core.api.providers import ProviderSerializer from authentik.core.api.utils import MetaNameSerializer from authentik.providers.saml.models import SAMLPropertyMapping, SAMLProvider -from authentik.providers.saml.views import DescriptorDownloadView +from authentik.providers.saml.views.metadata import DescriptorDownloadView class SAMLProviderSerializer(ProviderSerializer): diff --git a/authentik/providers/saml/managed.py b/authentik/providers/saml/managed.py index d20467ec1..e191759d5 100644 --- a/authentik/providers/saml/managed.py +++ b/authentik/providers/saml/managed.py @@ -19,6 +19,7 @@ class SAMLProviderManager(ObjectManager): name="authentik default SAML Mapping: UPN", saml_name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn", expression="return user.attributes.get('upn', user.email)", + friendly_name="", ), EnsureExists( SAMLPropertyMapping, @@ -26,6 +27,7 @@ class SAMLProviderManager(ObjectManager): name="authentik default SAML Mapping: Name", saml_name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", expression="return user.name", + friendly_name="", ), EnsureExists( SAMLPropertyMapping, @@ -33,6 +35,7 @@ class SAMLProviderManager(ObjectManager): name="authentik default SAML Mapping: Email", saml_name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", expression="return user.email", + friendly_name="", ), EnsureExists( SAMLPropertyMapping, @@ -40,6 +43,7 @@ class SAMLProviderManager(ObjectManager): name="authentik default SAML Mapping: Username", saml_name="http://schemas.goauthentik.io/2021/02/saml/username", expression="return user.username", + friendly_name="", ), EnsureExists( SAMLPropertyMapping, @@ -47,6 +51,7 @@ class SAMLProviderManager(ObjectManager): name="authentik default SAML Mapping: User ID", saml_name="http://schemas.goauthentik.io/2021/02/saml/uid", expression="return user.pk", + friendly_name="", ), EnsureExists( SAMLPropertyMapping, @@ -54,6 +59,7 @@ class SAMLProviderManager(ObjectManager): name="authentik default SAML Mapping: Groups", saml_name="http://schemas.xmlsoap.org/claims/Group", expression=GROUP_EXPRESSION, + friendly_name="", ), EnsureExists( SAMLPropertyMapping, @@ -63,5 +69,6 @@ class SAMLProviderManager(ObjectManager): "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname" ), expression="return user.username", + friendly_name="", ), ] diff --git a/authentik/providers/saml/urls.py b/authentik/providers/saml/urls.py index 2f3ce3ec9..2b27fcdc3 100644 --- a/authentik/providers/saml/urls.py +++ b/authentik/providers/saml/urls.py @@ -1,29 +1,29 @@ """authentik SAML IDP URLs""" from django.urls import path -from authentik.providers.saml import views +from authentik.providers.saml.views import metadata, sso urlpatterns = [ # SSO Bindings path( "/sso/binding/redirect/", - views.SAMLSSOBindingRedirectView.as_view(), + sso.SAMLSSOBindingRedirectView.as_view(), name="sso-redirect", ), path( "/sso/binding/post/", - views.SAMLSSOBindingPOSTView.as_view(), + sso.SAMLSSOBindingPOSTView.as_view(), name="sso-post", ), # SSO IdP Initiated path( "/sso/binding/init/", - views.SAMLSSOBindingInitView.as_view(), + sso.SAMLSSOBindingInitView.as_view(), name="sso-init", ), path( "/metadata/", - views.DescriptorDownloadView.as_view(), + metadata.DescriptorDownloadView.as_view(), name="metadata", ), ] diff --git a/authentik/providers/saml/views.py b/authentik/providers/saml/views.py deleted file mode 100644 index 98bb446f8..000000000 --- a/authentik/providers/saml/views.py +++ /dev/null @@ -1,284 +0,0 @@ -"""authentik SAML IDP Views""" -from typing import Optional - -from django.contrib import messages -from django.contrib.auth.mixins import LoginRequiredMixin -from django.core.validators import URLValidator -from django.http import HttpRequest, HttpResponse -from django.shortcuts import get_object_or_404, redirect, render -from django.urls.base import reverse_lazy -from django.utils.decorators import method_decorator -from django.utils.http import urlencode -from django.utils.translation import gettext_lazy as _ -from django.views import View -from django.views.decorators.csrf import csrf_exempt -from django.views.generic.edit import FormView -from structlog.stdlib import get_logger - -from authentik.core.models import Application, Provider -from authentik.events.models import Event, EventAction -from authentik.flows.models import in_memory_stage -from authentik.flows.planner import ( - PLAN_CONTEXT_APPLICATION, - PLAN_CONTEXT_SSO, - FlowPlanner, -) -from authentik.flows.stage import StageView -from authentik.flows.views import SESSION_KEY_PLAN -from authentik.lib.utils.urls import redirect_with_qs -from authentik.lib.views import bad_request_message -from authentik.policies.views import PolicyAccessView -from authentik.providers.saml.exceptions import CannotHandleAssertion -from authentik.providers.saml.forms import SAMLProviderImportForm -from authentik.providers.saml.models import SAMLBindings, SAMLProvider -from authentik.providers.saml.processors.assertion import AssertionProcessor -from authentik.providers.saml.processors.metadata import MetadataProcessor -from authentik.providers.saml.processors.metadata_parser import ( - ServiceProviderMetadataParser, -) -from authentik.providers.saml.processors.request_parser import ( - AuthNRequest, - AuthNRequestParser, -) -from authentik.providers.saml.utils.encoding import deflate_and_base64_encode, nice64 -from authentik.stages.consent.stage import PLAN_CONTEXT_CONSENT_TEMPLATE - -LOGGER = get_logger() -URL_VALIDATOR = URLValidator(schemes=("http", "https")) -REQUEST_KEY_SAML_REQUEST = "SAMLRequest" -REQUEST_KEY_SAML_SIGNATURE = "Signature" -REQUEST_KEY_SAML_SIG_ALG = "SigAlg" -REQUEST_KEY_SAML_RESPONSE = "SAMLResponse" -REQUEST_KEY_RELAY_STATE = "RelayState" - -SESSION_KEY_AUTH_N_REQUEST = "authn_request" - - -class SAMLSSOView(PolicyAccessView): - """ "SAML SSO Base View, which plans a flow and injects our final stage. - Calls get/post handler.""" - - def resolve_provider_application(self): - self.application = get_object_or_404( - Application, slug=self.kwargs["application_slug"] - ) - self.provider: SAMLProvider = get_object_or_404( - SAMLProvider, pk=self.application.provider_id - ) - - def check_saml_request(self) -> Optional[HttpRequest]: - """Handler to verify the SAML Request. Must be implemented by a subclass""" - raise NotImplementedError - - # pylint: disable=unused-argument - def get(self, request: HttpRequest, application_slug: str) -> HttpResponse: - """Verify the SAML Request, and if valid initiate the FlowPlanner for the application""" - # Call the method handler, which checks the SAML - # Request and returns a HTTP Response on error - method_response = self.check_saml_request() - if method_response: - return method_response - # Regardless, we start the planner and return to it - planner = FlowPlanner(self.provider.authorization_flow) - planner.allow_empty_flows = True - plan = planner.plan( - request, - { - PLAN_CONTEXT_SSO: True, - PLAN_CONTEXT_APPLICATION: self.application, - PLAN_CONTEXT_CONSENT_TEMPLATE: "providers/saml/consent.html", - }, - ) - plan.append(in_memory_stage(SAMLFlowFinalView)) - request.session[SESSION_KEY_PLAN] = plan - return redirect_with_qs( - "authentik_flows:flow-executor-shell", - request.GET, - flow_slug=self.provider.authorization_flow.slug, - ) - - def post(self, request: HttpRequest, application_slug: str) -> HttpResponse: - """GET and POST use the same handler, but we can't - override .dispatch easily because PolicyAccessView's dispatch""" - return self.get(request, application_slug) - - -class SAMLSSOBindingRedirectView(SAMLSSOView): - """SAML Handler for SSO/Redirect bindings, which are sent via GET""" - - def check_saml_request(self) -> Optional[HttpRequest]: - """Handle REDIRECT bindings""" - if REQUEST_KEY_SAML_REQUEST not in self.request.GET: - LOGGER.info("handle_saml_request: SAML payload missing") - return bad_request_message( - self.request, "The SAML request payload is missing." - ) - - try: - auth_n_request = AuthNRequestParser(self.provider).parse_detached( - self.request.GET[REQUEST_KEY_SAML_REQUEST], - self.request.GET.get(REQUEST_KEY_RELAY_STATE), - self.request.GET.get(REQUEST_KEY_SAML_SIGNATURE), - self.request.GET.get(REQUEST_KEY_SAML_SIG_ALG), - ) - self.request.session[SESSION_KEY_AUTH_N_REQUEST] = auth_n_request - except CannotHandleAssertion as exc: - Event.new( - EventAction.CONFIGURATION_ERROR, - provider=self.provider, - message=str(exc), - ).save() - LOGGER.info(str(exc)) - return bad_request_message(self.request, str(exc)) - return None - - -@method_decorator(csrf_exempt, name="dispatch") -class SAMLSSOBindingPOSTView(SAMLSSOView): - """SAML Handler for SSO/POST bindings""" - - def check_saml_request(self) -> Optional[HttpRequest]: - """Handle POST bindings""" - if REQUEST_KEY_SAML_REQUEST not in self.request.POST: - LOGGER.info("check_saml_request: SAML payload missing") - return bad_request_message( - self.request, "The SAML request payload is missing." - ) - - try: - auth_n_request = AuthNRequestParser(self.provider).parse( - self.request.POST[REQUEST_KEY_SAML_REQUEST], - self.request.POST.get(REQUEST_KEY_RELAY_STATE), - ) - self.request.session[SESSION_KEY_AUTH_N_REQUEST] = auth_n_request - except CannotHandleAssertion as exc: - LOGGER.info(str(exc)) - return bad_request_message(self.request, str(exc)) - return None - - -class SAMLSSOBindingInitView(SAMLSSOView): - """SAML Handler for for IdP Initiated login flows""" - - def check_saml_request(self) -> Optional[HttpRequest]: - """Create SAML Response from scratch""" - LOGGER.debug( - "handle_saml_no_request: No SAML Request, using IdP-initiated flow." - ) - auth_n_request = AuthNRequestParser(self.provider).idp_initiated() - self.request.session[SESSION_KEY_AUTH_N_REQUEST] = auth_n_request - - -# This View doesn't have a URL on purpose, as its called by the FlowExecutor -class SAMLFlowFinalView(StageView): - """View used by FlowExecutor after all stages have passed. Logs the authorization, - and redirects to the SP (if REDIRECT is configured) or shows and auto-submit for - (if POST is configured).""" - - def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: - application: Application = self.executor.plan.context[PLAN_CONTEXT_APPLICATION] - provider: SAMLProvider = get_object_or_404( - SAMLProvider, pk=application.provider_id - ) - # Log Application Authorization - Event.new( - EventAction.AUTHORIZE_APPLICATION, - authorized_application=application, - flow=self.executor.plan.flow_pk, - ).from_http(self.request) - - if SESSION_KEY_AUTH_N_REQUEST not in self.request.session: - return self.executor.stage_invalid() - - auth_n_request: AuthNRequest = self.request.session.pop( - SESSION_KEY_AUTH_N_REQUEST - ) - response = AssertionProcessor( - provider, request, auth_n_request - ).build_response() - - if provider.sp_binding == SAMLBindings.POST: - form_attrs = { - "ACSUrl": provider.acs_url, - REQUEST_KEY_SAML_RESPONSE: nice64(response), - } - if auth_n_request.relay_state: - form_attrs[REQUEST_KEY_RELAY_STATE] = auth_n_request.relay_state - return render( - self.request, - "generic/autosubmit_form.html", - { - "url": provider.acs_url, - "title": _("Redirecting to %(app)s..." % {"app": application.name}), - "attrs": form_attrs, - }, - ) - if provider.sp_binding == SAMLBindings.REDIRECT: - url_args = { - REQUEST_KEY_SAML_RESPONSE: deflate_and_base64_encode(response), - } - if auth_n_request.relay_state: - url_args[REQUEST_KEY_RELAY_STATE] = auth_n_request.relay_state - querystring = urlencode(url_args) - return redirect(f"{provider.acs_url}?{querystring}") - return bad_request_message(request, "Invalid sp_binding specified") - - -class DescriptorDownloadView(View): - """Replies with the XML Metadata IDSSODescriptor.""" - - @staticmethod - def get_metadata(request: HttpRequest, provider: SAMLProvider) -> str: - """Return rendered XML Metadata""" - return MetadataProcessor(provider, request).build_entity_descriptor() - - def get(self, request: HttpRequest, application_slug: str) -> HttpResponse: - """Replies with the XML Metadata IDSSODescriptor.""" - application = get_object_or_404(Application, slug=application_slug) - provider: SAMLProvider = get_object_or_404( - SAMLProvider, pk=application.provider_id - ) - try: - metadata = DescriptorDownloadView.get_metadata(request, provider) - except Provider.application.RelatedObjectDoesNotExist: # pylint: disable=no-member - return bad_request_message( - request, "Provider is not assigned to an application." - ) - else: - response = HttpResponse(metadata, content_type="application/xml") - response[ - "Content-Disposition" - ] = f'attachment; filename="{provider.name}_authentik_meta.xml"' - return response - - -class MetadataImportView(LoginRequiredMixin, FormView): - """Import Metadata from XML, and create provider""" - - form_class = SAMLProviderImportForm - template_name = "providers/saml/import.html" - success_url = reverse_lazy("authentik_admin:providers") - - def dispatch(self, request, *args, **kwargs): - if not request.user.is_superuser: - return self.handle_no_permission() - return super().dispatch(request, *args, **kwargs) - - def form_valid(self, form: SAMLProviderImportForm) -> HttpResponse: - try: - metadata = ServiceProviderMetadataParser().parse( - form.cleaned_data["metadata"].read().decode() - ) - metadata.to_provider( - form.cleaned_data["provider_name"], - form.cleaned_data["authorization_flow"], - ) - messages.success(self.request, _("Successfully created Provider")) - except ValueError as exc: - LOGGER.warning(str(exc)) - messages.error( - self.request, - _("Failed to import Metadata: %(message)s" % {"message": str(exc)}), - ) - return super().form_invalid(form) - return super().form_valid(form) diff --git a/authentik/providers/saml/views/__init__.py b/authentik/providers/saml/views/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/authentik/providers/saml/views/flows.py b/authentik/providers/saml/views/flows.py new file mode 100644 index 000000000..eb0b08d63 --- /dev/null +++ b/authentik/providers/saml/views/flows.py @@ -0,0 +1,82 @@ +"""authentik SAML IDP Views""" +from django.core.validators import URLValidator +from django.http import HttpRequest, HttpResponse +from django.shortcuts import get_object_or_404, redirect, render +from django.utils.http import urlencode +from django.utils.translation import gettext_lazy as _ +from structlog.stdlib import get_logger + +from authentik.core.models import Application +from authentik.events.models import Event, EventAction +from authentik.flows.planner import PLAN_CONTEXT_APPLICATION +from authentik.flows.stage import StageView +from authentik.lib.views import bad_request_message +from authentik.providers.saml.models import SAMLBindings, SAMLProvider +from authentik.providers.saml.processors.assertion import AssertionProcessor +from authentik.providers.saml.processors.request_parser import AuthNRequest +from authentik.providers.saml.utils.encoding import deflate_and_base64_encode, nice64 + +LOGGER = get_logger() +URL_VALIDATOR = URLValidator(schemes=("http", "https")) +REQUEST_KEY_SAML_REQUEST = "SAMLRequest" +REQUEST_KEY_SAML_SIGNATURE = "Signature" +REQUEST_KEY_SAML_SIG_ALG = "SigAlg" +REQUEST_KEY_SAML_RESPONSE = "SAMLResponse" +REQUEST_KEY_RELAY_STATE = "RelayState" + +SESSION_KEY_AUTH_N_REQUEST = "authn_request" + + +# This View doesn't have a URL on purpose, as its called by the FlowExecutor +class SAMLFlowFinalView(StageView): + """View used by FlowExecutor after all stages have passed. Logs the authorization, + and redirects to the SP (if REDIRECT is configured) or shows and auto-submit for + (if POST is configured).""" + + def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: + application: Application = self.executor.plan.context[PLAN_CONTEXT_APPLICATION] + provider: SAMLProvider = get_object_or_404( + SAMLProvider, pk=application.provider_id + ) + # Log Application Authorization + Event.new( + EventAction.AUTHORIZE_APPLICATION, + authorized_application=application, + flow=self.executor.plan.flow_pk, + ).from_http(self.request) + + if SESSION_KEY_AUTH_N_REQUEST not in self.request.session: + return self.executor.stage_invalid() + + auth_n_request: AuthNRequest = self.request.session.pop( + SESSION_KEY_AUTH_N_REQUEST + ) + response = AssertionProcessor( + provider, request, auth_n_request + ).build_response() + + if provider.sp_binding == SAMLBindings.POST: + form_attrs = { + "ACSUrl": provider.acs_url, + REQUEST_KEY_SAML_RESPONSE: nice64(response), + } + if auth_n_request.relay_state: + form_attrs[REQUEST_KEY_RELAY_STATE] = auth_n_request.relay_state + return render( + self.request, + "generic/autosubmit_form.html", + { + "url": provider.acs_url, + "title": _("Redirecting to %(app)s..." % {"app": application.name}), + "attrs": form_attrs, + }, + ) + if provider.sp_binding == SAMLBindings.REDIRECT: + url_args = { + REQUEST_KEY_SAML_RESPONSE: deflate_and_base64_encode(response), + } + if auth_n_request.relay_state: + url_args[REQUEST_KEY_RELAY_STATE] = auth_n_request.relay_state + querystring = urlencode(url_args) + return redirect(f"{provider.acs_url}?{querystring}") + return bad_request_message(request, "Invalid sp_binding specified") diff --git a/authentik/providers/saml/views/metadata.py b/authentik/providers/saml/views/metadata.py new file mode 100644 index 000000000..02e185059 --- /dev/null +++ b/authentik/providers/saml/views/metadata.py @@ -0,0 +1,82 @@ +"""authentik SAML IDP Views""" + +from django.contrib import messages +from django.contrib.auth.mixins import LoginRequiredMixin +from django.http import HttpRequest, HttpResponse +from django.shortcuts import get_object_or_404 +from django.urls.base import reverse_lazy +from django.utils.translation import gettext_lazy as _ +from django.views import View +from django.views.generic.edit import FormView +from structlog.stdlib import get_logger + +from authentik.core.models import Application, Provider +from authentik.lib.views import bad_request_message +from authentik.providers.saml.forms import SAMLProviderImportForm +from authentik.providers.saml.models import SAMLProvider +from authentik.providers.saml.processors.metadata import MetadataProcessor +from authentik.providers.saml.processors.metadata_parser import ( + ServiceProviderMetadataParser, +) + +LOGGER = get_logger() + + +class DescriptorDownloadView(View): + """Replies with the XML Metadata IDSSODescriptor.""" + + @staticmethod + def get_metadata(request: HttpRequest, provider: SAMLProvider) -> str: + """Return rendered XML Metadata""" + return MetadataProcessor(provider, request).build_entity_descriptor() + + def get(self, request: HttpRequest, application_slug: str) -> HttpResponse: + """Replies with the XML Metadata IDSSODescriptor.""" + application = get_object_or_404(Application, slug=application_slug) + provider: SAMLProvider = get_object_or_404( + SAMLProvider, pk=application.provider_id + ) + try: + metadata = DescriptorDownloadView.get_metadata(request, provider) + except Provider.application.RelatedObjectDoesNotExist: # pylint: disable=no-member + return bad_request_message( + request, "Provider is not assigned to an application." + ) + else: + response = HttpResponse(metadata, content_type="application/xml") + response[ + "Content-Disposition" + ] = f'attachment; filename="{provider.name}_authentik_meta.xml"' + return response + + +class MetadataImportView(LoginRequiredMixin, FormView): + """Import Metadata from XML, and create provider""" + + form_class = SAMLProviderImportForm + template_name = "providers/saml/import.html" + success_url = reverse_lazy("authentik_admin:providers") + + def dispatch(self, request, *args, **kwargs): + if not request.user.is_superuser: + return self.handle_no_permission() + return super().dispatch(request, *args, **kwargs) + + def form_valid(self, form: SAMLProviderImportForm) -> HttpResponse: + try: + metadata = ServiceProviderMetadataParser().parse( + form.cleaned_data["metadata"].read().decode() + ) + metadata.to_provider( + form.cleaned_data["provider_name"], + form.cleaned_data["authorization_flow"], + ) + messages.success(self.request, _("Successfully created Provider")) + except ValueError as exc: + LOGGER.warning(str(exc)) + messages.error( + self.request, + _("Failed to import Metadata: %(message)s" % {"message": str(exc)}), + ) + return super().form_invalid(form) + return super().form_valid(form) diff --git a/authentik/providers/saml/views/sso.py b/authentik/providers/saml/views/sso.py new file mode 100644 index 000000000..8c217d2af --- /dev/null +++ b/authentik/providers/saml/views/sso.py @@ -0,0 +1,150 @@ +"""authentik SAML IDP Views""" +from typing import Optional + +from django.http import HttpRequest, HttpResponse +from django.shortcuts import get_object_or_404 +from django.utils.decorators import method_decorator +from django.views.decorators.csrf import csrf_exempt +from structlog.stdlib import get_logger + +from authentik.core.models import Application +from authentik.events.models import Event, EventAction +from authentik.flows.models import in_memory_stage +from authentik.flows.planner import ( + PLAN_CONTEXT_APPLICATION, + PLAN_CONTEXT_SSO, + FlowPlanner, +) +from authentik.flows.views import SESSION_KEY_PLAN +from authentik.lib.utils.urls import redirect_with_qs +from authentik.lib.views import bad_request_message +from authentik.policies.views import PolicyAccessView +from authentik.providers.saml.exceptions import CannotHandleAssertion +from authentik.providers.saml.models import SAMLProvider +from authentik.providers.saml.processors.request_parser import AuthNRequestParser +from authentik.providers.saml.views.flows import ( + REQUEST_KEY_RELAY_STATE, + REQUEST_KEY_SAML_REQUEST, + REQUEST_KEY_SAML_SIG_ALG, + REQUEST_KEY_SAML_SIGNATURE, + SESSION_KEY_AUTH_N_REQUEST, + SAMLFlowFinalView, +) +from authentik.stages.consent.stage import PLAN_CONTEXT_CONSENT_TEMPLATE + +LOGGER = get_logger() + + +class SAMLSSOView(PolicyAccessView): + """ "SAML SSO Base View, which plans a flow and injects our final stage. + Calls get/post handler.""" + + def resolve_provider_application(self): + self.application = get_object_or_404( + Application, slug=self.kwargs["application_slug"] + ) + self.provider: SAMLProvider = get_object_or_404( + SAMLProvider, pk=self.application.provider_id + ) + + def check_saml_request(self) -> Optional[HttpRequest]: + """Handler to verify the SAML Request. Must be implemented by a subclass""" + raise NotImplementedError + + # pylint: disable=unused-argument + def get(self, request: HttpRequest, application_slug: str) -> HttpResponse: + """Verify the SAML Request, and if valid initiate the FlowPlanner for the application""" + # Call the method handler, which checks the SAML + # Request and returns a HTTP Response on error + method_response = self.check_saml_request() + if method_response: + return method_response + # Regardless, we start the planner and return to it + planner = FlowPlanner(self.provider.authorization_flow) + planner.allow_empty_flows = True + plan = planner.plan( + request, + { + PLAN_CONTEXT_SSO: True, + PLAN_CONTEXT_APPLICATION: self.application, + PLAN_CONTEXT_CONSENT_TEMPLATE: "providers/saml/consent.html", + }, + ) + plan.append(in_memory_stage(SAMLFlowFinalView)) + request.session[SESSION_KEY_PLAN] = plan + return redirect_with_qs( + "authentik_flows:flow-executor-shell", + request.GET, + flow_slug=self.provider.authorization_flow.slug, + ) + + def post(self, request: HttpRequest, application_slug: str) -> HttpResponse: + """GET and POST use the same handler, but we can't + override .dispatch easily because PolicyAccessView's dispatch""" + return self.get(request, application_slug) + + +class SAMLSSOBindingRedirectView(SAMLSSOView): + """SAML Handler for SSO/Redirect bindings, which are sent via GET""" + + def check_saml_request(self) -> Optional[HttpRequest]: + """Handle REDIRECT bindings""" + if REQUEST_KEY_SAML_REQUEST not in self.request.GET: + LOGGER.info("handle_saml_request: SAML payload missing") + return bad_request_message( + self.request, "The SAML request payload is missing." + ) + + try: + auth_n_request = AuthNRequestParser(self.provider).parse_detached( + self.request.GET[REQUEST_KEY_SAML_REQUEST], + self.request.GET.get(REQUEST_KEY_RELAY_STATE), + self.request.GET.get(REQUEST_KEY_SAML_SIGNATURE), + self.request.GET.get(REQUEST_KEY_SAML_SIG_ALG), + ) + self.request.session[SESSION_KEY_AUTH_N_REQUEST] = auth_n_request + except CannotHandleAssertion as exc: + Event.new( + EventAction.CONFIGURATION_ERROR, + provider=self.provider, + message=str(exc), + ).save() + LOGGER.info(str(exc)) + return bad_request_message(self.request, str(exc)) + return None + + +@method_decorator(csrf_exempt, name="dispatch") +class SAMLSSOBindingPOSTView(SAMLSSOView): + """SAML Handler for SSO/POST bindings""" + + def check_saml_request(self) -> Optional[HttpRequest]: + """Handle POST bindings""" + if REQUEST_KEY_SAML_REQUEST not in self.request.POST: + LOGGER.info("check_saml_request: SAML payload missing") + return bad_request_message( + self.request, "The SAML request payload is missing." + ) + + try: + auth_n_request = AuthNRequestParser(self.provider).parse( + self.request.POST[REQUEST_KEY_SAML_REQUEST], + self.request.POST.get(REQUEST_KEY_RELAY_STATE), + ) + self.request.session[SESSION_KEY_AUTH_N_REQUEST] = auth_n_request + except CannotHandleAssertion as exc: + LOGGER.info(str(exc)) + return bad_request_message(self.request, str(exc)) + return None + + +class SAMLSSOBindingInitView(SAMLSSOView): + """SAML Handler for for IdP Initiated login flows""" + + def check_saml_request(self) -> Optional[HttpRequest]: + """Create SAML Response from scratch""" + LOGGER.debug( + "handle_saml_no_request: No SAML Request, using IdP-initiated flow." + ) + auth_n_request = AuthNRequestParser(self.provider).idp_initiated() + self.request.session[SESSION_KEY_AUTH_N_REQUEST] = auth_n_request diff --git a/authentik/root/asgi.py b/authentik/root/asgi.py index e3dd85374..2beb79dd0 100644 --- a/authentik/root/asgi.py +++ b/authentik/root/asgi.py @@ -94,12 +94,6 @@ class ASGILogger: self.log(runtime) await send(message) - if self.headers.get(b"host", b"") == b"authentik-healthcheck-host": - # Don't log healthcheck/readiness requests - await send({"type": "http.response.start", "status": 204, "headers": []}) - await send({"type": "http.response.body", "body": ""}) - return - self.start = time() if scope["type"] == "lifespan": # https://code.djangoproject.com/ticket/31508 @@ -129,7 +123,7 @@ class ASGILogger: method=self.scope.get("method", ""), scheme=self.scope.get("scheme", ""), status=self.status_code, - size=self.content_length / 1000 if self.content_length > 0 else "-", + size=self.content_length / 1000 if self.content_length > 0 else 0, runtime=runtime, ) diff --git a/authentik/root/monitoring.py b/authentik/root/monitoring.py index 1ffa0d87f..7b2aaa972 100644 --- a/authentik/root/monitoring.py +++ b/authentik/root/monitoring.py @@ -2,6 +2,8 @@ from base64 import b64encode from django.conf import settings +from django.db import connections +from django.db.utils import OperationalError from django.http import HttpRequest, HttpResponse from django.views import View from django_prometheus.exports import ExportToDjangoView @@ -23,3 +25,22 @@ class MetricsView(View): return response return ExportToDjangoView(request) + + +class LiveView(View): + """View for liveness probe, always returns Http 201""" + + def dispatch(self, request: HttpRequest) -> HttpResponse: + return HttpResponse(status=201) + + +class ReadyView(View): + """View for liveness probe, always returns Http 201""" + + def dispatch(self, request: HttpRequest) -> HttpResponse: + db_conn = connections["default"] + try: + _ = db_conn.cursor() + except OperationalError: + return HttpResponse(status=503) + return HttpResponse(status=201) diff --git a/authentik/root/urls.py b/authentik/root/urls.py index ec166b070..f920680c0 100644 --- a/authentik/root/urls.py +++ b/authentik/root/urls.py @@ -9,7 +9,7 @@ from structlog.stdlib import get_logger from authentik.core.views import error from authentik.lib.utils.reflection import get_apps -from authentik.root.monitoring import MetricsView +from authentik.root.monitoring import LiveView, MetricsView, ReadyView LOGGER = get_logger() admin.autodiscover() @@ -57,6 +57,8 @@ for _authentik_app in get_apps(): urlpatterns += [ path("administration/django/", admin.site.urls), path("metrics/", MetricsView.as_view(), name="metrics"), + path("-/health/live/", LiveView.as_view(), name="health-live"), + path("-/health/ready/", ReadyView.as_view(), name="health-ready"), path("-/jsi18n/", JavaScriptCatalog.as_view(), name="javascript-catalog"), ] diff --git a/docker-compose.yml b/docker-compose.yml index 72b476918..a4e1e1056 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -40,7 +40,7 @@ services: traefik.http.routers.app-router.rule: PathPrefix(`/`) traefik.http.routers.app-router.service: app-service traefik.http.routers.app-router.tls: 'true' - traefik.http.services.app-service.loadbalancer.healthcheck.hostname: authentik-healthcheck-host + traefik.http.services.app-service.loadbalancer.healthcheck.path: /-/health/live/ traefik.http.services.app-service.loadbalancer.server.port: '8000' env_file: - .env diff --git a/helm/templates/web-deployment.yaml b/helm/templates/web-deployment.yaml index cf80508bd..c30562287 100644 --- a/helm/templates/web-deployment.yaml +++ b/helm/templates/web-deployment.yaml @@ -97,18 +97,12 @@ spec: protocol: TCP livenessProbe: httpGet: - path: / + path: /-/health/live/ port: http - httpHeaders: - - name: Host - value: authentik-healthcheck-host readinessProbe: httpGet: - path: / + path: /-/health/ready/ port: http - httpHeaders: - - name: Host - value: authentik-healthcheck-host resources: requests: cpu: 100m diff --git a/outpost/pkg/ak/api_ws.go b/outpost/pkg/ak/api_ws.go index 31c4da89e..b1286150c 100644 --- a/outpost/pkg/ak/api_ws.go +++ b/outpost/pkg/ak/api_ws.go @@ -77,7 +77,15 @@ func (ac *APIController) startWSHandler() { logger.WithField("wait", notConnectedWait).Info("Not connected, trying again...") time.Sleep(notConnectedWait) notConnectedBackoff += notConnectedBackoff + // Limit backoff to max 60 seconds + if notConnectedBackoff >= 60 { + notConnectedBackoff = 60 + } + ac.wsConn.CloseAndReconnect() continue + } else { + // When we're connected, reset backoff to 1 + notConnectedBackoff = 1 } var wsMsg websocketMessage err := ac.wsConn.ReadJSON(&wsMsg) @@ -109,7 +117,7 @@ func (ac *APIController) startWSHealth() { }, } err := ac.wsConn.WriteJSON(aliveMsg) - ac.logger.WithField("loop", "ws-health").Debug("hello'd") + ac.logger.WithField("loop", "ws-health").Trace("hello'd") if err != nil { ac.logger.WithField("loop", "ws-health").Println("write:", err) ac.wsConn.CloseAndReconnect() diff --git a/web/package-lock.json b/web/package-lock.json index ee3a5ca22..f87a1f300 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1537,9 +1537,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, "functional-red-black-tree": { @@ -2638,9 +2638,9 @@ } }, "rollup": { - "version": "2.38.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.4.tgz", - "integrity": "sha512-B0LcJhjiwKkTl79aGVF/u5KdzsH8IylVfV56Ut6c9ouWLJcUK17T83aZBetNYSnZtXf2OHD4+2PbmRW+Fp5ulg==", + "version": "2.38.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.5.tgz", + "integrity": "sha512-VoWt8DysFGDVRGWuHTqZzT02J0ASgjVq/hPs9QcBOGMd7B+jfTr/iqMVEyOi901rE3xq+Deq66GzIT1yt7sGwQ==", "requires": { "fsevents": "~2.3.1" } diff --git a/web/package.json b/web/package.json index 8a109562f..333f056d5 100644 --- a/web/package.json +++ b/web/package.json @@ -22,7 +22,7 @@ "flowchart.js": "^1.15.0", "lit-element": "^2.4.0", "lit-html": "^1.3.0", - "rollup": "^2.38.4", + "rollup": "^2.38.5", "rollup-plugin-copy": "^3.3.0", "rollup-plugin-cssimport": "^1.0.2", "rollup-plugin-external-globals": "^0.6.1", diff --git a/web/src/interfaces/AdminInterface.ts b/web/src/interfaces/AdminInterface.ts index d370e04d8..a6482ea20 100644 --- a/web/src/interfaces/AdminInterface.ts +++ b/web/src/interfaces/AdminInterface.ts @@ -28,7 +28,7 @@ export const SIDEBAR_ITEMS: SidebarItem[] = [ ), new SidebarItem("Providers", "/providers"), new SidebarItem("Outposts", "/administration/outposts/"), - new SidebarItem("Outpost Service Connections", "/administration/outposts/service_connections/"), + new SidebarItem("Outpost Service Connections", "/administration/outpost_service_connections/"), ).when((): Promise => { return User.me().then(u => u.is_superuser); }), diff --git a/web/src/pages/admin-overview/AdminOverviewPage.ts b/web/src/pages/admin-overview/AdminOverviewPage.ts index ac7a3f79b..b825f8d0e 100644 --- a/web/src/pages/admin-overview/AdminOverviewPage.ts +++ b/web/src/pages/admin-overview/AdminOverviewPage.ts @@ -36,7 +36,7 @@ export class AdminOverviewPage extends LitElement { - + diff --git a/website/docs/integrations/services/awx-tower/index.md b/website/docs/integrations/services/awx-tower/index.md index 7e398ed70..c566c7b6e 100644 --- a/website/docs/integrations/services/awx-tower/index.md +++ b/website/docs/integrations/services/awx-tower/index.md @@ -68,7 +68,6 @@ In the `SAML Enabled Identity Providers` paste the following configuration: "attr_user_permanent_id": "http://schemas.goauthentik.io/2021/02/saml/uid", "x509cert": "MIIDEjCCAfqgAwIBAgIRAJZ9pOZ1g0xjiHtQAAejsMEwDQYJKoZIhvcNAQELBQAwMDEuMCwGA1UEAwwlcGFzc2Jvb2sgU2VsZi1zaWduZWQgU0FNTCBDZXJ0aWZpY2F0ZTAeFw0xOTEyMjYyMDEwNDFaFw0yMDEyMjYyMDEwNDFaMFkxLjAsBgNVBAMMJXBhc3Nib29rIFNlbGYtc2lnbmVkIFNBTUwgQ2VydGlmaWNhdGUxETAPBgNVBAoMCHBhc3Nib29rMRQwEgYDVQQLDAtTZWxmLXNpZ25lZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO/ktBYZkY9xAijF4acvzX6Q1K8KoIZeyde8fVgcWBz4L5FgDQ4/dni4k2YAcPdwteGL4nKVzetUzjbRCBUNuO6lqU4J4WNNX4Xg4Ir7XLRoAQeo+omTPBdpJ1p02HjtN5jT01umN3bK2yto1e37CJhK6WJiaXqRewPxh4lI4aqdj3BhFkJ3I3r2qxaWOAXQ6X7fg3w/ny7QP53//ouZo7hSLY3GIcRKgvdjjVM3OW5C3WLpOq5Dez5GWVJ17aeFCfGQ8bwFKde6qfYqyGcU9xHB36TtVHB9hSFP/tUFhkiSOxtsrYwCgCyXm4UTSpP+wiNyjKfFw7qGLBvA2hGTNw8CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAh9PeAqPRQk1/SSygIFADZBi08O/DPCshFwEHvJATIcTzcDD8UGAjXh+H5OlkDyX7KyrcaNvYaafCUo63A+WprdtdY5Ty6SBEwTYyiQyQfwM9BfK+imCoif1Ai7xAelD7p9lNazWq7JU+H/Ep7U7Q7LvpxAbK0JArt+IWTb2NcMb3OWE1r0gFbs44O1l6W9UbJTbyLMzbGbe5i+NHlgnwPwuhtRMh0NUYabGHKcHbhwyFhfGAQv2dAp5KF1E5gu6ZzCiFePzc0FrqXQyb2zpFYcJHXquiqaOeG7cZxRHYcjrl10Vxzki64XVA9BpdELgKSnupDGUEJsRUt3WVOmvZuA==", "url": "https://authentik.company/application/saml/awx/login/", - "attr_last_name": "User.LastName", "entity_id": "https://awx.company/sso/metadata/saml/", "attr_email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", "attr_first_name": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" diff --git a/website/docs/integrations/services/rancher/index.md b/website/docs/integrations/services/rancher/index.md index 526740b69..03ab3796c 100644 --- a/website/docs/integrations/services/rancher/index.md +++ b/website/docs/integrations/services/rancher/index.md @@ -15,17 +15,39 @@ Rancher is a platform built to address the needs of the DevOps teams deploying a The following placeholders will be used: -- `rancher.company` is the FQDN of the Rancher install. -- `authentik.company` is the FQDN of the authentik install. +- `rancher.company` is the FQDN of the Rancher install. +- `authentik.company` is the FQDN of the authentik install. -Create an application in authentik and note the slug, as this will be used later. Create a SAML provider with the following parameters: +Under *Property Mappings*, create a *SAML Property Mapping*. Give it a name like "SAML Rancher User ID". Set the SAML name to `rancherUidUsername` and the expression to the following -- ACS URL: `https://rancher.company/v1-saml/adfs/saml/acs` -- Audience: `https://rancher.company/v1-saml/adfs/saml/metadata` -- Issuer: `authentik` +```python +return f"{user.pk}-{user.username}" +``` + +Create an application in authentik. Create a SAML provider with the following parameters: + +- ACS URL: `https://rancher.company/v1-saml/adfs/saml/acs` +- Audience: `https://rancher.company/v1-saml/adfs/saml/metadata` +- Issuer: `authentik` +- Property mappings: Select all default mappings and the mapping you've created above. You can of course use a custom signing certificate, and adjust durations. ## Rancher +In Rancher, navigate to *Global* -> *Security* -> *Authentication*, and select ADFS. + +Fill in the fields + +- Display Name Field: `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name` +- User Name Field: `http://schemas.goauthentik.io/2021/02/saml/username` +- UID Field: `rancherUidUsername` +- Groups Field: `http://schemas.xmlsoap.org/claims/Group` + +For the private key and certificate, you can either generate a new pair (in authentik, navigate to *Identity & Cryptography* -> *Certificates* and select Generate), or use an existing pair. + +Copy the metadata from authentik, and paste it in the metadata field. + +Click on save to test the authentication. + ![](./rancher.png) diff --git a/website/docs/integrations/services/rancher/rancher.png b/website/docs/integrations/services/rancher/rancher.png index 2e245f147..070142f01 100644 Binary files a/website/docs/integrations/services/rancher/rancher.png and b/website/docs/integrations/services/rancher/rancher.png differ diff --git a/website/docs/integrations/services/sentry/index.md b/website/docs/integrations/services/sentry/index.md index fde310531..25ee9afde 100644 --- a/website/docs/integrations/services/sentry/index.md +++ b/website/docs/integrations/services/sentry/index.md @@ -41,8 +41,8 @@ In authentik, get the Metadata URL by right-clicking `Download Metadata` and sel On the next screen, input these Values -IdP User ID: `http://schemas.goauthentik.io/2021/02/saml/uid` -User Email: `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress` -First Name: `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name` +- IdP User ID: `http://schemas.goauthentik.io/2021/02/saml/uid` +- User Email: `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress` +- First Name: `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name` After confirming, Sentry will authenticate with authentik, and you should be redirected back to a page confirming your settings. diff --git a/website/docs/releases/2021.2.md b/website/docs/releases/2021.2.md index a698048fd..3a599801e 100644 --- a/website/docs/releases/2021.2.md +++ b/website/docs/releases/2021.2.md @@ -44,10 +44,11 @@ Due to the switch to managed objects, some default property mappings are changin The change affects the "SAML Name" property, which has been changed from an oid to a Schema URI to aid readability. The integrations affected are: -- [NextCloud](../integrations/services/nextcloud/index) -- [Sentry](../integrations/services/sentry/index) -- [GitLab](../integrations/services/gitlab/index) -- [Ansible Tower/AWX](../integrations/services/awx-tower/index) +- [Ansible Tower/AWX](/docs/integrations/services/awx-tower/index) +- [GitLab](/docs/integrations/services/gitlab/index) +- [NextCloud](/docs/integrations/services/nextcloud/index) +- [Rancher](/docs/integrations/services/rancher/index) +- [Sentry](/docs/integrations/services/sentry/index) ### docker-compose diff --git a/website/package-lock.json b/website/package-lock.json index aae7ec689..895abc407 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -1,122 +1,143 @@ { - "name": "docs", + "name": "authentik-docs", "version": "0.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { - "@algolia/cache-browser-local-storage": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.6.0.tgz", - "integrity": "sha512-3ObeNwZ5gfDvKPp9NXdtbBrCtz/yR1oyDu/AReG73Oanua3y30Y11p7VQzzpLe2R/gDCLOGdRgr17h11lGy1Hg==", + "@algolia/autocomplete-core": { + "version": "1.0.0-alpha.40", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.40.tgz", + "integrity": "sha512-XOuShCtfGyKrEmX+sl0Yi4qT9fHfFFOpgMnRXfNWclir7aofe/1jYsASa32jf4XXvyLdyAIu9N+BB85tJe6tOA==", "requires": { - "@algolia/cache-common": "4.6.0" + "@algolia/autocomplete-shared": "1.0.0-alpha.40" + } + }, + "@algolia/autocomplete-preset-algolia": { + "version": "1.0.0-alpha.40", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.40.tgz", + "integrity": "sha512-6CWKPzcZVnXND4v3FbaBRfVgWRWPHDSHaIf66Mj7DojmByvy0bHGdJxP5jKIzJRPBUS8aLQaxwKKNes2KNdl0w==", + "requires": { + "@algolia/autocomplete-shared": "1.0.0-alpha.40" + } + }, + "@algolia/autocomplete-shared": { + "version": "1.0.0-alpha.40", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.40.tgz", + "integrity": "sha512-b7I1cTAvJRwJFWTb0RxrheTGpCx/LltrKiy6yLA5CO5+XNsreIPUA2ixxi8QqL8Tmm4HK41nuUtL2VpJw0G98A==" + }, + "@algolia/cache-browser-local-storage": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.8.4.tgz", + "integrity": "sha512-qSS3VMP3oMhcLrYIFveRyt3F5XB6MqWogF4Vooj8KvOvqv6jBmYwkAueSXCF5pkJEaA72VL9+9NbBpfC8ez2ww==", + "requires": { + "@algolia/cache-common": "4.8.4" } }, "@algolia/cache-common": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.6.0.tgz", - "integrity": "sha512-mEedrPb2O3WwtiIHggFoIhTbHVCMNikxMiiN9kqmwZkdDfClfxm435OUGZfAl67rBZfc0DNs/jmPM2mUoefM9A==" + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.8.4.tgz", + "integrity": "sha512-5+dLmj6qFy4WOtnNQuFRfWTIIDdpUigv+dXaKMFplNPBvZHGFy3hcRjWqYzGcqaeLqcXbN8cU5r75mvrlJIxcw==" }, "@algolia/cache-in-memory": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.6.0.tgz", - "integrity": "sha512-J7ayGokVWEFkuLxzgrIsPS4k1/ZndyGVpG/qPrG9RHVrs7ZogEhUSY1tbEyUlW3mGy7diIh+/52dtohDL/nbGQ==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.8.4.tgz", + "integrity": "sha512-PBN4YKxn/L+HjVKqUE5rtLiFKqzm4qnUoF7QvCFFmFAViCdYwZSMFVmDobstqWY3KULfsEqaeD4eU4jxZbKhEA==", "requires": { - "@algolia/cache-common": "4.6.0" + "@algolia/cache-common": "4.8.4" } }, "@algolia/client-account": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.6.0.tgz", - "integrity": "sha512-0t2yU6wNBNJgAmrARHrM1llhANyPT4Q/1wu6yEzv2WfPXlfsHwMhtKYNti4/k8eswwUt9wAri10WFV6TJI48rg==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.8.4.tgz", + "integrity": "sha512-mrsOnGV4O2b+t1CumUH72+Psw9d9qwngBEp2le7IMSceJQywQvNCyJ4B4qyoozHsIGapXfcVAOhRxqUsNQ6U6g==", "requires": { - "@algolia/client-common": "4.6.0", - "@algolia/client-search": "4.6.0", - "@algolia/transporter": "4.6.0" + "@algolia/client-common": "4.8.4", + "@algolia/client-search": "4.8.4", + "@algolia/transporter": "4.8.4" } }, "@algolia/client-analytics": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.6.0.tgz", - "integrity": "sha512-7yfn9pabA21Uw2iZjW1MNN4IJUT5y/YSg+ZJ+3HqBB6SgzOOqY0N3fATsPeGuN9EqSfVnqvnIrJMS8mI0b5FzQ==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.8.4.tgz", + "integrity": "sha512-Xy70njSUgG/QTv5+rPjsTIzBF/bjxseS5h9SawrQGzovTosbJbu9JBlg4YwVJnYvjovzpr7S39+gPIPc8M7+Rg==", "requires": { - "@algolia/client-common": "4.6.0", - "@algolia/client-search": "4.6.0", - "@algolia/requester-common": "4.6.0", - "@algolia/transporter": "4.6.0" + "@algolia/client-common": "4.8.4", + "@algolia/client-search": "4.8.4", + "@algolia/requester-common": "4.8.4", + "@algolia/transporter": "4.8.4" } }, "@algolia/client-common": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.6.0.tgz", - "integrity": "sha512-60jK0LK5H+6q6HyyMyoBBD0fIs8zZzJt6BiyJGQG90o3gUV/SnjiNxO9Bx0RRlqdkE5s0OYFu1L7P9Y5TX7oAw==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.8.4.tgz", + "integrity": "sha512-sQlRa+KWFn+D8AOEZb4kj6RE/i6DnPwVOF4AnNf9IjNB0mUUhLWw96cQN6GDx0KE4lhW67t+qR39ZuuDBgR9ww==", "requires": { - "@algolia/requester-common": "4.6.0", - "@algolia/transporter": "4.6.0" + "@algolia/requester-common": "4.8.4", + "@algolia/transporter": "4.8.4" } }, "@algolia/client-recommendation": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.6.0.tgz", - "integrity": "sha512-j+Yb1z5QeIRDCCO+9hS9oZS3KNqRogPHDbJJsLTt6pkrs4CG2UVLVV67M977B1nzJ9OzaEki3VbpGQhRhPGNfQ==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.8.4.tgz", + "integrity": "sha512-CE0CVqLGWotVOaUXyU33FVD9FZ/7rqcbwFPH5MgSjVdE0B1YWVedhR0s2BNKodXLcIGVLVYfXR05CLdvOlTw+A==", "requires": { - "@algolia/client-common": "4.6.0", - "@algolia/requester-common": "4.6.0", - "@algolia/transporter": "4.6.0" + "@algolia/client-common": "4.8.4", + "@algolia/requester-common": "4.8.4", + "@algolia/transporter": "4.8.4" } }, "@algolia/client-search": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.6.0.tgz", - "integrity": "sha512-+qA1NA88YnXvuCKifegfgts1RQs8IzcwccQqyurz8ins4hypZL1tXN2BkrOqqDIgvYIrUvFyhv+gLO6U9PpDUA==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.8.4.tgz", + "integrity": "sha512-eH2tRPnDU3tqpp0BSqP6coRRQe8fceqsupuf/1ho+Mcs5DM13mEuFmNOyPywHRlYLVPmbbCPRhDr5rB8QoN7XQ==", "requires": { - "@algolia/client-common": "4.6.0", - "@algolia/requester-common": "4.6.0", - "@algolia/transporter": "4.6.0" + "@algolia/client-common": "4.8.4", + "@algolia/requester-common": "4.8.4", + "@algolia/transporter": "4.8.4" } }, "@algolia/logger-common": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.6.0.tgz", - "integrity": "sha512-F+0HTGSQzJfWsX/cJq2l4eG2Y5JA6pqZ0YETyo5XJhZX4JaDrGszVKuOqp8kovZF/Ifebywxb8JdCiSUskmbig==" + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.8.4.tgz", + "integrity": "sha512-6hOaFG75Onmant9adcaeCZgvPYfnif7n0H1ycbixm6/WH3SmxqPMG+CMiW8mTNTRrrAEceQVrq6tDHD8jdnOOw==" }, "@algolia/logger-console": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.6.0.tgz", - "integrity": "sha512-ers7OhfU6qBQl6s7MOe5gNUkcpa7LGrhEzDWnD0cUwLSd5BvWt7zEN69O2CZVbvAUZYlZ5zJTzMMa49s0VXrKQ==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.8.4.tgz", + "integrity": "sha512-+9T3t/eB9vseANFz9YbFHG0cHjzVP/DVfGqzTAkeSlvMHP69JzJga9Wb0Ai6J3xXE3d4k9K+k6t+kkjCQjzEqg==", "requires": { - "@algolia/logger-common": "4.6.0" + "@algolia/logger-common": "4.8.4" } }, "@algolia/requester-browser-xhr": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.6.0.tgz", - "integrity": "sha512-ugrJT25VUkoKrl5vJVFclMdogbhTiDZ38Gss4xfTiSsP/SGE/0ei5VEOMEcj/bjkurJjPky1HfJZ3ykJhIsfCA==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.8.4.tgz", + "integrity": "sha512-BYa8O/pht0UL2bcm0ZkLZiyC+5dHrbc6gvKIo+OgqxmDb/K4KrVo6RIof3BVpR8fgcfxQJohjNVHKXHxEUhBCQ==", "requires": { - "@algolia/requester-common": "4.6.0" + "@algolia/requester-common": "4.8.4" } }, "@algolia/requester-common": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.6.0.tgz", - "integrity": "sha512-DJ5iIGBGrRudimaaFnpBFM19pv8SsXiMYuukn9q1GgQh2mPPBCBBJiezKc7+OzE1UyCVrAFBpR/hrJnflZnRdQ==" + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.8.4.tgz", + "integrity": "sha512-br3LXb6srfAy7F04axwExmrkPOlXCDckgTFoLFv/RT9Oo28SpoyvHqktyBovQLdzdTs+Laglf+LtOHr0iUrZJg==" }, "@algolia/requester-node-http": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.6.0.tgz", - "integrity": "sha512-MPZK3oZz0jSBsqrGiPxv7LOKMUNknlaRNyRDy0v/ASIYG+GvLhGTdEzG5Eyw5tgSvBr8CWrWM5tDC31EH40Ndw==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.8.4.tgz", + "integrity": "sha512-o5Cc4UxYPn3IBHQSDBNFFhq1LQLv40eYvCvK0FPJ8xZkrnNXhjPvaLCu/lQTHpk/HX7DaE6fQ/KboU0OSPKevQ==", "requires": { - "@algolia/requester-common": "4.6.0" + "@algolia/requester-common": "4.8.4" } }, "@algolia/transporter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.6.0.tgz", - "integrity": "sha512-xp+HI8sB8gLCvP00scaOVPQEk5H7nboWUxrwLKyVUvtUO4o003bOfFPsH86NRyu5Dv7fzX9b8EH3rVxcLOhjqg==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.8.4.tgz", + "integrity": "sha512-EvXFYICxrr9QEO6m6awUeNOBstOxePQ2Fy0jtYlS1v9TY2P5HqKRzkxmaZjeYRBsXOImpVjgQIzTzj1Au4br2w==", "requires": { - "@algolia/cache-common": "4.6.0", - "@algolia/logger-common": "4.6.0", - "@algolia/requester-common": "4.6.0" + "@algolia/cache-common": "4.8.4", + "@algolia/logger-common": "4.8.4", + "@algolia/requester-common": "4.8.4" } }, "@babel/code-frame": { @@ -1226,67 +1247,71 @@ "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" }, "@docsearch/css": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-1.0.0-alpha.28.tgz", - "integrity": "sha512-1AhRzVdAkrWwhaxTX6/R7SnFHz8yLz1W8I/AldlTrfbNvZs9INk1FZiEFTJdgHaP68nhgQNWSGlQiDiI3y2RYg==" + "version": "3.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.33.tgz", + "integrity": "sha512-7k/d960WaCRPxZqKwasSH2+pmKW+IeQ14zvS8t7T59OeW24G4N9xuLnpBf1XZ6IyS2AS3KPwRomwRX78qpETVg==" }, "@docsearch/react": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-1.0.0-alpha.28.tgz", - "integrity": "sha512-XjJOnCBXn+UZmtuDmgzlVIHnnvh6yHVwG4aFq8AXN6xJEIX3f180FvGaowFWAxgdtHplJxFGux0Xx4piHqBzIw==", + "version": "3.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.33.tgz", + "integrity": "sha512-XOhaUsxiq62umpGMfgzey45H6Id7qOa2DyJJOIpZHEeo5uFVkxc7Qamng+ETdUIn9ql8tWRPzjTh5OAtjJAgxw==", "requires": { - "@docsearch/css": "^1.0.0-alpha.28", - "@francoischalifour/autocomplete-core": "^1.0.0-alpha.28", - "@francoischalifour/autocomplete-preset-algolia": "^1.0.0-alpha.28", + "@algolia/autocomplete-core": "^1.0.0-alpha.35", + "@algolia/autocomplete-preset-algolia": "^1.0.0-alpha.35", + "@docsearch/css": "3.0.0-alpha.33", "algoliasearch": "^4.0.0" } }, "@docusaurus/core": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.66.tgz", - "integrity": "sha512-9HKqObYoyArpzSTIDguyUXm7z54bpV3dSWSc0PbKGu0Us6zP1TiOuhRDX1diFsKyvjNy7VbCe8XH8LJIdKi5dQ==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", "requires": { - "@babel/core": "^7.9.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", - "@babel/plugin-proposal-optional-chaining": "^7.10.3", + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.9.0", - "@babel/preset-env": "^7.9.0", - "@babel/preset-react": "^7.9.4", - "@babel/preset-typescript": "^7.9.0", - "@babel/runtime": "^7.9.2", - "@babel/runtime-corejs3": "^7.10.4", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@hapi/joi": "^17.1.1", "@svgr/webpack": "^5.4.0", - "babel-loader": "^8.1.0", - "babel-plugin-dynamic-import-node": "^2.3.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", "boxen": "^4.2.0", "cache-loader": "^4.1.0", "chalk": "^3.0.0", - "chokidar": "^3.3.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", "commander": "^4.0.1", - "copy-webpack-plugin": "^6.0.3", + "copy-webpack-plugin": "^6.3.0", "core-js": "^2.6.5", "css-loader": "^3.4.2", "del": "^5.1.0", "detect-port": "^1.3.0", - "eta": "^1.1.1", + "eta": "^1.11.0", "express": "^4.17.1", - "file-loader": "^6.0.0", - "fs-extra": "^8.1.0", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", "globby": "^10.0.1", - "html-minifier-terser": "^5.0.5", + "html-minifier-terser": "^5.1.1", "html-tags": "^3.1.0", - "html-webpack-plugin": "^4.0.4", - "import-fresh": "^3.2.1", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", "inquirer": "^7.2.0", "is-root": "^2.1.0", + "joi": "^17.2.1", "leven": "^3.1.0", - "lodash": "^4.5.2", + "lodash": "^4.17.20", "lodash.flatmap": "^4.5.0", "lodash.has": "^4.5.2", "lodash.isplainobject": "^4.0.6", @@ -1294,17 +1319,17 @@ "mini-css-extract-plugin": "^0.8.0", "nprogress": "^0.2.0", "null-loader": "^3.0.0", - "optimize-css-assets-webpack-plugin": "^5.0.3", + "optimize-css-assets-webpack-plugin": "^5.0.4", "pnp-webpack-plugin": "^1.6.4", "postcss-loader": "^3.0.0", "postcss-preset-env": "^6.7.0", "react-dev-utils": "^10.2.1", - "react-helmet": "^6.0.0-beta", + "react-helmet": "^6.1.0", "react-loadable": "^5.5.0", "react-loadable-ssr-addon": "^0.3.0", - "react-router": "^5.1.2", + "react-router": "^5.2.0", "react-router-config": "^5.1.1", - "react-router-dom": "^5.1.2", + "react-router-dom": "^5.2.0", "resolve-pathname": "^3.0.0", "semver": "^6.3.0", "serve-handler": "^6.1.3", @@ -1312,81 +1337,389 @@ "std-env": "^2.2.1", "terser-webpack-plugin": "^4.1.0", "update-notifier": "^4.1.0", - "url-loader": "^4.1.0", - "wait-file": "^1.0.5", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", "webpack": "^4.44.1", "webpack-bundle-analyzer": "^3.6.1", "webpack-dev-server": "^3.11.0", "webpack-merge": "^4.2.2", "webpackbar": "^4.0.0" - } - }, - "@docusaurus/mdx-loader": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.66.tgz", - "integrity": "sha512-IvtrTNeAaynEGgfCbC4CeBgO76Mu76cGogBGv8a84bYeyCOtlxOJoH6JHkJ7T/v5D6lM16qzwx5oqesZ0kZuzA==", - "requires": { - "@babel/parser": "^7.9.4", - "@babel/traverse": "^7.9.0", - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@mdx-js/mdx": "^1.5.8", - "@mdx-js/react": "^1.5.8", - "escape-html": "^1.0.3", - "file-loader": "^6.0.0", - "fs-extra": "^8.1.0", - "github-slugger": "^1.3.0", - "gray-matter": "^4.0.2", - "loader-utils": "^1.2.3", - "mdast-util-to-string": "^1.1.0", - "remark-emoji": "^2.1.0", - "stringify-object": "^3.3.0", - "unist-util-visit": "^2.0.2", - "url-loader": "^4.1.0" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "object.assign": "^4.1.0" } } } }, - "@docusaurus/plugin-content-blog": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.66.tgz", - "integrity": "sha512-voK5ZUZcUn5blIDakYNKQ42wPMZLfrZnvEJuwh/8S/W1oNbPN935NBu9vL23fHEmp9L2MGykAdaCmev0Su04yQ==", + "@docusaurus/cssnano-preset": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-alpha.70.tgz", + "integrity": "sha512-Zwk3SrlE5r/z5j/tjDcs4XoyeoyymCtEovoxLWLV7wb+iR1qb+Jdso4TRShAepbW/ff6SzjCZ8hRy8ahXPD9TA==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/mdx-loader": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "^17.1.1", + "cssnano-preset-advanced": "^4.0.7", + "postcss": "^7.0.2", + "postcss-combine-duplicated-selectors": "^9.1.0", + "postcss-sort-media-queries": "^1.7.26" + } + }, + "@docusaurus/mdx-loader": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.70.tgz", + "integrity": "sha512-CDR4O4z7wO5/S8O3TAggCynnuBIGIlUT9q9uhhkDe8h5XDhF8n8d6bwqir0O+fUMN3EnyrMq6z1g4IDRB5G2vw==", + "requires": { + "@babel/parser": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "github-slugger": "^1.3.0", + "gray-matter": "^4.0.2", + "loader-utils": "^2.0.0", + "mdast-util-to-string": "^1.1.0", + "remark-emoji": "^2.1.0", + "stringify-object": "^3.3.0", + "unist-util-visit": "^2.0.2", + "url-loader": "^4.1.1", + "webpack": "^4.44.1" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "@docusaurus/plugin-content-blog": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.70.tgz", + "integrity": "sha512-qWXlSDovkhCZLJR0Wz4e3YcNjlelpuSNkS1rJ8sI1ehs/n32lj7A/nVoRfS/LnOMfIciY48vVPr64VLb6dfEeg==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/mdx-loader": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", "chalk": "^3.0.0", - "feed": "^4.1.0", - "fs-extra": "^8.1.0", + "feed": "^4.2.1", + "fs-extra": "^9.0.1", "globby": "^10.0.1", + "joi": "^17.2.1", "loader-utils": "^1.2.3", - "lodash": "^4.5.2", + "lodash": "^4.17.20", "reading-time": "^1.2.0", "remark-admonitions": "^1.2.1", "webpack": "^4.44.1" }, "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -1395,6 +1728,15 @@ "minimist": "^1.2.0" } }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "loader-utils": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", @@ -1404,25 +1746,30 @@ "emojis-list": "^3.0.0", "json5": "^1.0.1" } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" } } }, "@docusaurus/plugin-content-docs": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.66.tgz", - "integrity": "sha512-jvFKJR7BgjIq6xdmPg+7d2DS1fBeuIfmRTtB/apgfIW8NWO5N0DRYXOj0lgpw/ICwW//o8cLbrN+jkLlzTV/eg==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.70.tgz", + "integrity": "sha512-LZre12Q0sxLgi2XgjQbNQMV+jFG7v0+8hRzgBL+iCRiLCa4NlV7+M6mEHJGJJXSKqbfH7CelaUOESqEgPpVQXQ==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/mdx-loader": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/mdx-loader": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", "chalk": "^3.0.0", "execa": "^3.4.0", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "globby": "^10.0.1", - "import-fresh": "^3.2.1", + "import-fresh": "^3.2.2", + "joi": "^17.2.1", "loader-utils": "^1.2.3", "lodash": "^4.17.19", "lodash.flatmap": "^4.5.0", @@ -1436,6 +1783,140 @@ "webpack": "^4.44.1" }, "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, "execa": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", @@ -1453,6 +1934,17 @@ "strip-final-newline": "^2.0.0" } }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -1474,6 +1966,15 @@ "minimist": "^1.2.0" } }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "loader-utils": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", @@ -1496,28 +1997,179 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==" + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" } } }, "@docusaurus/plugin-content-pages": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.66.tgz", - "integrity": "sha512-mY26Aeb/Wf+NFLy70YvXgdLTB+2iPN0SKOVKYwgg6ZN7Nm2kPwEpSVRq2iwiqlWk2G/vOM+ADm99Gxvm3kS61A==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.70.tgz", + "integrity": "sha512-HiFa5l1RDs155ATyYKkPtyIs/d6WJgSAyVfY5ji0Bsixp/K/Kh9YUZYMeTfeMIdhGYe3AAJz+PSZHYRpwTo1wA==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/mdx-loader": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/mdx-loader": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", "globby": "^10.0.1", + "joi": "^17.2.1", "loader-utils": "^1.2.3", + "lodash": "^4.17.19", "minimatch": "^3.0.4", "remark-admonitions": "^1.2.1", "slash": "^3.0.0", "webpack": "^4.44.1" }, "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -1526,6 +2178,15 @@ "minimist": "^1.2.0" } }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "loader-utils": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", @@ -1535,112 +2196,1420 @@ "emojis-list": "^3.0.0", "json5": "^1.0.1" } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" } } }, "@docusaurus/plugin-debug": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.66.tgz", - "integrity": "sha512-9AZaEUxaY0CDOCWXQMfY3TzG79HkquZlVeJOZaA6IvCoK/Oq3B58TMNLiQyA6TA2DYf5ZYQorLJaMd02x5qBQw==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.70.tgz", + "integrity": "sha512-h/x5KtS/YJerhY6C6sJOaP9gMaSVnjj1qZ6r9E/IFujQJ7bSKnk1unqBQpVXADkQhP081ENPL01ubc0/JbE1Mw==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", "react-json-view": "^1.19.1" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "@docusaurus/plugin-google-analytics": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.66.tgz", - "integrity": "sha512-HVWRLHtlQYpVqH3MHloUmktJMXt7oMDQzBlKzrwAMiWUK1oXFX35DrKjTt2SE2SADpObnwWFjo0E71YT0ApQLw==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.70.tgz", + "integrity": "sha512-Ah9W83ZnA0VvmflKNuGq5f/CaEjWJxhjkISQn09/ykEvXfWV33000Bhck4RoCr5YxD+GBEBT5suG5LKH7Qkigw==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66" + "@docusaurus/core": "2.0.0-alpha.70" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "@docusaurus/plugin-google-gtag": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.66.tgz", - "integrity": "sha512-MVnzApLSQaC38nVS+A/WkXEV4kHeX6Q/KM2DqkLeovNWLBtkQ0aHL3bvn1clAEmB33Pia0v93mzG+I1+9mrquA==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.70.tgz", + "integrity": "sha512-K3s894PqMPQnGXEZs0bSs2bRE3bVXFYSb/RN+K9sNd7zxGuOX4UytuvpXP+1r0Hj/YTwQIjj7AKsND0ZpDJHyw==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66" + "@docusaurus/core": "2.0.0-alpha.70" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "@docusaurus/plugin-sitemap": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.66.tgz", - "integrity": "sha512-ztDevVIREyq8g+QhSGpDqscVqtubcPnEE3a4JwWSALQ2D6JscIxg897axwZSZNUMxrHBuXRjOEYOtVb/O/stVg==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.70.tgz", + "integrity": "sha512-ev9yNLPoeHP03jTz67daGd7yA7YhUwHeoWz14SyiKuU7OYtwL/8SJTn/V5kMDRl7o8FRQt9T//mRkpa270hmXw==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", - "fs-extra": "^8.1.0", + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "fs-extra": "^9.0.1", + "joi": "^17.2.1", "sitemap": "^3.2.2" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "@docusaurus/preset-classic": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.66.tgz", - "integrity": "sha512-FjxjchzUS6vOUSr9Pc5kqOSQAnc+cAYsR4pTlqwD2uOJcZMr2vQ6jeKbJnhEmUYwAvzdKOVnCndnxbA+Ii8L3w==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.70.tgz", + "integrity": "sha512-Zx98KryJjHiqzGisWKR0glXl0HXuf/YbcK9yUl6ySyS+6cIMAuGMS0HGLgbvvEmYjywz7nMLpijzGderEOihjQ==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/plugin-content-blog": "2.0.0-alpha.66", - "@docusaurus/plugin-content-docs": "2.0.0-alpha.66", - "@docusaurus/plugin-content-pages": "2.0.0-alpha.66", - "@docusaurus/plugin-debug": "2.0.0-alpha.66", - "@docusaurus/plugin-google-analytics": "2.0.0-alpha.66", - "@docusaurus/plugin-google-gtag": "2.0.0-alpha.66", - "@docusaurus/plugin-sitemap": "2.0.0-alpha.66", - "@docusaurus/theme-classic": "2.0.0-alpha.66", - "@docusaurus/theme-search-algolia": "2.0.0-alpha.66" + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/plugin-content-blog": "2.0.0-alpha.70", + "@docusaurus/plugin-content-docs": "2.0.0-alpha.70", + "@docusaurus/plugin-content-pages": "2.0.0-alpha.70", + "@docusaurus/plugin-debug": "2.0.0-alpha.70", + "@docusaurus/plugin-google-analytics": "2.0.0-alpha.70", + "@docusaurus/plugin-google-gtag": "2.0.0-alpha.70", + "@docusaurus/plugin-sitemap": "2.0.0-alpha.70", + "@docusaurus/theme-classic": "2.0.0-alpha.70", + "@docusaurus/theme-search-algolia": "2.0.0-alpha.70" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "@docusaurus/theme-classic": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.66.tgz", - "integrity": "sha512-WsWqzfzA2gIF5TUMGSbiAeDeNZtKvsgymTQzalcwyhyT/QI0ywcag+03Bmjeq4H3PTC3qU+tkhddO2Rh5w/YCw==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.70.tgz", + "integrity": "sha512-lKU+fgSd08fo3LNYTw31Wty7RgAdFm8bEOwBNkKZcCFnatTSG4qyDbrDZclCQT/SpXSv9XIEKUc0irg2IH6Qrg==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/plugin-content-blog": "2.0.0-alpha.66", - "@docusaurus/plugin-content-docs": "2.0.0-alpha.66", - "@docusaurus/plugin-content-pages": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "^17.1.1", - "@mdx-js/mdx": "^1.5.8", - "@mdx-js/react": "^1.5.8", + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/plugin-content-blog": "2.0.0-alpha.70", + "@docusaurus/plugin-content-docs": "2.0.0-alpha.70", + "@docusaurus/plugin-content-pages": "2.0.0-alpha.70", + "@docusaurus/theme-common": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", "@types/react-toggle": "^4.0.2", "clsx": "^1.1.1", "copy-text-to-clipboard": "^2.2.0", - "infima": "0.2.0-alpha.13", + "infima": "0.2.0-alpha.18", + "joi": "^17.2.1", "lodash": "^4.17.19", - "parse-numeric-range": "^0.0.2", - "prism-react-renderer": "^1.1.0", - "prismjs": "^1.20.0", + "parse-numeric-range": "^1.2.0", + "prism-react-renderer": "^1.1.1", + "prismjs": "^1.22.0", "prop-types": "^15.7.2", - "react-router-dom": "^5.1.2", + "react-router-dom": "^5.2.0", "react-toggle": "^4.1.1" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "@docusaurus/theme-common": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-alpha.70.tgz", + "integrity": "sha512-Ge/dLGPCJhtyvumSMg0BlWcF00d1Qd2KnHf8kL/0nTxe257yNTHIOK95LKhIPAdcVgxG+ge9N0XcBm4KaubASQ==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/plugin-content-blog": "2.0.0-alpha.70", + "@docusaurus/plugin-content-docs": "2.0.0-alpha.70", + "@docusaurus/plugin-content-pages": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "@docusaurus/theme-search-algolia": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.66.tgz", - "integrity": "sha512-5k/Fwt81Gyjv9vPE+gO8mraEHx5IqEmHLwqld5yXj7yix5XrxywkaanHqC0cFJG4MFUBgF6vNjJC8CtfLnT4Tw==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.70.tgz", + "integrity": "sha512-xuoWZ+HUKzn1A5vPlNZM8mtyRL5uo15o34OX/i7HkTRmBVymWO1bBE0lECfDVJU2JUYGmwjpDXhZzNLDZmZRWg==", "requires": { - "@docsearch/react": "^1.0.0-alpha.27", - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@hapi/joi": "^17.1.1", + "@docsearch/react": "^3.0.0-alpha.31", + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/theme-common": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", "algoliasearch": "^4.0.0", "algoliasearch-helper": "^3.1.1", "clsx": "^1.1.1", - "eta": "^1.1.1", + "eta": "^1.11.0", + "joi": "^17.2.1", "lodash": "^4.17.19" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.70.tgz", + "integrity": "sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/generator": "^7.12.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.5", + "@babel/traverse": "^7.12.5", + "@docusaurus/cssnano-preset": "2.0.0-alpha.70", + "@docusaurus/types": "2.0.0-alpha.70", + "@docusaurus/utils": "2.0.0-alpha.70", + "@docusaurus/utils-validation": "2.0.0-alpha.70", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.2.1", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.3.0", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.11.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.0.1", + "globby": "^10.0.1", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.5.0", + "import-fresh": "^3.2.2", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", + "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "escape-string-regexp": "^2.0.0", + "fs-extra": "^9.0.1", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "@docusaurus/types": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.66.tgz", - "integrity": "sha512-Zd2Kguw0+3faifr83ruIV4i/+KqfqM+zK3DpqCBxdtkP+ORLKbgsIQ48fJ40OOhQrvl38Ay4E+1w7USrrkj4Qg==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.70.tgz", + "integrity": "sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q==", "requires": { "@types/webpack": "^4.41.0", "commander": "^4.0.1", @@ -1649,13 +3618,16 @@ } }, "@docusaurus/utils": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.66.tgz", - "integrity": "sha512-47jGB+Z3YVM6Xf1hxyNbJLMmc1qoTLmfwSf7NseKSkpjucbc5Ueivr+oVYp5yWoZw5sT5bObmdJYfJoD/RrbOg==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz", + "integrity": "sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ==", "requires": { + "@docusaurus/types": "2.0.0-alpha.70", + "chalk": "^3.0.0", "escape-string-regexp": "^2.0.0", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "gray-matter": "^4.0.2", + "lodash": "^4.17.20", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "resolve-pathname": "^3.0.0" @@ -1669,13 +3641,13 @@ } }, "@docusaurus/utils-validation": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.66.tgz", - "integrity": "sha512-vlenwY3THondey21x1qAUZyDz9qiG7ec2CBM9HgY1Ns8XhrKah9zz7TEGXjqM9lhqMQQRkvcCcveti9EXR0fcA==", + "version": "2.0.0-alpha.70", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz", + "integrity": "sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ==", "requires": { - "@docusaurus/utils": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", - "chalk": "^3.0.0" + "@docusaurus/utils": "2.0.0-alpha.70", + "chalk": "^3.0.0", + "joi": "^17.2.1" } }, "@endiliey/static-site-generator-webpack-plugin": { @@ -1690,56 +3662,11 @@ "webpack-sources": "^1.4.3" } }, - "@francoischalifour/autocomplete-core": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-core/-/autocomplete-core-1.0.0-alpha.28.tgz", - "integrity": "sha512-rL9x+72btViw+9icfBKUJjZj87FgjFrD2esuTUqtj4RAX3s4AuVZiN8XEsfjQBSc6qJk31cxlvqZHC/BIyYXgg==" - }, - "@francoischalifour/autocomplete-preset-algolia": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.28.tgz", - "integrity": "sha512-bprfNmYt1opFUFEtD2XfY/kEsm13bzHQgU80uMjhuK0DJ914IjolT1GytpkdM6tJ4MBvyiJPP+bTtWO+BZ7c7w==" - }, - "@hapi/address": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", - "integrity": "sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" - }, - "@hapi/formula": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", - "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" - }, "@hapi/hoek": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" }, - "@hapi/joi": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz", - "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==", - "requires": { - "@hapi/address": "^4.0.1", - "@hapi/formula": "^2.0.0", - "@hapi/hoek": "^9.0.0", - "@hapi/pinpoint": "^2.0.0", - "@hapi/topo": "^5.0.0" - } - }, - "@hapi/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" - }, "@hapi/topo": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", @@ -1749,23 +3676,23 @@ } }, "@mdx-js/mdx": { - "version": "1.6.21", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.21.tgz", - "integrity": "sha512-z35VI6qDw9eAzR/obtgHbYVUdb/Pm+oUnlP1lLR94Oe05Xs2H7vlAgpuFBCLH5g/egzAc2wZCyoVydr25CsF+A==", + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", "requires": { - "@babel/core": "7.11.6", - "@babel/plugin-syntax-jsx": "7.10.4", + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.21", - "babel-plugin-apply-mdx-type-prop": "1.6.21", - "babel-plugin-extract-import-names": "1.6.21", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", "camelcase-css": "2.0.1", - "detab": "2.0.3", + "detab": "2.0.4", "hast-util-raw": "6.0.1", "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "9.1.2", + "mdast-util-to-hast": "10.0.1", "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.21", + "remark-mdx": "1.6.22", "remark-parse": "8.0.3", "remark-squeeze-paragraphs": "4.0.0", "style-to-object": "0.3.0", @@ -1775,18 +3702,18 @@ }, "dependencies": { "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -1797,12 +3724,126 @@ "source-map": "^0.5.0" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.15.tgz", + "integrity": "sha512-AQBOU2Z9kWwSZMd6lNjCX0GUgFonL1wAM1db8L8PMk9UDaGsRCArBkU4Sc+UCM3AE4hjbXx+h58Lb3QT4oRmrA==" + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + } + } + }, + "@babel/traverse": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz", + "integrity": "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.12.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.15.tgz", + "integrity": "sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ==", + "requires": { + "@babel/types": "^7.12.13", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + } + } + }, + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "semver": { @@ -1813,14 +3854,14 @@ } }, "@mdx-js/react": { - "version": "1.6.21", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.21.tgz", - "integrity": "sha512-CgSNT9sq2LAlhEbVlPg7DwUQkypz+CWaWGcJbkgmp9WCAy6vW33CQ44UbKPiH3wet9o+UbXeQOqzZd041va83g==" + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==" }, "@mdx-js/util": { - "version": "1.6.21", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.21.tgz", - "integrity": "sha512-6sANhqfEHu6gdHZSrzDjN18Y48mIon8f2Os6J+IFmMHN0IhNG/0PUIIsI07kA1sZ9t6vgZNBloVmcDa5WOSe6A==" + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", @@ -1869,6 +3910,24 @@ } } }, + "@sideway/address": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.0.tgz", + "integrity": "sha512-wAH/JYRXeIFQRsxerIuLjgUu2Xszam+O5xKeatJ4oudShOOirfmsQ1D6LL54XOU2tizpCYku+s1wmU0SYdpoSA==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -2062,9 +4121,9 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "@types/react": { - "version": "16.9.56", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.56.tgz", - "integrity": "sha512-gIkl4J44G/qxbuC6r2Xh+D3CGZpJ+NdWTItAPmZbR5mUS+JQ8Zvzpl0ea5qT/ZT3ZNTUcDKUVqV3xBE8wv/DyQ==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.1.tgz", + "integrity": "sha512-w8t9f53B2ei4jeOqf/gxtc2Sswnc3LBK5s0DyJcg5xd10tMHXts2N31cKjWfH9IC/JvEPa/YF1U4YeP1t4R6HQ==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -2367,30 +4426,30 @@ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" }, "algoliasearch": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.6.0.tgz", - "integrity": "sha512-f4QVfUYnWIGZwOupZh0RAqW8zEfpZAcZG6ZT0p6wDMztEyKBrjjbTXBk9p9uEaJqoIhFUm6TtApOxodTdHbqvw==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.8.4.tgz", + "integrity": "sha512-QbXpFvBKj/QhKWE7xBoqaWOWyw7ni6W6THSuFJHOcADRrInhjFCBYjrv+YsIhv9huCepKXWpfV4UJup9BslVhQ==", "requires": { - "@algolia/cache-browser-local-storage": "4.6.0", - "@algolia/cache-common": "4.6.0", - "@algolia/cache-in-memory": "4.6.0", - "@algolia/client-account": "4.6.0", - "@algolia/client-analytics": "4.6.0", - "@algolia/client-common": "4.6.0", - "@algolia/client-recommendation": "4.6.0", - "@algolia/client-search": "4.6.0", - "@algolia/logger-common": "4.6.0", - "@algolia/logger-console": "4.6.0", - "@algolia/requester-browser-xhr": "4.6.0", - "@algolia/requester-common": "4.6.0", - "@algolia/requester-node-http": "4.6.0", - "@algolia/transporter": "4.6.0" + "@algolia/cache-browser-local-storage": "4.8.4", + "@algolia/cache-common": "4.8.4", + "@algolia/cache-in-memory": "4.8.4", + "@algolia/client-account": "4.8.4", + "@algolia/client-analytics": "4.8.4", + "@algolia/client-common": "4.8.4", + "@algolia/client-recommendation": "4.8.4", + "@algolia/client-search": "4.8.4", + "@algolia/logger-common": "4.8.4", + "@algolia/logger-console": "4.8.4", + "@algolia/requester-browser-xhr": "4.8.4", + "@algolia/requester-common": "4.8.4", + "@algolia/requester-node-http": "4.8.4", + "@algolia/transporter": "4.8.4" } }, "algoliasearch-helper": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.2.2.tgz", - "integrity": "sha512-/3XvE33R+gQKaiPdy3nmHYqhF8hqIu8xnlOicVxb1fD6uMFmxW8rGLzzrRfsPfxgAfm+c1NslLb3TzQVIB8aVA==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.3.4.tgz", + "integrity": "sha512-1Ts2XcgGdjGlDrp3v6zbY8VW+X9+jJ5rBmtPBmXOQLd4b5t/LpJlaBdxoAnlMfVFjywP7KSAdmyFUNNYVHDyRQ==", "requires": { "events": "^1.1.1" }, @@ -2597,6 +4656,11 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -2616,6 +4680,14 @@ "postcss-value-parser": "^4.1.0" } }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -2701,12 +4773,12 @@ } }, "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.21", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.21.tgz", - "integrity": "sha512-+vQarmm+g+kePH4CMp2iEN/HOx1oEvZeSKCdKCEZlnJOthXzkpaRAbM3ZNCiKqVr9WuoqPNfoXQ0EVppYpIwfg==", + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", "requires": { "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.21" + "@mdx-js/util": "1.6.22" } }, "babel-plugin-dynamic-import-node": { @@ -2718,9 +4790,9 @@ } }, "babel-plugin-extract-import-names": { - "version": "1.6.21", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.21.tgz", - "integrity": "sha512-mCjTry00HB/4xHGunxQNMOGZ7JEGJdEScNh7C1WJBto7nePyn9wCdYAZP61pGC6+z3ETH5btY20mqg0plcxZGA==", + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", "requires": { "@babel/helper-plugin-utils": "7.10.4" } @@ -4046,6 +6118,14 @@ "sha.js": "^2.4.8" } }, + "cross-fetch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", + "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, "cross-spawn": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", @@ -4274,6 +6354,19 @@ } } }, + "cssnano-preset-advanced": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-4.0.7.tgz", + "integrity": "sha512-j1O5/DQnaAqEyFFQfC+Z/vRlLXL3LxJHN+lvsfYqr7KgPH74t69+Rsy2yXkovWNaJjZYBpdz2Fj8ab2nH7pZXw==", + "requires": { + "autoprefixer": "^9.4.7", + "cssnano-preset-default": "^4.0.7", + "postcss-discard-unused": "^4.0.1", + "postcss-merge-idents": "^4.0.1", + "postcss-reduce-idents": "^4.0.2", + "postcss-zindex": "^4.0.1" + } + }, "cssnano-preset-default": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", @@ -4364,9 +6457,9 @@ } }, "csstype": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz", - "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.6.tgz", + "integrity": "sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw==" }, "cyclist": { "version": "1.0.1", @@ -4532,9 +6625,9 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "detab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.3.tgz", - "integrity": "sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", "requires": { "repeat-string": "^1.5.4" } @@ -4777,24 +6870,6 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -5269,38 +7344,36 @@ } }, "fbemitter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "requires": { - "fbjs": "^0.8.4" + "fbjs": "^3.0.0" } }, "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", "loose-envify": "^1.0.0", "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", "ua-parser-js": "^0.7.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - } } }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, "feed": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.1.tgz", - "integrity": "sha512-l28KKcK1J/u3iq5dRDmmoB2p7dtBfACC2NqJh4dI2kFptxH0asfjmOfcxqh5Sv8suAlVa73gZJ4REY5RrafVvg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", "requires": { "xml-js": "^1.6.11" } @@ -5444,12 +7517,12 @@ } }, "flux": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-3.1.3.tgz", - "integrity": "sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", + "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", "requires": { - "fbemitter": "^2.0.0", - "fbjs": "^0.8.0" + "fbemitter": "^3.0.0", + "fbjs": "^3.0.0" } }, "follow-redirects": { @@ -5660,13 +7733,14 @@ } }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs-minipass": { @@ -6566,9 +8640,9 @@ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "infima": { - "version": "0.2.0-alpha.13", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.13.tgz", - "integrity": "sha512-BxCZ1pMcUF0PcL4WV07l/lvaeBBdUUw7uVqNyyeGAutzDpkDyFOl5gOv9wFAJKLo5yerPNFXxFPgDitNjctqIA==" + "version": "0.2.0-alpha.18", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.18.tgz", + "integrity": "sha512-ndSEffXzjgM/eiSm5jpLTX6ON9MmylzxqBnV2bTiC3kCSyDYdvzTs+bSwf+C4TWayuqnRTnBK1JUePo3m6Bnfg==" }, "inflight": { "version": "1.0.6", @@ -6585,9 +8659,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inline-style-parser": { "version": "0.1.1", @@ -7047,15 +9121,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "jest-worker": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", @@ -7081,6 +9146,18 @@ } } }, + "joi": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.3.0.tgz", + "integrity": "sha512-Qh5gdU6niuYbUIUV5ejbsMiiFmBdw8Kcp8Buj2JntszCkCfxJ9Cz76OtHxOZMPXrt5810iDIXs+n1nNVoquHgg==", + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7134,11 +9211,12 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "keyv": { @@ -7464,21 +9542,21 @@ } }, "mdast-util-definitions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", - "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", "requires": { "unist-util-visit": "^2.0.0" } }, "mdast-util-to-hast": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.2.tgz", - "integrity": "sha512-OpkFLBC2VnNAb2FNKcKWu9FMbJhQKog+FCT8nuKmQNIKXyT1n3SIskE7uWDep6x+cA20QXlK5AETHQtYmQmxtQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", "requires": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "mdast-util-definitions": "^3.0.0", + "mdast-util-definitions": "^4.0.0", "mdurl": "^1.0.0", "unist-builder": "^2.0.0", "unist-util-generated": "^1.0.0", @@ -7898,13 +9976,9 @@ } }, "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "node-forge": { "version": "0.10.0", @@ -8426,9 +10500,9 @@ } }, "parse-numeric-range": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz", - "integrity": "sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", + "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" }, "parse5": { "version": "6.0.1", @@ -8713,6 +10787,15 @@ } } }, + "postcss-combine-duplicated-selectors": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/postcss-combine-duplicated-selectors/-/postcss-combine-duplicated-selectors-9.4.0.tgz", + "integrity": "sha512-rMnO1H3wgR1T6QSlK3i8Slz9p3xD+0yOi4J7qwh/5PGR3z8jbgYvRlNKAIvXDtGBQbJKoWs4df5skL3a/fdUEA==", + "requires": { + "postcss": "^7.0.0", + "postcss-selector-parser": "^6.0.0" + } + }, "postcss-convert-values": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", @@ -8830,6 +10913,28 @@ "postcss": "^7.0.0" } }, + "postcss-discard-unused": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-4.0.1.tgz", + "integrity": "sha512-/3vq4LU0bLH2Lj4NYN7BTf2caly0flUB7Xtrk9a5K3yLuXMkHMqMO/x3sDq8W2b1eQFSCyY0IVz2L+0HP8kUUA==", + "requires": { + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, "postcss-double-position-gradients": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", @@ -9010,6 +11115,24 @@ "postcss": "^7.0.2" } }, + "postcss-merge-idents": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-4.0.1.tgz", + "integrity": "sha512-43S/VNdF6II0NZ31YxcvNYq4gfURlPAAsJW/z84avBXQCaP4I4qRHUH18slW/SOlJbcxxCobflPNUApYDddS7A==", + "requires": { + "cssnano-util-same-parent": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, "postcss-merge-longhand": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", @@ -9438,6 +11561,22 @@ } } }, + "postcss-reduce-idents": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-4.0.2.tgz", + "integrity": "sha512-Tz70Ri10TclPoCtFfftjFVddx3fZGUkr0dEDbIEfbYhFUOFQZZ77TEqRrU0e6TvAvF+Wa5VVzYTpFpq0uwFFzw==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, "postcss-reduce-initial": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", @@ -9504,6 +11643,15 @@ "util-deprecate": "^1.0.2" } }, + "postcss-sort-media-queries": { + "version": "1.31.21", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-1.31.21.tgz", + "integrity": "sha512-h+HbXXfOVFeLvCJOzl/Z9SqQ25MNpG/73k71756ftisaaJy75h06/Dn6KOwC4OCMN10ewT2PXMzHV03JNKwBbg==", + "requires": { + "postcss": "^7.0.27", + "sort-css-media-queries": "1.5.0" + } + }, "postcss-svgo": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", @@ -9547,15 +11695,25 @@ "uniq": "^1.0.1" } }, + "postcss-zindex": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-4.0.1.tgz", + "integrity": "sha512-d/8BlQcUdEugZNRM9AdCA2V4fqREUtn/wcixLN3L6ITgc2P/FMcVVYz8QZkhItWT9NB5qr8wuN2dJCE4/+dlrA==", + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, "prettier": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", - "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", "dev": true }, "pretty-error": { @@ -9578,9 +11736,9 @@ "integrity": "sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug==" }, "prismjs": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.22.0.tgz", - "integrity": "sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", + "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", "requires": { "clipboard": "^2.0.0" } @@ -10249,11 +12407,11 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-json-view": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.19.1.tgz", - "integrity": "sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.1.tgz", + "integrity": "sha512-AonvGea4nWlsnNXCbnSdUHsetyNS8rUMhbFHS9eFaDB1oeaxgHcVsqo5LhGRMvWybfDdjVUo0xzDoMQP7jbrXw==", "requires": { - "flux": "^3.1.3", + "flux": "^4.0.1", "react-base16-styling": "^0.6.0", "react-lifecycles-compat": "^3.0.4", "react-textarea-autosize": "^6.1.0" @@ -10374,9 +12532,9 @@ } }, "reading-time": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.2.0.tgz", - "integrity": "sha512-5b4XmKK4MEss63y0Lw0vn0Zn6G5kiHP88mUnD8UeEsyORj3sh1ghTH0/u6m1Ax9G2F4wUZrknlp6WlIsCvoXVA==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", + "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" }, "rechoir": { "version": "0.6.2", @@ -10596,33 +12754,33 @@ "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" }, "remark-mdx": { - "version": "1.6.21", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.21.tgz", - "integrity": "sha512-IGb3l46a6NFi62egT+WXeTT3T8wYTunmPCEGTfDO6oRAfuss9VAb/3InVCKKGXXoiNi0mTuplI0EFusdCLGk3A==", + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", "requires": { - "@babel/core": "7.11.6", + "@babel/core": "7.12.9", "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.11.0", - "@babel/plugin-syntax-jsx": "7.10.4", - "@mdx-js/util": "1.6.21", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", "is-alphabetical": "1.0.4", "remark-parse": "8.0.3", "unified": "9.2.0" }, "dependencies": { "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -10633,22 +12791,126 @@ "source-map": "^0.5.0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.15.tgz", + "integrity": "sha512-AQBOU2Z9kWwSZMd6lNjCX0GUgFonL1wAM1db8L8PMk9UDaGsRCArBkU4Sc+UCM3AE4hjbXx+h58Lb3QT4oRmrA==" + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + } + } + }, + "@babel/traverse": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz", + "integrity": "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.12.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.15.tgz", + "integrity": "sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ==", + "requires": { + "@babel/types": "^7.12.13", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + } + } + }, + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "semver": { @@ -10731,11 +12993,6 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -10872,11 +13129,6 @@ "aproba": "^1.1.1" } }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" - }, "rxjs": { "version": "6.6.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", @@ -11371,6 +13623,11 @@ } } }, + "sort-css-media-queries": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.0.tgz", + "integrity": "sha512-QofNE7CEVH1AKdhS7L9IPbV9UtyQYNXyw++8lC+xG6iOLlpzsmncZRiKbihTAESvZ8wOhwnPoesHbMrehrQyyw==" + }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -12297,9 +14554,9 @@ } }, "ua-parser-js": { - "version": "0.7.22", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", - "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==" + "version": "0.7.23", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.23.tgz", + "integrity": "sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA==" }, "unherit": { "version": "1.1.3", @@ -12415,9 +14672,9 @@ "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" }, "unist-util-is": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz", - "integrity": "sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz", + "integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==" }, "unist-util-position": { "version": "3.1.0", @@ -12468,9 +14725,9 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "unpipe": { "version": "1.0.0", @@ -12690,13 +14947,12 @@ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" }, "vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" }, @@ -12727,45 +14983,16 @@ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, - "wait-file": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/wait-file/-/wait-file-1.0.5.tgz", - "integrity": "sha512-udLpJY/eOxlrMm3+XD1RLuF2oT9B7J7wiyR5/9xrvQymS6YR6trWvVhzOldHrVbLwyiRmLj9fcvsjzpSXeZHkw==", + "wait-on": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.2.1.tgz", + "integrity": "sha512-H2F986kNWMU9hKlI9l/ppO6tN8ZSJd35yBljMLa1/vjzWP++Qh6aXyt77/u7ySJFZQqBtQxnvm/xgG48AObXcw==", "requires": { - "@hapi/joi": "^15.1.0", - "fs-extra": "^8.1.0", - "rx": "^4.1.0" - }, - "dependencies": { - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" - }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" - }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" - } - }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "requires": { - "@hapi/hoek": "^8.3.0" - } - } + "axios": "^0.21.1", + "joi": "^17.3.0", + "lodash": "^4.17.20", + "minimist": "^1.2.5", + "rxjs": "^6.6.3" } }, "watchpack": { @@ -13861,11 +16088,6 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, - "whatwg-fetch": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz", - "integrity": "sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A==" - }, "whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", diff --git a/website/package.json b/website/package.json index 8bf909f57..2690da34c 100644 --- a/website/package.json +++ b/website/package.json @@ -1,19 +1,19 @@ { - "name": "docs", + "name": "authentik-docs", "version": "0.0.0", "private": true, "scripts": { "docusaurus": "docusaurus", - "start": "docusaurus start", + "watch": "docusaurus start", "build": "docusaurus build", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", "serve": "docusaurus serve" }, "dependencies": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/preset-classic": "2.0.0-alpha.66", - "@mdx-js/react": "^1.5.8", + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/preset-classic": "2.0.0-alpha.70", + "@mdx-js/react": "^1.6.22", "clsx": "^1.1.1", "react": "^16.8.4", "react-dom": "^16.8.4" @@ -31,6 +31,6 @@ ] }, "devDependencies": { - "prettier": "2.1.2" + "prettier": "2.2.1" } } diff --git a/website/sidebars.js b/website/sidebars.js index 18b5d5787..87fde5e28 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -141,6 +141,7 @@ module.exports = { "releases/0.13", "releases/0.14", "releases/2021.1", + "releases/2021.2", ], }, {