From 9e4f7ca2f2ff524cc27c486d5809fa519b9d9084 Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Fri, 24 May 2024 18:31:14 +0300 Subject: [PATCH] Refactoring: setup isort for backend --- .vscode/settings.json | 17 +- rsconcept/backend/apps/rsform/graph.py | 1 - .../apps/rsform/models/Constituenta.py | 15 +- .../backend/apps/rsform/models/Editor.py | 6 +- .../backend/apps/rsform/models/LibraryItem.py | 15 +- .../apps/rsform/models/LibraryTemplate.py | 4 +- .../apps/rsform/models/Subscription.py | 5 +- .../backend/apps/rsform/models/Version.py | 9 +- .../backend/apps/rsform/models/__init__.py | 6 +- .../backend/apps/rsform/models/api_RSForm.py | 20 +- .../apps/rsform/models/api_RSLanguage.py | 3 +- .../apps/rsform/serializers/__init__.py | 44 +- .../backend/apps/rsform/serializers/basics.py | 4 +- .../apps/rsform/serializers/data_access.py | 9 +- .../apps/rsform/serializers/io_files.py | 6 +- .../apps/rsform/serializers/io_pyconcept.py | 4 +- .../apps/rsform/serializers/schema_typing.py | 1 + .../backend/apps/rsform/tests/__init__.py | 6 +- .../apps/rsform/tests/s_models/__init__.py | 4 +- .../rsform/tests/s_models/t_Constituenta.py | 7 +- .../apps/rsform/tests/s_models/t_Editor.py | 2 +- .../rsform/tests/s_models/t_LibraryItem.py | 5 +- .../apps/rsform/tests/s_models/t_RSForm.py | 7 +- .../backend/apps/rsform/tests/t_imports.py | 6 +- .../apps/rsform/tests/t_serializers.py | 1 + .../backend/apps/rsform/tests/t_utils.py | 2 +- .../apps/rsform/tests/testing_utils.py | 1 + rsconcept/backend/apps/rsform/urls.py | 3 +- rsconcept/backend/apps/rsform/utils.py | 4 +- .../backend/apps/rsform/views/__init__.py | 31 +- rsconcept/backend/apps/rsform/views/cctext.py | 8 +- .../backend/apps/rsform/views/constituents.py | 2 +- .../backend/apps/rsform/views/library.py | 12 +- .../backend/apps/rsform/views/operations.py | 8 +- .../backend/apps/rsform/views/rsforms.py | 21 +- rsconcept/backend/apps/rsform/views/rslang.py | 11 +- .../backend/apps/rsform/views/versions.py | 10 +- rsconcept/backend/apps/users/apps.py | 2 +- rsconcept/backend/apps/users/serializers.py | 3 +- rsconcept/backend/apps/users/signals.py | 4 +- .../backend/apps/users/tests/__init__.py | 2 +- .../backend/apps/users/tests/t_serializers.py | 2 +- rsconcept/backend/apps/users/tests/t_views.py | 4 +- rsconcept/backend/apps/users/urls.py | 8 +- rsconcept/backend/apps/users/views.py | 10 +- rsconcept/backend/project/settings.py | 3 +- rsconcept/backend/project/urls.py | 5 +- rsconcept/frontend/package-lock.json | 417 +++++++++--------- rsconcept/frontend/package.json | 10 +- 49 files changed, 400 insertions(+), 390 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index bf66d842..057963ff 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,12 +4,23 @@ ".pytest_cache/": true }, "typescript.tsdk": "rsconcept/frontend/node_modules/typescript/lib", + "isort.args": [ + "--line-length", + "100", + "--multi-line", + "3", + "--project", + "apps" + ], "eslint.workingDirectories": ["rsconcept/frontend"], "[python]": { - "editor.formatOnType": true, + "editor.formatOnSave": false, + "editor.defaultFormatter": "ms-python.autopep8", "editor.tabSize": 4, - "editor.insertSpaces": true - // "editor.defaultFormatter": "ms-python.autopep8" + "editor.insertSpaces": true, + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + } }, "python.testing.unittestArgs": ["-v", "-s", "./tests", "-p", "test*.py"], "python.testing.pytestEnabled": false, diff --git a/rsconcept/backend/apps/rsform/graph.py b/rsconcept/backend/apps/rsform/graph.py index 2a8289e0..30ea144f 100644 --- a/rsconcept/backend/apps/rsform/graph.py +++ b/rsconcept/backend/apps/rsform/graph.py @@ -2,7 +2,6 @@ import copy from typing import Generic, Iterable, Optional, TypeVar - ItemType = TypeVar("ItemType") diff --git a/rsconcept/backend/apps/rsform/models/Constituenta.py b/rsconcept/backend/apps/rsform/models/Constituenta.py index a94b673f..840b4d70 100644 --- a/rsconcept/backend/apps/rsform/models/Constituenta.py +++ b/rsconcept/backend/apps/rsform/models/Constituenta.py @@ -1,16 +1,21 @@ ''' Models: Constituenta. ''' import re -from django.db.models import ( - CASCADE, ForeignKey, Model, PositiveIntegerField, TextChoices, - TextField, CharField, JSONField -) 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 ..utils import apply_pattern - _REF_ENTITY_PATTERN = re.compile(r'@{([^0-9\-].*?)\|.*?}') _GLOBAL_ID_PATTERN = re.compile(r'([XCSADFPT][0-9]+)') # cspell:disable-line diff --git a/rsconcept/backend/apps/rsform/models/Editor.py b/rsconcept/backend/apps/rsform/models/Editor.py index bf0446a6..b3849867 100644 --- a/rsconcept/backend/apps/rsform/models/Editor.py +++ b/rsconcept/backend/apps/rsform/models/Editor.py @@ -1,14 +1,10 @@ ''' Models: Editor. ''' from typing import TYPE_CHECKING -from django.db.models import ( - Model, ForeignKey, - CASCADE, DateTimeField -) +from django.db.models import CASCADE, DateTimeField, ForeignKey, Model from apps.users.models import User - if TYPE_CHECKING: from .LibraryItem import LibraryItem diff --git a/rsconcept/backend/apps/rsform/models/LibraryItem.py b/rsconcept/backend/apps/rsform/models/LibraryItem.py index 13edd116..4154080a 100644 --- a/rsconcept/backend/apps/rsform/models/LibraryItem.py +++ b/rsconcept/backend/apps/rsform/models/LibraryItem.py @@ -1,14 +1,21 @@ ''' Models: LibraryItem. ''' from django.db import transaction from django.db.models import ( - SET_NULL, ForeignKey, Model, - TextChoices, TextField, BooleanField, CharField, DateTimeField + SET_NULL, + BooleanField, + CharField, + DateTimeField, + ForeignKey, + Model, + TextChoices, + TextField ) from apps.users.models import User -from .Version import Version -from .Subscription import Subscription + from .Editor import Editor +from .Subscription import Subscription +from .Version import Version class LibraryItemType(TextChoices): diff --git a/rsconcept/backend/apps/rsform/models/LibraryTemplate.py b/rsconcept/backend/apps/rsform/models/LibraryTemplate.py index 6ed11951..c49a5293 100644 --- a/rsconcept/backend/apps/rsform/models/LibraryTemplate.py +++ b/rsconcept/backend/apps/rsform/models/LibraryTemplate.py @@ -1,7 +1,5 @@ ''' Models: LibraryTemplate. ''' -from django.db.models import ( - CASCADE, ForeignKey, Model -) +from django.db.models import CASCADE, ForeignKey, Model class LibraryTemplate(Model): diff --git a/rsconcept/backend/apps/rsform/models/Subscription.py b/rsconcept/backend/apps/rsform/models/Subscription.py index 30d7ab91..6199ad38 100644 --- a/rsconcept/backend/apps/rsform/models/Subscription.py +++ b/rsconcept/backend/apps/rsform/models/Subscription.py @@ -1,11 +1,10 @@ ''' Models: Subscription. ''' from typing import TYPE_CHECKING -from django.db.models import ( - CASCADE, ForeignKey, Model -) +from django.db.models import CASCADE, ForeignKey, Model from apps.users.models import User + if TYPE_CHECKING: from .LibraryItem import LibraryItem diff --git a/rsconcept/backend/apps/rsform/models/Version.py b/rsconcept/backend/apps/rsform/models/Version.py index 2deff526..0f9174fc 100644 --- a/rsconcept/backend/apps/rsform/models/Version.py +++ b/rsconcept/backend/apps/rsform/models/Version.py @@ -1,7 +1,12 @@ ''' Models: Version. ''' from django.db.models import ( - CASCADE, ForeignKey, Model, - TextField, CharField, DateTimeField, JSONField + CASCADE, + CharField, + DateTimeField, + ForeignKey, + JSONField, + Model, + TextField ) diff --git a/rsconcept/backend/apps/rsform/models/__init__.py b/rsconcept/backend/apps/rsform/models/__init__.py index a9aa0b54..0f9ea349 100644 --- a/rsconcept/backend/apps/rsform/models/__init__.py +++ b/rsconcept/backend/apps/rsform/models/__init__.py @@ -2,8 +2,8 @@ from .api_RSForm import RSForm 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 .LibraryItem import LibraryItem, LibraryItemType, User +from .LibraryTemplate import LibraryTemplate from .Subscription import Subscription +from .Version import Version diff --git a/rsconcept/backend/apps/rsform/models/api_RSForm.py b/rsconcept/backend/apps/rsform/models/api_RSForm.py index b0c80593..f2af6014 100644 --- a/rsconcept/backend/apps/rsform/models/api_RSForm.py +++ b/rsconcept/backend/apps/rsform/models/api_RSForm.py @@ -2,21 +2,17 @@ from copy import deepcopy 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.models import QuerySet -from django.core.exceptions import ValidationError -from cctext import ( - Resolver, - Entity, - extract_entities, - split_grams, - TermForm -) +from .. import messages as msg +from ..graph import Graph from .api_RSLanguage import ( extract_globals, - get_type_prefix, generate_structure, + get_type_prefix, guess_type, infer_template, is_base_set, @@ -24,14 +20,10 @@ from .api_RSLanguage import ( is_simple_expression, split_template ) +from .Constituenta import Constituenta, CstType from .LibraryItem import LibraryItem, LibraryItemType -from .Constituenta import CstType, Constituenta from .Version import Version -from ..graph import Graph -from .. import messages as msg - - _INSERT_LAST: int = -1 diff --git a/rsconcept/backend/apps/rsform/models/api_RSLanguage.py b/rsconcept/backend/apps/rsform/models/api_RSLanguage.py index c4733ada..c92493b9 100644 --- a/rsconcept/backend/apps/rsform/models/api_RSLanguage.py +++ b/rsconcept/backend/apps/rsform/models/api_RSLanguage.py @@ -1,15 +1,14 @@ ''' Models: Definitions and utility function for RSLanguage. ''' import json import re +from enum import IntEnum, unique from typing import Set, Tuple, cast -from enum import IntEnum , unique import pyconcept from .. import messages as msg from .Constituenta import CstType - _RE_GLOBALS = r'[XCSADFPT]\d+' # cspell:disable-line _RE_TEMPLATE = r'R\d+' _RE_COMPLEX_SYMBOLS = r'[∀∃×ℬ;|:]' diff --git a/rsconcept/backend/apps/rsform/serializers/__init__.py b/rsconcept/backend/apps/rsform/serializers/__init__.py index 6dbba08a..c8534511 100644 --- a/rsconcept/backend/apps/rsform/serializers/__init__.py +++ b/rsconcept/backend/apps/rsform/serializers/__init__.py @@ -1,39 +1,35 @@ ''' REST API: Serializers. ''' from .basics import ( - TextSerializer, - ExpressionSerializer, - ExpressionParseSerializer, - ResolverSerializer, ASTNodeSerializer, - WordFormSerializer, - MultiFormSerializer + ExpressionParseSerializer, + ExpressionSerializer, + MultiFormSerializer, + ResolverSerializer, + TextSerializer, + WordFormSerializer ) from .data_access import ( - LibraryItemSerializer, - LibraryItemCloneSerializer, - RSFormSerializer, - RSFormParseSerializer, - VersionSerializer, - VersionCreateSerializer, - CstSerializer, - CstTargetSerializer, - CstMoveSerializer, - CstSubstituteSerializer, CstCreateSerializer, - CstRenameSerializer, 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 ( NewCstResponse, NewMultiCstResponse, NewVersionResponse, ResultTextResponse ) -from .io_pyconcept import PyConceptAdapter -from .io_files import ( - FileSerializer, - RSFormUploadSerializer, - RSFormTRSSerializer -) diff --git a/rsconcept/backend/apps/rsform/serializers/basics.py b/rsconcept/backend/apps/rsform/serializers/basics.py index ebf561bd..c6980e19 100644 --- a/rsconcept/backend/apps/rsform/serializers/basics.py +++ b/rsconcept/backend/apps/rsform/serializers/basics.py @@ -1,8 +1,8 @@ ''' Basic serializers that do not interact with database. ''' 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): diff --git a/rsconcept/backend/apps/rsform/serializers/data_access.py b/rsconcept/backend/apps/rsform/serializers/data_access.py index d1974c2a..7b37b787 100644 --- a/rsconcept/backend/apps/rsform/serializers/data_access.py +++ b/rsconcept/backend/apps/rsform/serializers/data_access.py @@ -1,17 +1,16 @@ ''' Serializers for persistent data manipulation. ''' from typing import Optional, cast + from django.contrib.auth.models import User from django.core.exceptions import PermissionDenied from django.db import transaction from rest_framework import serializers 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 ..models import Constituenta, CstType, LibraryItem, RSForm, Version +from .basics import CstParseSerializer +from .io_pyconcept import PyConceptAdapter class LibraryItemSerializer(serializers.ModelSerializer): diff --git a/rsconcept/backend/apps/rsform/serializers/io_files.py b/rsconcept/backend/apps/rsform/serializers/io_files.py index 36256b50..d2e906d3 100644 --- a/rsconcept/backend/apps/rsform/serializers/io_files.py +++ b/rsconcept/backend/apps/rsform/serializers/io_files.py @@ -1,10 +1,10 @@ ''' Serializers for file interaction. ''' -from rest_framework import serializers 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 ..models import Constituenta, LibraryItem, RSForm +from ..utils import fix_old_references _CST_TYPE = 'constituenta' _TRS_TYPE = 'rsform' diff --git a/rsconcept/backend/apps/rsform/serializers/io_pyconcept.py b/rsconcept/backend/apps/rsform/serializers/io_pyconcept.py index 9bfb0032..cad69f3a 100644 --- a/rsconcept/backend/apps/rsform/serializers/io_pyconcept.py +++ b/rsconcept/backend/apps/rsform/serializers/io_pyconcept.py @@ -1,11 +1,11 @@ ''' Data adapter to interface with pyconcept module. ''' import json -from typing import Optional, cast, Union +from typing import Optional, Union, cast import pyconcept -from ..models import RSForm from .. import messages as msg +from ..models import RSForm class PyConceptAdapter: diff --git a/rsconcept/backend/apps/rsform/serializers/schema_typing.py b/rsconcept/backend/apps/rsform/serializers/schema_typing.py index c470106e..0f70c5d4 100644 --- a/rsconcept/backend/apps/rsform/serializers/schema_typing.py +++ b/rsconcept/backend/apps/rsform/serializers/schema_typing.py @@ -3,6 +3,7 @@ from rest_framework import serializers from .data_access import RSFormParseSerializer + class ResultTextResponse(serializers.Serializer): ''' Serializer: Text result of a function call. ''' result = serializers.CharField() diff --git a/rsconcept/backend/apps/rsform/tests/__init__.py b/rsconcept/backend/apps/rsform/tests/__init__.py index 134a34ae..66f814e6 100644 --- a/rsconcept/backend/apps/rsform/tests/__init__.py +++ b/rsconcept/backend/apps/rsform/tests/__init__.py @@ -1,7 +1,7 @@ ''' Tests. ''' -from .t_imports import * -from .s_views import * from .s_models.t_RSForm import * -from .t_serializers import * +from .s_views import * from .t_graph import * +from .t_imports import * +from .t_serializers import * from .t_utils import * diff --git a/rsconcept/backend/apps/rsform/tests/s_models/__init__.py b/rsconcept/backend/apps/rsform/tests/s_models/__init__.py index d3c0aefe..f2ec99ed 100644 --- a/rsconcept/backend/apps/rsform/tests/s_models/__init__.py +++ b/rsconcept/backend/apps/rsform/tests/s_models/__init__.py @@ -1,6 +1,6 @@ ''' Tests for REST API. ''' from .t_Constituenta import * -from .t_LibraryItem import * from .t_Editor import * -from .t_Subscription import * +from .t_LibraryItem import * from .t_RSForm import * +from .t_Subscription import * diff --git a/rsconcept/backend/apps/rsform/tests/s_models/t_Constituenta.py b/rsconcept/backend/apps/rsform/tests/s_models/t_Constituenta.py index 4897d2ff..83b722a7 100644 --- a/rsconcept/backend/apps/rsform/tests/s_models/t_Constituenta.py +++ b/rsconcept/backend/apps/rsform/tests/s_models/t_Constituenta.py @@ -1,12 +1,9 @@ ''' Testing models: Constituenta. ''' -from django.test import TestCase from django.db.utils import IntegrityError from django.forms import ValidationError +from django.test import TestCase -from apps.rsform.models import ( - Constituenta, CstType, - LibraryItem, LibraryItemType -) +from apps.rsform.models import Constituenta, CstType, LibraryItem, LibraryItemType class TestConstituenta(TestCase): diff --git a/rsconcept/backend/apps/rsform/tests/s_models/t_Editor.py b/rsconcept/backend/apps/rsform/tests/s_models/t_Editor.py index 60db5e38..e02ffae8 100644 --- a/rsconcept/backend/apps/rsform/tests/s_models/t_Editor.py +++ b/rsconcept/backend/apps/rsform/tests/s_models/t_Editor.py @@ -1,7 +1,7 @@ ''' Testing models: Editor. ''' 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): diff --git a/rsconcept/backend/apps/rsform/tests/s_models/t_LibraryItem.py b/rsconcept/backend/apps/rsform/tests/s_models/t_LibraryItem.py index e0104842..bfcdbf30 100644 --- a/rsconcept/backend/apps/rsform/tests/s_models/t_LibraryItem.py +++ b/rsconcept/backend/apps/rsform/tests/s_models/t_LibraryItem.py @@ -1,10 +1,7 @@ ''' Testing models: LibraryItem. ''' from django.test import TestCase -from apps.rsform.models import ( - LibraryItem, LibraryItemType, Subscription, - User -) +from apps.rsform.models import LibraryItem, LibraryItemType, Subscription, User class TestLibraryItem(TestCase): diff --git a/rsconcept/backend/apps/rsform/tests/s_models/t_RSForm.py b/rsconcept/backend/apps/rsform/tests/s_models/t_RSForm.py index a80f6088..a6f4a369 100644 --- a/rsconcept/backend/apps/rsform/tests/s_models/t_RSForm.py +++ b/rsconcept/backend/apps/rsform/tests/s_models/t_RSForm.py @@ -1,11 +1,8 @@ ''' Testing models: api_RSForm. ''' -from django.test import TestCase from django.forms import ValidationError +from django.test import TestCase -from apps.rsform.models import ( - RSForm, Constituenta, CstType, - User -) +from apps.rsform.models import Constituenta, CstType, RSForm, User class TestRSForm(TestCase): diff --git a/rsconcept/backend/apps/rsform/tests/t_imports.py b/rsconcept/backend/apps/rsform/tests/t_imports.py index 7b337343..442e3874 100644 --- a/rsconcept/backend/apps/rsform/tests/t_imports.py +++ b/rsconcept/backend/apps/rsform/tests/t_imports.py @@ -1,11 +1,11 @@ ''' Testing imported pyconcept functionality ''' -from unittest import TestCase +import json +from unittest import TestCase as RegularTest import pyconcept as pc -import json -class TestIntegrations(TestCase): +class TestIntegrations(RegularTest): def test_convert_to_ascii(self): diff --git a/rsconcept/backend/apps/rsform/tests/t_serializers.py b/rsconcept/backend/apps/rsform/tests/t_serializers.py index 6fd599f4..b7ccb781 100644 --- a/rsconcept/backend/apps/rsform/tests/t_serializers.py +++ b/rsconcept/backend/apps/rsform/tests/t_serializers.py @@ -1,5 +1,6 @@ ''' Testing serializers ''' from django.test import TestCase + from apps.rsform.serializers import ExpressionSerializer diff --git a/rsconcept/backend/apps/rsform/tests/t_utils.py b/rsconcept/backend/apps/rsform/tests/t_utils.py index 3f6343cc..d59d3d71 100644 --- a/rsconcept/backend/apps/rsform/tests/t_utils.py +++ b/rsconcept/backend/apps/rsform/tests/t_utils.py @@ -1,6 +1,6 @@ ''' Unit tests: utils. ''' -import unittest import re +import unittest from apps.rsform.utils import apply_pattern, fix_old_references diff --git a/rsconcept/backend/apps/rsform/tests/testing_utils.py b/rsconcept/backend/apps/rsform/tests/testing_utils.py index b8737830..637b2032 100644 --- a/rsconcept/backend/apps/rsform/tests/testing_utils.py +++ b/rsconcept/backend/apps/rsform/tests/testing_utils.py @@ -2,6 +2,7 @@ from apps.rsform.models import LibraryItem + def response_contains(response, item: LibraryItem) -> bool: ''' Check if response contains specific item. ''' return any(x for x in response.data if x['id'] == item.pk) diff --git a/rsconcept/backend/apps/rsform/urls.py b/rsconcept/backend/apps/rsform/urls.py index 8fab1ac4..d4df9cb0 100644 --- a/rsconcept/backend/apps/rsform/urls.py +++ b/rsconcept/backend/apps/rsform/urls.py @@ -1,6 +1,7 @@ ''' Routing: RSForms for conceptual schemas. ''' -from django.urls import path, include +from django.urls import include, path from rest_framework import routers + from . import views library_router = routers.SimpleRouter(trailing_slash=False) diff --git a/rsconcept/backend/apps/rsform/utils.py b/rsconcept/backend/apps/rsform/utils.py index cdc8ce0c..2b37d33a 100644 --- a/rsconcept/backend/apps/rsform/utils.py +++ b/rsconcept/backend/apps/rsform/utils.py @@ -1,10 +1,10 @@ ''' Utility functions ''' import json -from io import BytesIO import re +from io import BytesIO 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 EXTEOR_INNER_FILENAME = 'document.json' diff --git a/rsconcept/backend/apps/rsform/views/__init__.py b/rsconcept/backend/apps/rsform/views/__init__.py index db2574e3..61c0a1d0 100644 --- a/rsconcept/backend/apps/rsform/views/__init__.py +++ b/rsconcept/backend/apps/rsform/views/__init__.py @@ -1,29 +1,8 @@ ''' REST API: Endpoint processors. ''' -from .library import ( - LibraryActiveView, - LibraryAdminView, - LibraryTemplatesView, - LibraryViewSet -) +from .cctext import generate_lexeme, inflect, parse_text from .constituents import ConstituentAPIView -from .versions import ( - VersionViewset, - create_version, - export_file, - retrieve_version -) -from .rsforms import ( - RSFormViewSet, TrsImportView, - create_rsform -) +from .library import LibraryActiveView, LibraryAdminView, LibraryTemplatesView, LibraryViewSet from .operations import inline_synthesis -from .cctext import ( - parse_text, - generate_lexeme, - inflect -) -from .rslang import ( - convert_to_ascii, - convert_to_math, - parse_expression -) +from .rsforms import RSFormViewSet, TrsImportView, create_rsform +from .rslang import convert_to_ascii, convert_to_math, parse_expression +from .versions import VersionViewset, create_version, export_file, retrieve_version diff --git a/rsconcept/backend/apps/rsform/views/cctext.py b/rsconcept/backend/apps/rsform/views/cctext.py index 0b547fbc..ed0e60a3 100644 --- a/rsconcept/backend/apps/rsform/views/cctext.py +++ b/rsconcept/backend/apps/rsform/views/cctext.py @@ -1,11 +1,11 @@ ''' Endpoints for cctext. ''' -from rest_framework.decorators import api_view -from rest_framework.response import Response -from rest_framework.request import Request +import cctext as ct 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 -import cctext as ct from .. import serializers as s diff --git a/rsconcept/backend/apps/rsform/views/constituents.py b/rsconcept/backend/apps/rsform/views/constituents.py index 5cbabd42..55c81c96 100644 --- a/rsconcept/backend/apps/rsform/views/constituents.py +++ b/rsconcept/backend/apps/rsform/views/constituents.py @@ -1,6 +1,6 @@ ''' Endpoints for Constituenta. ''' -from rest_framework import generics, permissions from drf_spectacular.utils import extend_schema, extend_schema_view +from rest_framework import generics, permissions from .. import models as m from .. import serializers as s diff --git a/rsconcept/backend/apps/rsform/views/library.py b/rsconcept/backend/apps/rsform/views/library.py index f53e324e..6a6d4136 100644 --- a/rsconcept/backend/apps/rsform/views/library.py +++ b/rsconcept/backend/apps/rsform/views/library.py @@ -1,15 +1,17 @@ ''' Endpoints for library. ''' from copy import deepcopy from typing import cast + from django.db import transaction -from django_filters.rest_framework import DjangoFilterBackend from django.db.models import Q -from rest_framework import viewsets, filters, generics, permissions -from rest_framework.decorators import action -from rest_framework.response import Response -from rest_framework.request import Request +from django_filters.rest_framework import DjangoFilterBackend 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 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 serializers as s diff --git a/rsconcept/backend/apps/rsform/views/operations.py b/rsconcept/backend/apps/rsform/views/operations.py index ba900175..4520d29f 100644 --- a/rsconcept/backend/apps/rsform/views/operations.py +++ b/rsconcept/backend/apps/rsform/views/operations.py @@ -1,15 +1,17 @@ ''' Endpoints for RSForm. ''' from typing import cast + 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 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 serializers as s + @extend_schema( summary='Inline synthesis: merge one schema into another', tags=['Operations'], diff --git a/rsconcept/backend/apps/rsform/views/rsforms.py b/rsconcept/backend/apps/rsform/views/rsforms.py index a7dd1e44..f8a7b56d 100644 --- a/rsconcept/backend/apps/rsform/views/rsforms.py +++ b/rsconcept/backend/apps/rsform/views/rsforms.py @@ -1,21 +1,22 @@ ''' Endpoints for RSForm. ''' import json -from typing import cast, Union -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 +from typing import Union, cast 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 serializers as s from .. import utils -from .. import messages as msg @extend_schema(tags=['RSForm']) diff --git a/rsconcept/backend/apps/rsform/views/rslang.py b/rsconcept/backend/apps/rsform/views/rslang.py index e709d40e..528416dc 100644 --- a/rsconcept/backend/apps/rsform/views/rslang.py +++ b/rsconcept/backend/apps/rsform/views/rslang.py @@ -1,12 +1,13 @@ ''' Endpoints pyconcept formal language parsing. ''' 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 +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 diff --git a/rsconcept/backend/apps/rsform/views/versions.py b/rsconcept/backend/apps/rsform/views/versions.py index 92803d64..3159444e 100644 --- a/rsconcept/backend/apps/rsform/views/versions.py +++ b/rsconcept/backend/apps/rsform/views/versions.py @@ -1,12 +1,14 @@ ''' Endpoints for versions. ''' from typing import cast + 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 rest_framework import generics, permissions 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 serializers as s diff --git a/rsconcept/backend/apps/users/apps.py b/rsconcept/backend/apps/users/apps.py index 61a6e7b5..3d6b9e51 100644 --- a/rsconcept/backend/apps/users/apps.py +++ b/rsconcept/backend/apps/users/apps.py @@ -8,4 +8,4 @@ class UsersConfig(AppConfig): name = 'apps.users' 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 diff --git a/rsconcept/backend/apps/users/serializers.py b/rsconcept/backend/apps/users/serializers.py index a790e5ee..984804f7 100644 --- a/rsconcept/backend/apps/users/serializers.py +++ b/rsconcept/backend/apps/users/serializers.py @@ -4,8 +4,9 @@ from django.contrib.auth.password_validation import validate_password from rest_framework import serializers from apps.rsform.models import Subscription -from . import models + from . import messages as msg +from . import models class NonFieldErrorSerializer(serializers.Serializer): diff --git a/rsconcept/backend/apps/users/signals.py b/rsconcept/backend/apps/users/signals.py index ffee644d..522c6664 100644 --- a/rsconcept/backend/apps/users/signals.py +++ b/rsconcept/backend/apps/users/signals.py @@ -3,9 +3,7 @@ from django.core.mail import send_mail from django.dispatch import receiver from django.template.loader import render_to_string 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_SUBJECT = 'Восстановление пароля КонцептПортал' diff --git a/rsconcept/backend/apps/users/tests/__init__.py b/rsconcept/backend/apps/users/tests/__init__.py index 1236f318..bdcf0305 100644 --- a/rsconcept/backend/apps/users/tests/__init__.py +++ b/rsconcept/backend/apps/users/tests/__init__.py @@ -1,3 +1,3 @@ ''' Tests. ''' -from .t_views import * from .t_serializers import * +from .t_views import * diff --git a/rsconcept/backend/apps/users/tests/t_serializers.py b/rsconcept/backend/apps/users/tests/t_serializers.py index e677559c..fd12fad9 100644 --- a/rsconcept/backend/apps/users/tests/t_serializers.py +++ b/rsconcept/backend/apps/users/tests/t_serializers.py @@ -1,5 +1,5 @@ ''' 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.serializers import LoginSerializer diff --git a/rsconcept/backend/apps/users/tests/t_views.py b/rsconcept/backend/apps/users/tests/t_views.py index 05270a2f..57a4a738 100644 --- a/rsconcept/backend/apps/users/tests/t_views.py +++ b/rsconcept/backend/apps/users/tests/t_views.py @@ -1,8 +1,8 @@ ''' 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.users.models import User class TestUserAPIViews(APITestCase): diff --git a/rsconcept/backend/apps/users/urls.py b/rsconcept/backend/apps/users/urls.py index eff28fae..4972e3c1 100644 --- a/rsconcept/backend/apps/users/urls.py +++ b/rsconcept/backend/apps/users/urls.py @@ -1,10 +1,10 @@ ''' Routing: User profile and Authorization. ''' from django.urls import path -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_validate_token # type: ignore -from . import views +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_validate_token # type: ignore +from . import views urlpatterns = [ path('api/auth', views.AuthAPIView.as_view()), diff --git a/rsconcept/backend/apps/users/views.py b/rsconcept/backend/apps/users/views.py index d3e3346d..b41ea6cc 100644 --- a/rsconcept/backend/apps/users/views.py +++ b/rsconcept/backend/apps/users/views.py @@ -1,13 +1,13 @@ ''' REST API: User profile and Authorization. ''' 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 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 serializers as s class LoginAPIView(views.APIView): diff --git a/rsconcept/backend/project/settings.py b/rsconcept/backend/project/settings.py index 296a22e8..86f5fa1f 100644 --- a/rsconcept/backend/project/settings.py +++ b/rsconcept/backend/project/settings.py @@ -10,11 +10,12 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/4.1/ref/settings/ ''' -import sys import logging import os +import sys from pathlib import Path + def _get_secret(key: str, default): value = os.environ.get(key, default) if os.path.isfile(value): diff --git a/rsconcept/backend/project/urls.py b/rsconcept/backend/project/urls.py index 55823dc2..c056c273 100644 --- a/rsconcept/backend/project/urls.py +++ b/rsconcept/backend/project/urls.py @@ -1,11 +1,10 @@ ''' Main URL router ''' -from django.contrib import admin -from django.urls import path, include from django.conf import settings 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 - urlpatterns = [ path('admin', admin.site.urls), path('api/', include('apps.rsform.urls')), diff --git a/rsconcept/frontend/package-lock.json b/rsconcept/frontend/package-lock.json index 5075422d..92e90bdb 100644 --- a/rsconcept/frontend/package-lock.json +++ b/rsconcept/frontend/package-lock.json @@ -12,7 +12,7 @@ "@tanstack/react-table": "^8.17.3", "@uiw/codemirror-themes": "^4.22.1", "@uiw/react-codemirror": "^4.22.1", - "axios": "^1.6.8", + "axios": "^1.7.2", "clsx": "^2.1.1", "framer-motion": "^10.18.0", "js-file-download": "^0.4.12", @@ -28,18 +28,18 @@ "react-tabs": "^6.0.2", "react-toastify": "^9.1.3", "react-tooltip": "^5.26.4", - "reagraph": "^4.17.4", + "reagraph": "^4.18.1", "use-debounce": "^10.0.0" }, "devDependencies": { "@lezer/generator": "^1.7.0", "@types/jest": "^29.5.12", "@types/node": "^20.12.12", - "@types/react": "^18.3.2", + "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^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", "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", @@ -49,7 +49,7 @@ "jest": "^29.7.0", "postcss": "^8.4.38", "tailwindcss": "^3.4.3", - "ts-jest": "^29.1.2", + "ts-jest": "^29.1.3", "typescript": "^5.4.5", "vite": "^4.5.3" } @@ -81,12 +81,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", + "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/highlight": "^7.24.6", "picocolors": "^1.0.0" }, "engines": { @@ -94,30 +94,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", + "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", - "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz", + "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.24.5", - "@babel/helpers": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5", + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helpers": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/template": "^7.24.6", + "@babel/traverse": "^7.24.6", + "@babel/types": "^7.24.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -142,12 +142,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", - "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz", + "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.5", + "@babel/types": "^7.24.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -157,25 +157,25 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz", + "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", + "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", + "@babel/compat-data": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -194,62 +194,62 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", + "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", + "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", + "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz", + "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.0" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", - "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz", + "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==", "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.24.3", - "@babel/helper-simple-access": "^7.24.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/helper-validator-identifier": "^7.24.5" + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-simple-access": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -259,86 +259,85 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz", + "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", - "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz", + "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", + "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", + "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", + "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz", + "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", - "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz", + "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==", "license": "MIT", "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5" + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", + "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.6", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -348,9 +347,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", "license": "MIT", "bin": { "parser": "bin/babel-parser.js" @@ -425,12 +424,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", - "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz", + "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -534,13 +533,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", - "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz", + "integrity": "sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -550,13 +549,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.5.tgz", - "integrity": "sha512-RtCJoUO2oYrYwFPtR1/jkoBEcFuI1ae9a9IMxeyAVa3a1Ap4AnxmyIKG2b2FaJKqkidw/0cxRbWN+HOs6ZWd1w==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.6.tgz", + "integrity": "sha512-FfZfHXtQ5jYPQsCRyLpOv2GeLIIJhs8aydpNh39vRDjhD411XcfWDni5i7OjP/Rs8GAtTn7sWFFELJSHqkIxYg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -566,13 +565,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", - "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.6.tgz", + "integrity": "sha512-BQTBCXmFRreU3oTUXcGKuPOfXAGb1liNY4AvvFKsOBAJ89RKcTsIrSsnMYkj59fNa66OFKnSa4AJZfy5Y4B9WA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -582,9 +581,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", + "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -594,33 +593,33 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", + "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", - "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz", + "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/types": "^7.24.5", + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-hoist-variables": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -629,13 +628,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", + "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", "to-fast-properties": "^2.0.0" }, "engines": { @@ -694,9 +693,9 @@ } }, "node_modules/@codemirror/lint": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.7.1.tgz", - "integrity": "sha512-rELba6QJD20/bNXWP/cKTGLrwVEcpa2ViwULCV03ONcY1Je85++7sczVRUlnE4TJMjatx3IJTz6HX4NXi+moXw==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.0.tgz", + "integrity": "sha512-lsFofvaw0lnPRJlQylNsC4IRt/1lI4OD/yYslrSGVndOJfStc58v+8p9dgGiD90ktOfL7OhBWns1ZETYgz0EJA==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", @@ -2939,9 +2938,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, "license": "MIT", "dependencies": { @@ -3048,9 +3047,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz", - "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==", + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -3106,9 +3105,9 @@ "license": "MIT" }, "node_modules/@types/three": { - "version": "0.164.0", - "resolved": "https://registry.npmjs.org/@types/three/-/three-0.164.0.tgz", - "integrity": "sha512-SFDofn9dJVrE+1DKta7xj7lc4ru7B3S3yf10NsxOserW57aQlB6GxtAS1UK5To3LfEMN5HUHMu3n5v+M5rApgA==", + "version": "0.164.1", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.164.1.tgz", + "integrity": "sha512-dR/trWDhyaNqJV38rl1TonlCA9DpnX7OPYDWD81bmBGn/+uEc3+zNalFxQcV4FlPTeDBhCY3SFWKvK6EJwL88g==", "license": "MIT", "peer": true, "dependencies": { @@ -3438,17 +3437,17 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", - "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.0.tgz", + "integrity": "sha512-KcEbMsn4Dpk+LIbHMj7gDPRKaTMStxxWRkRmxsg/jVdFdJCZWt1SchZcf0M4t8lIKdwwMsEyzhrcOXRrDPtOBw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.23.5", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.0" + "react-refresh": "^0.14.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -3593,6 +3592,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", "license": "ISC", "optional": true, "dependencies": { @@ -3672,9 +3672,9 @@ } }, "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -3952,13 +3952,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -4074,9 +4074,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001620", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", - "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", + "version": "1.0.30001621", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz", + "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==", "funding": [ { "type": "opencollective", @@ -4876,9 +4876,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.774", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz", - "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==", + "version": "1.4.782", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.782.tgz", + "integrity": "sha512-JUfU61e8tr+i5Y1FKXcKs+Xe+rJ+CEqm4cgv1kMihPE2EvYHmYyVr3Im/+1+Z5B29Be2EEGCZCwAc6Tazdl1Yg==", "license": "ISC" }, "node_modules/ellipsize": { @@ -5472,9 +5472,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -5699,6 +5699,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", "license": "ISC", "optional": true, "dependencies": { @@ -6172,6 +6173,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "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, "license": "ISC", "dependencies": { @@ -6436,9 +6438,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", + "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -8456,13 +8458,13 @@ "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -8733,6 +8735,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", "license": "ISC", "optional": true, "dependencies": { @@ -9243,9 +9246,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9752,9 +9755,9 @@ } }, "node_modules/reagraph": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/reagraph/-/reagraph-4.17.4.tgz", - "integrity": "sha512-tQ19t4k3rRCRVShxUosyzNKCmlcxy3dGOw2P+0qQWgK8L8H5GCI77aNIXDWu3P20VfD134SYvpY2/oYhj9ojdw==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/reagraph/-/reagraph-4.18.1.tgz", + "integrity": "sha512-a6EAQ3nAHQoemF6UQLZ+xaXvROZuqhxCUYiViNPl+dnn/Few8kyrMselpUlyC/QTtfk1XiCsFnz1aCyI0GNFWQ==", "license": "Apache-2.0", "dependencies": { "@react-spring/three": "9.6.1", @@ -10377,17 +10380,17 @@ } }, "node_modules/sucrase/node_modules/glob": { - "version": "10.3.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", - "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.11.0" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -10399,10 +10402,26 @@ "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": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", - "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -10724,9 +10743,9 @@ "license": "Apache-2.0" }, "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.1.3", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.3.tgz", + "integrity": "sha512-6L9qz3ginTd1NKhOxmkP0qU3FyKjj5CPoY+anszfVn6Pmv/RIKzhiMCsH7Yb7UvJR9I2A64rm4zQl531s2F1iw==", "dev": true, "license": "MIT", "dependencies": { @@ -10743,10 +10762,11 @@ "ts-jest": "cli.js" }, "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": { "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", @@ -10756,6 +10776,9 @@ "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, diff --git a/rsconcept/frontend/package.json b/rsconcept/frontend/package.json index c1563af7..1ac5eec3 100644 --- a/rsconcept/frontend/package.json +++ b/rsconcept/frontend/package.json @@ -16,7 +16,7 @@ "@tanstack/react-table": "^8.17.3", "@uiw/codemirror-themes": "^4.22.1", "@uiw/react-codemirror": "^4.22.1", - "axios": "^1.6.8", + "axios": "^1.7.2", "clsx": "^2.1.1", "framer-motion": "^10.18.0", "js-file-download": "^0.4.12", @@ -32,18 +32,18 @@ "react-tabs": "^6.0.2", "react-toastify": "^9.1.3", "react-tooltip": "^5.26.4", - "reagraph": "^4.17.4", + "reagraph": "^4.18.1", "use-debounce": "^10.0.0" }, "devDependencies": { "@lezer/generator": "^1.7.0", "@types/jest": "^29.5.12", "@types/node": "^20.12.12", - "@types/react": "^18.3.2", + "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^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", "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", @@ -53,7 +53,7 @@ "jest": "^29.7.0", "postcss": "^8.4.38", "tailwindcss": "^3.4.3", - "ts-jest": "^29.1.2", + "ts-jest": "^29.1.3", "typescript": "^5.4.5", "vite": "^4.5.3" },