Refactoring: setup isort for backend

This commit is contained in:
IRBorisov 2024-05-24 18:31:14 +03:00
parent f669a3054b
commit 9e4f7ca2f2
49 changed files with 400 additions and 390 deletions

17
.vscode/settings.json vendored
View File

@ -4,12 +4,23 @@
".pytest_cache/": true ".pytest_cache/": true
}, },
"typescript.tsdk": "rsconcept/frontend/node_modules/typescript/lib", "typescript.tsdk": "rsconcept/frontend/node_modules/typescript/lib",
"isort.args": [
"--line-length",
"100",
"--multi-line",
"3",
"--project",
"apps"
],
"eslint.workingDirectories": ["rsconcept/frontend"], "eslint.workingDirectories": ["rsconcept/frontend"],
"[python]": { "[python]": {
"editor.formatOnType": true, "editor.formatOnSave": false,
"editor.defaultFormatter": "ms-python.autopep8",
"editor.tabSize": 4, "editor.tabSize": 4,
"editor.insertSpaces": true "editor.insertSpaces": true,
// "editor.defaultFormatter": "ms-python.autopep8" "editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}, },
"python.testing.unittestArgs": ["-v", "-s", "./tests", "-p", "test*.py"], "python.testing.unittestArgs": ["-v", "-s", "./tests", "-p", "test*.py"],
"python.testing.pytestEnabled": false, "python.testing.pytestEnabled": false,

View File

@ -2,7 +2,6 @@
import copy import copy
from typing import Generic, Iterable, Optional, TypeVar from typing import Generic, Iterable, Optional, TypeVar
ItemType = TypeVar("ItemType") ItemType = TypeVar("ItemType")

View File

@ -1,16 +1,21 @@
''' Models: Constituenta. ''' ''' Models: Constituenta. '''
import re import re
from django.db.models import (
CASCADE, ForeignKey, Model, PositiveIntegerField, TextChoices,
TextField, CharField, JSONField
)
from django.core.validators import MinValueValidator from django.core.validators import MinValueValidator
from django.db.models import (
CASCADE,
CharField,
ForeignKey,
JSONField,
Model,
PositiveIntegerField,
TextChoices,
TextField
)
from django.urls import reverse from django.urls import reverse
from ..utils import apply_pattern from ..utils import apply_pattern
_REF_ENTITY_PATTERN = re.compile(r'@{([^0-9\-].*?)\|.*?}') _REF_ENTITY_PATTERN = re.compile(r'@{([^0-9\-].*?)\|.*?}')
_GLOBAL_ID_PATTERN = re.compile(r'([XCSADFPT][0-9]+)') # cspell:disable-line _GLOBAL_ID_PATTERN = re.compile(r'([XCSADFPT][0-9]+)') # cspell:disable-line

View File

@ -1,14 +1,10 @@
''' Models: Editor. ''' ''' Models: Editor. '''
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from django.db.models import ( from django.db.models import CASCADE, DateTimeField, ForeignKey, Model
Model, ForeignKey,
CASCADE, DateTimeField
)
from apps.users.models import User from apps.users.models import User
if TYPE_CHECKING: if TYPE_CHECKING:
from .LibraryItem import LibraryItem from .LibraryItem import LibraryItem

View File

@ -1,14 +1,21 @@
''' Models: LibraryItem. ''' ''' Models: LibraryItem. '''
from django.db import transaction from django.db import transaction
from django.db.models import ( from django.db.models import (
SET_NULL, ForeignKey, Model, SET_NULL,
TextChoices, TextField, BooleanField, CharField, DateTimeField BooleanField,
CharField,
DateTimeField,
ForeignKey,
Model,
TextChoices,
TextField
) )
from apps.users.models import User from apps.users.models import User
from .Version import Version
from .Subscription import Subscription
from .Editor import Editor from .Editor import Editor
from .Subscription import Subscription
from .Version import Version
class LibraryItemType(TextChoices): class LibraryItemType(TextChoices):

View File

@ -1,7 +1,5 @@
''' Models: LibraryTemplate. ''' ''' Models: LibraryTemplate. '''
from django.db.models import ( from django.db.models import CASCADE, ForeignKey, Model
CASCADE, ForeignKey, Model
)
class LibraryTemplate(Model): class LibraryTemplate(Model):

View File

@ -1,11 +1,10 @@
''' Models: Subscription. ''' ''' Models: Subscription. '''
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from django.db.models import ( from django.db.models import CASCADE, ForeignKey, Model
CASCADE, ForeignKey, Model
)
from apps.users.models import User from apps.users.models import User
if TYPE_CHECKING: if TYPE_CHECKING:
from .LibraryItem import LibraryItem from .LibraryItem import LibraryItem

View File

@ -1,7 +1,12 @@
''' Models: Version. ''' ''' Models: Version. '''
from django.db.models import ( from django.db.models import (
CASCADE, ForeignKey, Model, CASCADE,
TextField, CharField, DateTimeField, JSONField CharField,
DateTimeField,
ForeignKey,
JSONField,
Model,
TextField
) )

View File

@ -2,8 +2,8 @@
from .api_RSForm import RSForm from .api_RSForm import RSForm
from .Constituenta import Constituenta, CstType, _empty_forms from .Constituenta import Constituenta, CstType, _empty_forms
from .LibraryItem import User, LibraryItem, LibraryItemType
from .LibraryTemplate import LibraryTemplate
from .Version import Version
from .Editor import Editor from .Editor import Editor
from .LibraryItem import LibraryItem, LibraryItemType, User
from .LibraryTemplate import LibraryTemplate
from .Subscription import Subscription from .Subscription import Subscription
from .Version import Version

View File

@ -2,21 +2,17 @@
from copy import deepcopy from copy import deepcopy
from typing import Optional, Union, cast from typing import Optional, Union, cast
from cctext import Entity, Resolver, TermForm, extract_entities, split_grams
from django.core.exceptions import ValidationError
from django.db import transaction from django.db import transaction
from django.db.models import QuerySet from django.db.models import QuerySet
from django.core.exceptions import ValidationError
from cctext import ( from .. import messages as msg
Resolver, from ..graph import Graph
Entity,
extract_entities,
split_grams,
TermForm
)
from .api_RSLanguage import ( from .api_RSLanguage import (
extract_globals, extract_globals,
get_type_prefix,
generate_structure, generate_structure,
get_type_prefix,
guess_type, guess_type,
infer_template, infer_template,
is_base_set, is_base_set,
@ -24,14 +20,10 @@ from .api_RSLanguage import (
is_simple_expression, is_simple_expression,
split_template split_template
) )
from .Constituenta import Constituenta, CstType
from .LibraryItem import LibraryItem, LibraryItemType from .LibraryItem import LibraryItem, LibraryItemType
from .Constituenta import CstType, Constituenta
from .Version import Version from .Version import Version
from ..graph import Graph
from .. import messages as msg
_INSERT_LAST: int = -1 _INSERT_LAST: int = -1

View File

@ -1,15 +1,14 @@
''' Models: Definitions and utility function for RSLanguage. ''' ''' Models: Definitions and utility function for RSLanguage. '''
import json import json
import re import re
from enum import IntEnum, unique
from typing import Set, Tuple, cast from typing import Set, Tuple, cast
from enum import IntEnum , unique
import pyconcept import pyconcept
from .. import messages as msg from .. import messages as msg
from .Constituenta import CstType from .Constituenta import CstType
_RE_GLOBALS = r'[XCSADFPT]\d+' # cspell:disable-line _RE_GLOBALS = r'[XCSADFPT]\d+' # cspell:disable-line
_RE_TEMPLATE = r'R\d+' _RE_TEMPLATE = r'R\d+'
_RE_COMPLEX_SYMBOLS = r'[∀∃×ℬ;|:]' _RE_COMPLEX_SYMBOLS = r'[∀∃×ℬ;|:]'

View File

@ -1,39 +1,35 @@
''' REST API: Serializers. ''' ''' REST API: Serializers. '''
from .basics import ( from .basics import (
TextSerializer,
ExpressionSerializer,
ExpressionParseSerializer,
ResolverSerializer,
ASTNodeSerializer, ASTNodeSerializer,
WordFormSerializer, ExpressionParseSerializer,
MultiFormSerializer ExpressionSerializer,
MultiFormSerializer,
ResolverSerializer,
TextSerializer,
WordFormSerializer
) )
from .data_access import ( from .data_access import (
LibraryItemSerializer,
LibraryItemCloneSerializer,
RSFormSerializer,
RSFormParseSerializer,
VersionSerializer,
VersionCreateSerializer,
CstSerializer,
CstTargetSerializer,
CstMoveSerializer,
CstSubstituteSerializer,
CstCreateSerializer, CstCreateSerializer,
CstRenameSerializer,
CstListSerializer, CstListSerializer,
InlineSynthesisSerializer CstMoveSerializer,
CstRenameSerializer,
CstSerializer,
CstSubstituteSerializer,
CstTargetSerializer,
InlineSynthesisSerializer,
LibraryItemCloneSerializer,
LibraryItemSerializer,
RSFormParseSerializer,
RSFormSerializer,
VersionCreateSerializer,
VersionSerializer
) )
from .io_files import FileSerializer, RSFormTRSSerializer, RSFormUploadSerializer
from .io_pyconcept import PyConceptAdapter
from .schema_typing import ( from .schema_typing import (
NewCstResponse, NewCstResponse,
NewMultiCstResponse, NewMultiCstResponse,
NewVersionResponse, NewVersionResponse,
ResultTextResponse ResultTextResponse
) )
from .io_pyconcept import PyConceptAdapter
from .io_files import (
FileSerializer,
RSFormUploadSerializer,
RSFormTRSSerializer
)

View File

@ -1,8 +1,8 @@
''' Basic serializers that do not interact with database. ''' ''' Basic serializers that do not interact with database. '''
from typing import cast from typing import cast
from rest_framework import serializers
from cctext import Resolver, Reference, ReferenceType, EntityReference, SyntacticReference from cctext import EntityReference, Reference, ReferenceType, Resolver, SyntacticReference
from rest_framework import serializers
class ExpressionSerializer(serializers.Serializer): class ExpressionSerializer(serializers.Serializer):

View File

@ -1,17 +1,16 @@
''' Serializers for persistent data manipulation. ''' ''' Serializers for persistent data manipulation. '''
from typing import Optional, cast from typing import Optional, cast
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.db import transaction from django.db import transaction
from rest_framework import serializers from rest_framework import serializers
from rest_framework.serializers import PrimaryKeyRelatedField as PKField from rest_framework.serializers import PrimaryKeyRelatedField as PKField
from .basics import CstParseSerializer
from .io_pyconcept import PyConceptAdapter
from ..models import Constituenta, LibraryItem, RSForm, Version, CstType
from .. import messages as msg from .. import messages as msg
from ..models import Constituenta, CstType, LibraryItem, RSForm, Version
from .basics import CstParseSerializer
from .io_pyconcept import PyConceptAdapter
class LibraryItemSerializer(serializers.ModelSerializer): class LibraryItemSerializer(serializers.ModelSerializer):

View File

@ -1,10 +1,10 @@
''' Serializers for file interaction. ''' ''' Serializers for file interaction. '''
from rest_framework import serializers
from django.db import transaction from django.db import transaction
from rest_framework import serializers
from ..utils import fix_old_references
from ..models import Constituenta, LibraryItem, RSForm
from .. import messages as msg from .. import messages as msg
from ..models import Constituenta, LibraryItem, RSForm
from ..utils import fix_old_references
_CST_TYPE = 'constituenta' _CST_TYPE = 'constituenta'
_TRS_TYPE = 'rsform' _TRS_TYPE = 'rsform'

View File

@ -1,11 +1,11 @@
''' Data adapter to interface with pyconcept module. ''' ''' Data adapter to interface with pyconcept module. '''
import json import json
from typing import Optional, cast, Union from typing import Optional, Union, cast
import pyconcept import pyconcept
from ..models import RSForm
from .. import messages as msg from .. import messages as msg
from ..models import RSForm
class PyConceptAdapter: class PyConceptAdapter:

View File

@ -3,6 +3,7 @@ from rest_framework import serializers
from .data_access import RSFormParseSerializer from .data_access import RSFormParseSerializer
class ResultTextResponse(serializers.Serializer): class ResultTextResponse(serializers.Serializer):
''' Serializer: Text result of a function call. ''' ''' Serializer: Text result of a function call. '''
result = serializers.CharField() result = serializers.CharField()

View File

@ -1,7 +1,7 @@
''' Tests. ''' ''' Tests. '''
from .t_imports import *
from .s_views import *
from .s_models.t_RSForm import * from .s_models.t_RSForm import *
from .t_serializers import * from .s_views import *
from .t_graph import * from .t_graph import *
from .t_imports import *
from .t_serializers import *
from .t_utils import * from .t_utils import *

View File

@ -1,6 +1,6 @@
''' Tests for REST API. ''' ''' Tests for REST API. '''
from .t_Constituenta import * from .t_Constituenta import *
from .t_LibraryItem import *
from .t_Editor import * from .t_Editor import *
from .t_Subscription import * from .t_LibraryItem import *
from .t_RSForm import * from .t_RSForm import *
from .t_Subscription import *

View File

@ -1,12 +1,9 @@
''' Testing models: Constituenta. ''' ''' Testing models: Constituenta. '''
from django.test import TestCase
from django.db.utils import IntegrityError from django.db.utils import IntegrityError
from django.forms import ValidationError from django.forms import ValidationError
from django.test import TestCase
from apps.rsform.models import ( from apps.rsform.models import Constituenta, CstType, LibraryItem, LibraryItemType
Constituenta, CstType,
LibraryItem, LibraryItemType
)
class TestConstituenta(TestCase): class TestConstituenta(TestCase):

View File

@ -1,7 +1,7 @@
''' Testing models: Editor. ''' ''' Testing models: Editor. '''
from django.test import TestCase from django.test import TestCase
from apps.rsform.models import LibraryItem, LibraryItemType, User, Editor from apps.rsform.models import Editor, LibraryItem, LibraryItemType, User
class TestEditor(TestCase): class TestEditor(TestCase):

View File

@ -1,10 +1,7 @@
''' Testing models: LibraryItem. ''' ''' Testing models: LibraryItem. '''
from django.test import TestCase from django.test import TestCase
from apps.rsform.models import ( from apps.rsform.models import LibraryItem, LibraryItemType, Subscription, User
LibraryItem, LibraryItemType, Subscription,
User
)
class TestLibraryItem(TestCase): class TestLibraryItem(TestCase):

View File

@ -1,11 +1,8 @@
''' Testing models: api_RSForm. ''' ''' Testing models: api_RSForm. '''
from django.test import TestCase
from django.forms import ValidationError from django.forms import ValidationError
from django.test import TestCase
from apps.rsform.models import ( from apps.rsform.models import Constituenta, CstType, RSForm, User
RSForm, Constituenta, CstType,
User
)
class TestRSForm(TestCase): class TestRSForm(TestCase):

View File

@ -1,11 +1,11 @@
''' Testing imported pyconcept functionality ''' ''' Testing imported pyconcept functionality '''
from unittest import TestCase import json
from unittest import TestCase as RegularTest
import pyconcept as pc import pyconcept as pc
import json
class TestIntegrations(TestCase): class TestIntegrations(RegularTest):
def test_convert_to_ascii(self): def test_convert_to_ascii(self):

View File

@ -1,5 +1,6 @@
''' Testing serializers ''' ''' Testing serializers '''
from django.test import TestCase from django.test import TestCase
from apps.rsform.serializers import ExpressionSerializer from apps.rsform.serializers import ExpressionSerializer

View File

@ -1,6 +1,6 @@
''' Unit tests: utils. ''' ''' Unit tests: utils. '''
import unittest
import re import re
import unittest
from apps.rsform.utils import apply_pattern, fix_old_references from apps.rsform.utils import apply_pattern, fix_old_references

View File

@ -2,6 +2,7 @@
from apps.rsform.models import LibraryItem from apps.rsform.models import LibraryItem
def response_contains(response, item: LibraryItem) -> bool: def response_contains(response, item: LibraryItem) -> bool:
''' Check if response contains specific item. ''' ''' Check if response contains specific item. '''
return any(x for x in response.data if x['id'] == item.pk) return any(x for x in response.data if x['id'] == item.pk)

View File

@ -1,6 +1,7 @@
''' Routing: RSForms for conceptual schemas. ''' ''' Routing: RSForms for conceptual schemas. '''
from django.urls import path, include from django.urls import include, path
from rest_framework import routers from rest_framework import routers
from . import views from . import views
library_router = routers.SimpleRouter(trailing_slash=False) library_router = routers.SimpleRouter(trailing_slash=False)

View File

@ -1,10 +1,10 @@
''' Utility functions ''' ''' Utility functions '''
import json import json
from io import BytesIO
import re import re
from io import BytesIO
from zipfile import ZipFile from zipfile import ZipFile
from rest_framework.permissions import BasePermission, IsAuthenticated
from rest_framework.permissions import BasePermission, IsAuthenticated
# Name for JSON inside Exteor files archive # Name for JSON inside Exteor files archive
EXTEOR_INNER_FILENAME = 'document.json' EXTEOR_INNER_FILENAME = 'document.json'

View File

@ -1,29 +1,8 @@
''' REST API: Endpoint processors. ''' ''' REST API: Endpoint processors. '''
from .library import ( from .cctext import generate_lexeme, inflect, parse_text
LibraryActiveView,
LibraryAdminView,
LibraryTemplatesView,
LibraryViewSet
)
from .constituents import ConstituentAPIView from .constituents import ConstituentAPIView
from .versions import ( from .library import LibraryActiveView, LibraryAdminView, LibraryTemplatesView, LibraryViewSet
VersionViewset,
create_version,
export_file,
retrieve_version
)
from .rsforms import (
RSFormViewSet, TrsImportView,
create_rsform
)
from .operations import inline_synthesis from .operations import inline_synthesis
from .cctext import ( from .rsforms import RSFormViewSet, TrsImportView, create_rsform
parse_text, from .rslang import convert_to_ascii, convert_to_math, parse_expression
generate_lexeme, from .versions import VersionViewset, create_version, export_file, retrieve_version
inflect
)
from .rslang import (
convert_to_ascii,
convert_to_math,
parse_expression
)

View File

@ -1,11 +1,11 @@
''' Endpoints for cctext. ''' ''' Endpoints for cctext. '''
from rest_framework.decorators import api_view import cctext as ct
from rest_framework.response import Response
from rest_framework.request import Request
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
from rest_framework import status as c from rest_framework import status as c
from rest_framework.decorators import api_view
from rest_framework.request import Request
from rest_framework.response import Response
import cctext as ct
from .. import serializers as s from .. import serializers as s

View File

@ -1,6 +1,6 @@
''' Endpoints for Constituenta. ''' ''' Endpoints for Constituenta. '''
from rest_framework import generics, permissions
from drf_spectacular.utils import extend_schema, extend_schema_view from drf_spectacular.utils import extend_schema, extend_schema_view
from rest_framework import generics, permissions
from .. import models as m from .. import models as m
from .. import serializers as s from .. import serializers as s

View File

@ -1,15 +1,17 @@
''' Endpoints for library. ''' ''' Endpoints for library. '''
from copy import deepcopy from copy import deepcopy
from typing import cast from typing import cast
from django.db import transaction from django.db import transaction
from django_filters.rest_framework import DjangoFilterBackend
from django.db.models import Q from django.db.models import Q
from rest_framework import viewsets, filters, generics, permissions from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.request import Request
from drf_spectacular.utils import extend_schema, extend_schema_view from drf_spectacular.utils import extend_schema, extend_schema_view
from rest_framework import filters, generics, permissions
from rest_framework import status as c from rest_framework import status as c
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.request import Request
from rest_framework.response import Response
from .. import models as m from .. import models as m
from .. import serializers as s from .. import serializers as s

View File

@ -1,15 +1,17 @@
''' Endpoints for RSForm. ''' ''' Endpoints for RSForm. '''
from typing import cast from typing import cast
from django.db import transaction from django.db import transaction
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.request import Request
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
from rest_framework import status as c from rest_framework import status as c
from rest_framework.decorators import api_view
from rest_framework.request import Request
from rest_framework.response import Response
from .. import models as m from .. import models as m
from .. import serializers as s from .. import serializers as s
@extend_schema( @extend_schema(
summary='Inline synthesis: merge one schema into another', summary='Inline synthesis: merge one schema into another',
tags=['Operations'], tags=['Operations'],

View File

@ -1,21 +1,22 @@
''' Endpoints for RSForm. ''' ''' Endpoints for RSForm. '''
import json import json
from typing import cast, Union from typing import Union, cast
from django.db import transaction
from django.http import HttpResponse
from rest_framework import views, viewsets, generics, permissions
from rest_framework.decorators import action, api_view
from rest_framework.response import Response
from rest_framework.request import Request
from drf_spectacular.utils import extend_schema, extend_schema_view
from rest_framework import status as c
import pyconcept import pyconcept
from django.db import transaction
from django.http import HttpResponse
from drf_spectacular.utils import extend_schema, extend_schema_view
from rest_framework import generics, permissions
from rest_framework import status as c
from rest_framework import views, viewsets
from rest_framework.decorators import action, api_view
from rest_framework.request import Request
from rest_framework.response import Response
from .. import messages as msg
from .. import models as m from .. import models as m
from .. import serializers as s from .. import serializers as s
from .. import utils from .. import utils
from .. import messages as msg
@extend_schema(tags=['RSForm']) @extend_schema(tags=['RSForm'])

View File

@ -1,12 +1,13 @@
''' Endpoints pyconcept formal language parsing. ''' ''' Endpoints pyconcept formal language parsing. '''
import json import json
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.request import Request
from drf_spectacular.utils import extend_schema
from rest_framework import status as c
import pyconcept import pyconcept
from drf_spectacular.utils import extend_schema
from rest_framework import status as c
from rest_framework.decorators import api_view
from rest_framework.request import Request
from rest_framework.response import Response
from .. import serializers as s from .. import serializers as s

View File

@ -1,12 +1,14 @@
''' Endpoints for versions. ''' ''' Endpoints for versions. '''
from typing import cast from typing import cast
from django.http import HttpResponse from django.http import HttpResponse
from rest_framework import generics, permissions, viewsets
from rest_framework.decorators import action, api_view, permission_classes
from rest_framework.response import Response
from rest_framework.request import Request
from drf_spectacular.utils import extend_schema, extend_schema_view from drf_spectacular.utils import extend_schema, extend_schema_view
from rest_framework import generics, permissions
from rest_framework import status as c from rest_framework import status as c
from rest_framework import viewsets
from rest_framework.decorators import action, api_view, permission_classes
from rest_framework.request import Request
from rest_framework.response import Response
from .. import models as m from .. import models as m
from .. import serializers as s from .. import serializers as s

View File

@ -8,4 +8,4 @@ class UsersConfig(AppConfig):
name = 'apps.users' name = 'apps.users'
def ready(self): def ready(self):
import apps.users.signals # pylint: disable=unused-import,import-outside-toplevel import apps.users.signals # pylint: disable=unused-import,import-outside-toplevel

View File

@ -4,8 +4,9 @@ from django.contrib.auth.password_validation import validate_password
from rest_framework import serializers from rest_framework import serializers
from apps.rsform.models import Subscription from apps.rsform.models import Subscription
from . import models
from . import messages as msg from . import messages as msg
from . import models
class NonFieldErrorSerializer(serializers.Serializer): class NonFieldErrorSerializer(serializers.Serializer):

View File

@ -3,9 +3,7 @@ from django.core.mail import send_mail
from django.dispatch import receiver from django.dispatch import receiver
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils.html import strip_tags from django.utils.html import strip_tags
from django_rest_passwordreset.signals import reset_password_token_created # type: ignore
from django_rest_passwordreset.signals import reset_password_token_created # type: ignore
_EMAIL_NOREPLY = 'noreply.portal@yandex.ru' _EMAIL_NOREPLY = 'noreply.portal@yandex.ru'
_EMAIL_SUBJECT = 'Восстановление пароля КонцептПортал' _EMAIL_SUBJECT = 'Восстановление пароля КонцептПортал'

View File

@ -1,3 +1,3 @@
''' Tests. ''' ''' Tests. '''
from .t_views import *
from .t_serializers import * from .t_serializers import *
from .t_views import *

View File

@ -1,5 +1,5 @@
''' Testing serializers ''' ''' Testing serializers '''
from rest_framework.test import APITestCase, APIRequestFactory, APIClient from rest_framework.test import APIClient, APIRequestFactory, APITestCase
from apps.users.models import User from apps.users.models import User
from apps.users.serializers import LoginSerializer from apps.users.serializers import LoginSerializer

View File

@ -1,8 +1,8 @@
''' Testing views ''' ''' Testing views '''
from rest_framework.test import APITestCase, APIClient from rest_framework.test import APIClient, APITestCase
from apps.users.models import User
from apps.rsform.models import LibraryItem, LibraryItemType from apps.rsform.models import LibraryItem, LibraryItemType
from apps.users.models import User
class TestUserAPIViews(APITestCase): class TestUserAPIViews(APITestCase):

View File

@ -1,10 +1,10 @@
''' Routing: User profile and Authorization. ''' ''' Routing: User profile and Authorization. '''
from django.urls import path from django.urls import path
from django_rest_passwordreset.views import reset_password_confirm # type: ignore from django_rest_passwordreset.views import reset_password_confirm # type: ignore
from django_rest_passwordreset.views import reset_password_request_token # type: ignore from django_rest_passwordreset.views import reset_password_request_token # type: ignore
from django_rest_passwordreset.views import reset_password_validate_token # type: ignore from django_rest_passwordreset.views import reset_password_validate_token # type: ignore
from . import views
from . import views
urlpatterns = [ urlpatterns = [
path('api/auth', views.AuthAPIView.as_view()), path('api/auth', views.AuthAPIView.as_view()),

View File

@ -1,13 +1,13 @@
''' REST API: User profile and Authorization. ''' ''' REST API: User profile and Authorization. '''
from django.contrib.auth import login, logout from django.contrib.auth import login, logout
from rest_framework import status as c
from rest_framework import permissions, views, generics
from rest_framework.response import Response
from drf_spectacular.utils import extend_schema, extend_schema_view from drf_spectacular.utils import extend_schema, extend_schema_view
from rest_framework import generics, permissions
from rest_framework import status as c
from rest_framework import views
from rest_framework.response import Response
from . import serializers as s
from . import models as m from . import models as m
from . import serializers as s
class LoginAPIView(views.APIView): class LoginAPIView(views.APIView):

View File

@ -10,11 +10,12 @@ For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/ https://docs.djangoproject.com/en/4.1/ref/settings/
''' '''
import sys
import logging import logging
import os import os
import sys
from pathlib import Path from pathlib import Path
def _get_secret(key: str, default): def _get_secret(key: str, default):
value = os.environ.get(key, default) value = os.environ.get(key, default)
if os.path.isfile(value): if os.path.isfile(value):

View File

@ -1,11 +1,10 @@
''' Main URL router ''' ''' Main URL router '''
from django.contrib import admin
from django.urls import path, include
from django.conf import settings from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
from django.contrib import admin
from django.urls import include, path
from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView
urlpatterns = [ urlpatterns = [
path('admin', admin.site.urls), path('admin', admin.site.urls),
path('api/', include('apps.rsform.urls')), path('api/', include('apps.rsform.urls')),

View File

@ -12,7 +12,7 @@
"@tanstack/react-table": "^8.17.3", "@tanstack/react-table": "^8.17.3",
"@uiw/codemirror-themes": "^4.22.1", "@uiw/codemirror-themes": "^4.22.1",
"@uiw/react-codemirror": "^4.22.1", "@uiw/react-codemirror": "^4.22.1",
"axios": "^1.6.8", "axios": "^1.7.2",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"framer-motion": "^10.18.0", "framer-motion": "^10.18.0",
"js-file-download": "^0.4.12", "js-file-download": "^0.4.12",
@ -28,18 +28,18 @@
"react-tabs": "^6.0.2", "react-tabs": "^6.0.2",
"react-toastify": "^9.1.3", "react-toastify": "^9.1.3",
"react-tooltip": "^5.26.4", "react-tooltip": "^5.26.4",
"reagraph": "^4.17.4", "reagraph": "^4.18.1",
"use-debounce": "^10.0.0" "use-debounce": "^10.0.0"
}, },
"devDependencies": { "devDependencies": {
"@lezer/generator": "^1.7.0", "@lezer/generator": "^1.7.0",
"@types/jest": "^29.5.12", "@types/jest": "^29.5.12",
"@types/node": "^20.12.12", "@types/node": "^20.12.12",
"@types/react": "^18.3.2", "@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/eslint-plugin": "^6.21.0",
"@typescript-eslint/parser": "^6.21.0", "@typescript-eslint/parser": "^6.21.0",
"@vitejs/plugin-react": "^4.2.1", "@vitejs/plugin-react": "^4.3.0",
"autoprefixer": "^10.4.19", "autoprefixer": "^10.4.19",
"eslint": "^8.57.0", "eslint": "^8.57.0",
"eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-hooks": "^4.6.2",
@ -49,7 +49,7 @@
"jest": "^29.7.0", "jest": "^29.7.0",
"postcss": "^8.4.38", "postcss": "^8.4.38",
"tailwindcss": "^3.4.3", "tailwindcss": "^3.4.3",
"ts-jest": "^29.1.2", "ts-jest": "^29.1.3",
"typescript": "^5.4.5", "typescript": "^5.4.5",
"vite": "^4.5.3" "vite": "^4.5.3"
} }
@ -81,12 +81,12 @@
} }
}, },
"node_modules/@babel/code-frame": { "node_modules/@babel/code-frame": {
"version": "7.24.2", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz",
"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/highlight": "^7.24.2", "@babel/highlight": "^7.24.6",
"picocolors": "^1.0.0" "picocolors": "^1.0.0"
}, },
"engines": { "engines": {
@ -94,30 +94,30 @@
} }
}, },
"node_modules/@babel/compat-data": { "node_modules/@babel/compat-data": {
"version": "7.24.4", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz",
"integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/core": { "node_modules/@babel/core": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz",
"integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@ampproject/remapping": "^2.2.0", "@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.24.2", "@babel/code-frame": "^7.24.6",
"@babel/generator": "^7.24.5", "@babel/generator": "^7.24.6",
"@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-compilation-targets": "^7.24.6",
"@babel/helper-module-transforms": "^7.24.5", "@babel/helper-module-transforms": "^7.24.6",
"@babel/helpers": "^7.24.5", "@babel/helpers": "^7.24.6",
"@babel/parser": "^7.24.5", "@babel/parser": "^7.24.6",
"@babel/template": "^7.24.0", "@babel/template": "^7.24.6",
"@babel/traverse": "^7.24.5", "@babel/traverse": "^7.24.6",
"@babel/types": "^7.24.5", "@babel/types": "^7.24.6",
"convert-source-map": "^2.0.0", "convert-source-map": "^2.0.0",
"debug": "^4.1.0", "debug": "^4.1.0",
"gensync": "^1.0.0-beta.2", "gensync": "^1.0.0-beta.2",
@ -142,12 +142,12 @@
} }
}, },
"node_modules/@babel/generator": { "node_modules/@babel/generator": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz",
"integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.24.5", "@babel/types": "^7.24.6",
"@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25", "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1" "jsesc": "^2.5.1"
@ -157,25 +157,25 @@
} }
}, },
"node_modules/@babel/helper-annotate-as-pure": { "node_modules/@babel/helper-annotate-as-pure": {
"version": "7.22.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz",
"integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.22.5" "@babel/types": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-compilation-targets": { "node_modules/@babel/helper-compilation-targets": {
"version": "7.23.6", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz",
"integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/compat-data": "^7.23.5", "@babel/compat-data": "^7.24.6",
"@babel/helper-validator-option": "^7.23.5", "@babel/helper-validator-option": "^7.24.6",
"browserslist": "^4.22.2", "browserslist": "^4.22.2",
"lru-cache": "^5.1.1", "lru-cache": "^5.1.1",
"semver": "^6.3.1" "semver": "^6.3.1"
@ -194,62 +194,62 @@
} }
}, },
"node_modules/@babel/helper-environment-visitor": { "node_modules/@babel/helper-environment-visitor": {
"version": "7.22.20", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-function-name": { "node_modules/@babel/helper-function-name": {
"version": "7.23.0", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/template": "^7.22.15", "@babel/template": "^7.24.6",
"@babel/types": "^7.23.0" "@babel/types": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-hoist-variables": { "node_modules/@babel/helper-hoist-variables": {
"version": "7.22.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.22.5" "@babel/types": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-module-imports": { "node_modules/@babel/helper-module-imports": {
"version": "7.24.3", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz",
"integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.24.0" "@babel/types": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-module-transforms": { "node_modules/@babel/helper-module-transforms": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz",
"integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-environment-visitor": "^7.24.6",
"@babel/helper-module-imports": "^7.24.3", "@babel/helper-module-imports": "^7.24.6",
"@babel/helper-simple-access": "^7.24.5", "@babel/helper-simple-access": "^7.24.6",
"@babel/helper-split-export-declaration": "^7.24.5", "@babel/helper-split-export-declaration": "^7.24.6",
"@babel/helper-validator-identifier": "^7.24.5" "@babel/helper-validator-identifier": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -259,86 +259,85 @@
} }
}, },
"node_modules/@babel/helper-plugin-utils": { "node_modules/@babel/helper-plugin-utils": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz",
"integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-simple-access": { "node_modules/@babel/helper-simple-access": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz",
"integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.24.5" "@babel/types": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-split-export-declaration": { "node_modules/@babel/helper-split-export-declaration": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz",
"integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.24.5" "@babel/types": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-string-parser": { "node_modules/@babel/helper-string-parser": {
"version": "7.24.1", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz",
"integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-validator-identifier": { "node_modules/@babel/helper-validator-identifier": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz",
"integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-validator-option": { "node_modules/@babel/helper-validator-option": {
"version": "7.23.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz",
"integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helpers": { "node_modules/@babel/helpers": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz",
"integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/template": "^7.24.0", "@babel/template": "^7.24.6",
"@babel/traverse": "^7.24.5", "@babel/types": "^7.24.6"
"@babel/types": "^7.24.5"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/highlight": { "node_modules/@babel/highlight": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz",
"integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-validator-identifier": "^7.24.5", "@babel/helper-validator-identifier": "^7.24.6",
"chalk": "^2.4.2", "chalk": "^2.4.2",
"js-tokens": "^4.0.0", "js-tokens": "^4.0.0",
"picocolors": "^1.0.0" "picocolors": "^1.0.0"
@ -348,9 +347,9 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz",
"integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==",
"license": "MIT", "license": "MIT",
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
@ -425,12 +424,12 @@
} }
}, },
"node_modules/@babel/plugin-syntax-jsx": { "node_modules/@babel/plugin-syntax-jsx": {
"version": "7.24.1", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz",
"integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.24.0" "@babel/helper-plugin-utils": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -534,13 +533,13 @@
} }
}, },
"node_modules/@babel/plugin-syntax-typescript": { "node_modules/@babel/plugin-syntax-typescript": {
"version": "7.24.1", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz",
"integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "integrity": "sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.24.0" "@babel/helper-plugin-utils": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -550,13 +549,13 @@
} }
}, },
"node_modules/@babel/plugin-transform-react-jsx-self": { "node_modules/@babel/plugin-transform-react-jsx-self": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.6.tgz",
"integrity": "sha512-RtCJoUO2oYrYwFPtR1/jkoBEcFuI1ae9a9IMxeyAVa3a1Ap4AnxmyIKG2b2FaJKqkidw/0cxRbWN+HOs6ZWd1w==", "integrity": "sha512-FfZfHXtQ5jYPQsCRyLpOv2GeLIIJhs8aydpNh39vRDjhD411XcfWDni5i7OjP/Rs8GAtTn7sWFFELJSHqkIxYg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.24.5" "@babel/helper-plugin-utils": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -566,13 +565,13 @@
} }
}, },
"node_modules/@babel/plugin-transform-react-jsx-source": { "node_modules/@babel/plugin-transform-react-jsx-source": {
"version": "7.24.1", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.6.tgz",
"integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", "integrity": "sha512-BQTBCXmFRreU3oTUXcGKuPOfXAGb1liNY4AvvFKsOBAJ89RKcTsIrSsnMYkj59fNa66OFKnSa4AJZfy5Y4B9WA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.24.0" "@babel/helper-plugin-utils": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -582,9 +581,9 @@
} }
}, },
"node_modules/@babel/runtime": { "node_modules/@babel/runtime": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz",
"integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"regenerator-runtime": "^0.14.0" "regenerator-runtime": "^0.14.0"
@ -594,33 +593,33 @@
} }
}, },
"node_modules/@babel/template": { "node_modules/@babel/template": {
"version": "7.24.0", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz",
"integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.23.5", "@babel/code-frame": "^7.24.6",
"@babel/parser": "^7.24.0", "@babel/parser": "^7.24.6",
"@babel/types": "^7.24.0" "@babel/types": "^7.24.6"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/traverse": { "node_modules/@babel/traverse": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz",
"integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.24.2", "@babel/code-frame": "^7.24.6",
"@babel/generator": "^7.24.5", "@babel/generator": "^7.24.6",
"@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-environment-visitor": "^7.24.6",
"@babel/helper-function-name": "^7.23.0", "@babel/helper-function-name": "^7.24.6",
"@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-hoist-variables": "^7.24.6",
"@babel/helper-split-export-declaration": "^7.24.5", "@babel/helper-split-export-declaration": "^7.24.6",
"@babel/parser": "^7.24.5", "@babel/parser": "^7.24.6",
"@babel/types": "^7.24.5", "@babel/types": "^7.24.6",
"debug": "^4.3.1", "debug": "^4.3.1",
"globals": "^11.1.0" "globals": "^11.1.0"
}, },
@ -629,13 +628,13 @@
} }
}, },
"node_modules/@babel/types": { "node_modules/@babel/types": {
"version": "7.24.5", "version": "7.24.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz",
"integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-string-parser": "^7.24.1", "@babel/helper-string-parser": "^7.24.6",
"@babel/helper-validator-identifier": "^7.24.5", "@babel/helper-validator-identifier": "^7.24.6",
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
}, },
"engines": { "engines": {
@ -694,9 +693,9 @@
} }
}, },
"node_modules/@codemirror/lint": { "node_modules/@codemirror/lint": {
"version": "6.7.1", "version": "6.8.0",
"resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.7.1.tgz", "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.0.tgz",
"integrity": "sha512-rELba6QJD20/bNXWP/cKTGLrwVEcpa2ViwULCV03ONcY1Je85++7sczVRUlnE4TJMjatx3IJTz6HX4NXi+moXw==", "integrity": "sha512-lsFofvaw0lnPRJlQylNsC4IRt/1lI4OD/yYslrSGVndOJfStc58v+8p9dgGiD90ktOfL7OhBWns1ZETYgz0EJA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@codemirror/state": "^6.0.0", "@codemirror/state": "^6.0.0",
@ -2939,9 +2938,9 @@
} }
}, },
"node_modules/@types/babel__traverse": { "node_modules/@types/babel__traverse": {
"version": "7.20.5", "version": "7.20.6",
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
"integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -3048,9 +3047,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/react": { "node_modules/@types/react": {
"version": "18.3.2", "version": "18.3.3",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
"integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==", "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/prop-types": "*", "@types/prop-types": "*",
@ -3106,9 +3105,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/three": { "node_modules/@types/three": {
"version": "0.164.0", "version": "0.164.1",
"resolved": "https://registry.npmjs.org/@types/three/-/three-0.164.0.tgz", "resolved": "https://registry.npmjs.org/@types/three/-/three-0.164.1.tgz",
"integrity": "sha512-SFDofn9dJVrE+1DKta7xj7lc4ru7B3S3yf10NsxOserW57aQlB6GxtAS1UK5To3LfEMN5HUHMu3n5v+M5rApgA==", "integrity": "sha512-dR/trWDhyaNqJV38rl1TonlCA9DpnX7OPYDWD81bmBGn/+uEc3+zNalFxQcV4FlPTeDBhCY3SFWKvK6EJwL88g==",
"license": "MIT", "license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
@ -3438,17 +3437,17 @@
} }
}, },
"node_modules/@vitejs/plugin-react": { "node_modules/@vitejs/plugin-react": {
"version": "4.2.1", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.0.tgz",
"integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", "integrity": "sha512-KcEbMsn4Dpk+LIbHMj7gDPRKaTMStxxWRkRmxsg/jVdFdJCZWt1SchZcf0M4t8lIKdwwMsEyzhrcOXRrDPtOBw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/core": "^7.23.5", "@babel/core": "^7.24.5",
"@babel/plugin-transform-react-jsx-self": "^7.23.3", "@babel/plugin-transform-react-jsx-self": "^7.24.5",
"@babel/plugin-transform-react-jsx-source": "^7.23.3", "@babel/plugin-transform-react-jsx-source": "^7.24.1",
"@types/babel__core": "^7.20.5", "@types/babel__core": "^7.20.5",
"react-refresh": "^0.14.0" "react-refresh": "^0.14.2"
}, },
"engines": { "engines": {
"node": "^14.18.0 || >=16.0.0" "node": "^14.18.0 || >=16.0.0"
@ -3593,6 +3592,7 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
"integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
"deprecated": "This package is no longer supported.",
"license": "ISC", "license": "ISC",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
@ -3672,9 +3672,9 @@
} }
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.6.8", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
"integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.6", "follow-redirects": "^1.15.6",
@ -3952,13 +3952,13 @@
} }
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@ -4074,9 +4074,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001620", "version": "1.0.30001621",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz",
"integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@ -4876,9 +4876,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.774", "version": "1.4.782",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.782.tgz",
"integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==", "integrity": "sha512-JUfU61e8tr+i5Y1FKXcKs+Xe+rJ+CEqm4cgv1kMihPE2EvYHmYyVr3Im/+1+Z5B29Be2EEGCZCwAc6Tazdl1Yg==",
"license": "ISC" "license": "ISC"
}, },
"node_modules/ellipsize": { "node_modules/ellipsize": {
@ -5472,9 +5472,9 @@
} }
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -5699,6 +5699,7 @@
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
"integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
"deprecated": "This package is no longer supported.",
"license": "ISC", "license": "ISC",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
@ -6172,6 +6173,7 @@
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
"devOptional": true, "devOptional": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
@ -6436,9 +6438,9 @@
} }
}, },
"node_modules/jackspeak": { "node_modules/jackspeak": {
"version": "2.3.6", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz",
"integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==",
"dev": true, "dev": true,
"license": "BlueOak-1.0.0", "license": "BlueOak-1.0.0",
"dependencies": { "dependencies": {
@ -8456,13 +8458,13 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/micromatch": { "node_modules/micromatch": {
"version": "4.0.5", "version": "4.0.7",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"braces": "^3.0.2", "braces": "^3.0.3",
"picomatch": "^2.3.1" "picomatch": "^2.3.1"
}, },
"engines": { "engines": {
@ -8733,6 +8735,7 @@
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
"deprecated": "This package is no longer supported.",
"license": "ISC", "license": "ISC",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
@ -9243,9 +9246,9 @@
} }
}, },
"node_modules/postcss-selector-parser": { "node_modules/postcss-selector-parser": {
"version": "6.0.16", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
"integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -9752,9 +9755,9 @@
} }
}, },
"node_modules/reagraph": { "node_modules/reagraph": {
"version": "4.17.4", "version": "4.18.1",
"resolved": "https://registry.npmjs.org/reagraph/-/reagraph-4.17.4.tgz", "resolved": "https://registry.npmjs.org/reagraph/-/reagraph-4.18.1.tgz",
"integrity": "sha512-tQ19t4k3rRCRVShxUosyzNKCmlcxy3dGOw2P+0qQWgK8L8H5GCI77aNIXDWu3P20VfD134SYvpY2/oYhj9ojdw==", "integrity": "sha512-a6EAQ3nAHQoemF6UQLZ+xaXvROZuqhxCUYiViNPl+dnn/Few8kyrMselpUlyC/QTtfk1XiCsFnz1aCyI0GNFWQ==",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@react-spring/three": "9.6.1", "@react-spring/three": "9.6.1",
@ -10377,17 +10380,17 @@
} }
}, },
"node_modules/sucrase/node_modules/glob": { "node_modules/sucrase/node_modules/glob": {
"version": "10.3.15", "version": "10.4.1",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz",
"integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"foreground-child": "^3.1.0", "foreground-child": "^3.1.0",
"jackspeak": "^2.3.6", "jackspeak": "^3.1.2",
"minimatch": "^9.0.1", "minimatch": "^9.0.4",
"minipass": "^7.0.4", "minipass": "^7.1.2",
"path-scurry": "^1.11.0" "path-scurry": "^1.11.1"
}, },
"bin": { "bin": {
"glob": "dist/esm/bin.mjs" "glob": "dist/esm/bin.mjs"
@ -10399,10 +10402,26 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/sucrase/node_modules/minimatch": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
"integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/sucrase/node_modules/minipass": { "node_modules/sucrase/node_modules/minipass": {
"version": "7.1.1", "version": "7.1.2",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
"integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"engines": { "engines": {
@ -10724,9 +10743,9 @@
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/ts-jest": { "node_modules/ts-jest": {
"version": "29.1.2", "version": "29.1.3",
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.3.tgz",
"integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", "integrity": "sha512-6L9qz3ginTd1NKhOxmkP0qU3FyKjj5CPoY+anszfVn6Pmv/RIKzhiMCsH7Yb7UvJR9I2A64rm4zQl531s2F1iw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -10743,10 +10762,11 @@
"ts-jest": "cli.js" "ts-jest": "cli.js"
}, },
"engines": { "engines": {
"node": "^16.10.0 || ^18.0.0 || >=20.0.0" "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@babel/core": ">=7.0.0-beta.0 <8", "@babel/core": ">=7.0.0-beta.0 <8",
"@jest/transform": "^29.0.0",
"@jest/types": "^29.0.0", "@jest/types": "^29.0.0",
"babel-jest": "^29.0.0", "babel-jest": "^29.0.0",
"jest": "^29.0.0", "jest": "^29.0.0",
@ -10756,6 +10776,9 @@
"@babel/core": { "@babel/core": {
"optional": true "optional": true
}, },
"@jest/transform": {
"optional": true
},
"@jest/types": { "@jest/types": {
"optional": true "optional": true
}, },

View File

@ -16,7 +16,7 @@
"@tanstack/react-table": "^8.17.3", "@tanstack/react-table": "^8.17.3",
"@uiw/codemirror-themes": "^4.22.1", "@uiw/codemirror-themes": "^4.22.1",
"@uiw/react-codemirror": "^4.22.1", "@uiw/react-codemirror": "^4.22.1",
"axios": "^1.6.8", "axios": "^1.7.2",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"framer-motion": "^10.18.0", "framer-motion": "^10.18.0",
"js-file-download": "^0.4.12", "js-file-download": "^0.4.12",
@ -32,18 +32,18 @@
"react-tabs": "^6.0.2", "react-tabs": "^6.0.2",
"react-toastify": "^9.1.3", "react-toastify": "^9.1.3",
"react-tooltip": "^5.26.4", "react-tooltip": "^5.26.4",
"reagraph": "^4.17.4", "reagraph": "^4.18.1",
"use-debounce": "^10.0.0" "use-debounce": "^10.0.0"
}, },
"devDependencies": { "devDependencies": {
"@lezer/generator": "^1.7.0", "@lezer/generator": "^1.7.0",
"@types/jest": "^29.5.12", "@types/jest": "^29.5.12",
"@types/node": "^20.12.12", "@types/node": "^20.12.12",
"@types/react": "^18.3.2", "@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/eslint-plugin": "^6.21.0",
"@typescript-eslint/parser": "^6.21.0", "@typescript-eslint/parser": "^6.21.0",
"@vitejs/plugin-react": "^4.2.1", "@vitejs/plugin-react": "^4.3.0",
"autoprefixer": "^10.4.19", "autoprefixer": "^10.4.19",
"eslint": "^8.57.0", "eslint": "^8.57.0",
"eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-hooks": "^4.6.2",
@ -53,7 +53,7 @@
"jest": "^29.7.0", "jest": "^29.7.0",
"postcss": "^8.4.38", "postcss": "^8.4.38",
"tailwindcss": "^3.4.3", "tailwindcss": "^3.4.3",
"ts-jest": "^29.1.2", "ts-jest": "^29.1.3",
"typescript": "^5.4.5", "typescript": "^5.4.5",
"vite": "^4.5.3" "vite": "^4.5.3"
}, },