From eccb67d5b65246ed93892390961802e3ff4ba985 Mon Sep 17 00:00:00 2001 From: wangxiaolei Date: Fri, 27 Feb 2026 18:49:14 +0800 Subject: [PATCH 1/3] refactor: decouple the business logic from datasource_node (#32515) Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- api/.importlinter | 9 - api/core/app/workflow/node_factory.py | 11 + api/core/datasource/datasource_manager.py | 260 ++++++++++- .../entities/datasource_entities.py | 9 +- .../nodes/datasource/datasource_node.py | 416 +++--------------- .../datasource_manager_protocol.py | 50 +++ .../test_datasource_manager_integration.py | 42 ++ .../test_datasource_node_integration.py | 84 ++++ .../datasource/test_datasource_manager.py | 135 ++++++ .../nodes/datasource/test_datasource_node.py | 93 ++++ 10 files changed, 752 insertions(+), 357 deletions(-) create mode 100644 api/core/workflow/repositories/datasource_manager_protocol.py create mode 100644 api/tests/integration_tests/core/datasource/test_datasource_manager_integration.py create mode 100644 api/tests/integration_tests/core/workflow/nodes/datasource/test_datasource_node_integration.py create mode 100644 api/tests/unit_tests/core/datasource/test_datasource_manager.py create mode 100644 api/tests/unit_tests/core/workflow/nodes/datasource/test_datasource_node.py diff --git a/api/.importlinter b/api/.importlinter index c9364a0896..725999c28e 100644 --- a/api/.importlinter +++ b/api/.importlinter @@ -50,7 +50,6 @@ forbidden_modules = allow_indirect_imports = True ignore_imports = core.workflow.nodes.agent.agent_node -> extensions.ext_database - core.workflow.nodes.datasource.datasource_node -> extensions.ext_database core.workflow.nodes.knowledge_index.knowledge_index_node -> extensions.ext_database core.workflow.nodes.llm.file_saver -> extensions.ext_database core.workflow.nodes.llm.llm_utils -> extensions.ext_database @@ -106,9 +105,6 @@ ignore_imports = core.workflow.nodes.agent.agent_node -> core.model_manager core.workflow.nodes.agent.agent_node -> core.provider_manager core.workflow.nodes.agent.agent_node -> core.tools.tool_manager - core.workflow.nodes.datasource.datasource_node -> models.model - core.workflow.nodes.datasource.datasource_node -> models.tools - core.workflow.nodes.datasource.datasource_node -> services.datasource_provider_service core.workflow.nodes.document_extractor.node -> core.helper.ssrf_proxy core.workflow.nodes.http_request.node -> core.tools.tool_file_manager core.workflow.nodes.iteration.iteration_node -> core.app.workflow.node_factory @@ -146,8 +142,6 @@ ignore_imports = core.workflow.workflow_entry -> core.app.apps.exc core.workflow.workflow_entry -> core.app.entities.app_invoke_entities core.workflow.workflow_entry -> core.app.workflow.node_factory - core.workflow.nodes.datasource.datasource_node -> core.datasource.datasource_manager - core.workflow.nodes.datasource.datasource_node -> core.datasource.utils.message_transformer core.workflow.nodes.llm.llm_utils -> core.entities.provider_entities core.workflow.nodes.parameter_extractor.parameter_extractor_node -> core.model_manager core.workflow.nodes.question_classifier.question_classifier_node -> core.model_manager @@ -160,7 +154,6 @@ ignore_imports = core.workflow.nodes.code.code_node -> core.helper.code_executor.javascript.javascript_code_provider core.workflow.nodes.code.code_node -> core.helper.code_executor.python3.python3_code_provider core.workflow.nodes.code.entities -> core.helper.code_executor.code_executor - core.workflow.nodes.datasource.datasource_node -> core.variables.variables core.workflow.nodes.http_request.executor -> core.helper.ssrf_proxy core.workflow.nodes.http_request.node -> core.helper.ssrf_proxy core.workflow.nodes.llm.file_saver -> core.helper.ssrf_proxy @@ -197,7 +190,6 @@ ignore_imports = core.workflow.nodes.code.code_node -> core.variables.segments core.workflow.nodes.code.code_node -> core.variables.types core.workflow.nodes.code.entities -> core.variables.types - core.workflow.nodes.datasource.datasource_node -> core.variables.segments core.workflow.nodes.document_extractor.node -> core.variables core.workflow.nodes.document_extractor.node -> core.variables.segments core.workflow.nodes.http_request.executor -> core.variables.segments @@ -240,7 +232,6 @@ ignore_imports = core.workflow.variable_loader -> core.variables.consts core.workflow.workflow_type_encoder -> core.variables core.workflow.nodes.agent.agent_node -> extensions.ext_database - core.workflow.nodes.datasource.datasource_node -> extensions.ext_database core.workflow.nodes.knowledge_index.knowledge_index_node -> extensions.ext_database core.workflow.nodes.llm.file_saver -> extensions.ext_database core.workflow.nodes.llm.llm_utils -> extensions.ext_database diff --git a/api/core/app/workflow/node_factory.py b/api/core/app/workflow/node_factory.py index 07dec1b070..3eeb1d5d58 100644 --- a/api/core/app/workflow/node_factory.py +++ b/api/core/app/workflow/node_factory.py @@ -5,6 +5,7 @@ from typing_extensions import override from configs import dify_config from core.app.llm.model_access import build_dify_model_access +from core.datasource.datasource_manager import DatasourceManager from core.helper.code_executor.code_executor import CodeExecutionError, CodeExecutor from core.helper.code_executor.code_node_provider import CodeNodeProvider from core.helper.ssrf_proxy import ssrf_proxy @@ -18,6 +19,7 @@ from core.workflow.nodes.base.node import Node from core.workflow.nodes.code.code_node import CodeNode, WorkflowCodeExecutor from core.workflow.nodes.code.entities import CodeLanguage from core.workflow.nodes.code.limits import CodeNodeLimits +from core.workflow.nodes.datasource import DatasourceNode from core.workflow.nodes.document_extractor import DocumentExtractorNode, UnstructuredApiConfig from core.workflow.nodes.http_request import HttpRequestNode, build_http_request_config from core.workflow.nodes.knowledge_retrieval.knowledge_retrieval_node import KnowledgeRetrievalNode @@ -178,6 +180,15 @@ class DifyNodeFactory(NodeFactory): model_factory=self._llm_model_factory, ) + if node_type == NodeType.DATASOURCE: + return DatasourceNode( + id=node_id, + config=node_config, + graph_init_params=self.graph_init_params, + graph_runtime_state=self.graph_runtime_state, + datasource_manager=DatasourceManager, + ) + if node_type == NodeType.KNOWLEDGE_RETRIEVAL: return KnowledgeRetrievalNode( id=node_id, diff --git a/api/core/datasource/datasource_manager.py b/api/core/datasource/datasource_manager.py index 002415a7db..9c48f755a9 100644 --- a/api/core/datasource/datasource_manager.py +++ b/api/core/datasource/datasource_manager.py @@ -1,16 +1,39 @@ import logging +from collections.abc import Generator from threading import Lock +from typing import Any, cast + +from sqlalchemy import select import contexts from core.datasource.__base.datasource_plugin import DatasourcePlugin from core.datasource.__base.datasource_provider import DatasourcePluginProviderController -from core.datasource.entities.datasource_entities import DatasourceProviderType +from core.datasource.entities.datasource_entities import ( + DatasourceMessage, + DatasourceProviderType, + GetOnlineDocumentPageContentRequest, + OnlineDriveDownloadFileRequest, +) from core.datasource.errors import DatasourceProviderNotFoundError from core.datasource.local_file.local_file_provider import LocalFileDatasourcePluginProviderController +from core.datasource.online_document.online_document_plugin import OnlineDocumentDatasourcePlugin from core.datasource.online_document.online_document_provider import OnlineDocumentDatasourcePluginProviderController +from core.datasource.online_drive.online_drive_plugin import OnlineDriveDatasourcePlugin from core.datasource.online_drive.online_drive_provider import OnlineDriveDatasourcePluginProviderController +from core.datasource.utils.message_transformer import DatasourceFileMessageTransformer from core.datasource.website_crawl.website_crawl_provider import WebsiteCrawlDatasourcePluginProviderController +from core.db.session_factory import session_factory from core.plugin.impl.datasource import PluginDatasourceManager +from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus +from core.workflow.enums import WorkflowNodeExecutionMetadataKey +from core.workflow.file import File +from core.workflow.file.enums import FileTransferMethod, FileType +from core.workflow.node_events import NodeRunResult, StreamChunkEvent, StreamCompletedEvent +from core.workflow.repositories.datasource_manager_protocol import DatasourceParameter, OnlineDriveDownloadFileParam +from factories import file_factory +from models.model import UploadFile +from models.tools import ToolFile +from services.datasource_provider_service import DatasourceProviderService logger = logging.getLogger(__name__) @@ -103,3 +126,238 @@ class DatasourceManager: tenant_id, datasource_type, ).get_datasource(datasource_name) + + @classmethod + def get_icon_url(cls, provider_id: str, tenant_id: str, datasource_name: str, datasource_type: str) -> str: + datasource_runtime = cls.get_datasource_runtime( + provider_id=provider_id, + datasource_name=datasource_name, + tenant_id=tenant_id, + datasource_type=DatasourceProviderType.value_of(datasource_type), + ) + return datasource_runtime.get_icon_url(tenant_id) + + @classmethod + def stream_online_results( + cls, + *, + user_id: str, + datasource_name: str, + datasource_type: str, + provider_id: str, + tenant_id: str, + provider: str, + plugin_id: str, + credential_id: str, + datasource_param: DatasourceParameter | None = None, + online_drive_request: OnlineDriveDownloadFileParam | None = None, + ) -> Generator[DatasourceMessage, None, Any]: + """ + Pull-based streaming of domain messages from datasource plugins. + Returns a generator that yields DatasourceMessage and finally returns a minimal final payload. + Only ONLINE_DOCUMENT and ONLINE_DRIVE are streamable here; other types are handled by nodes directly. + """ + ds_type = DatasourceProviderType.value_of(datasource_type) + runtime = cls.get_datasource_runtime( + provider_id=provider_id, + datasource_name=datasource_name, + tenant_id=tenant_id, + datasource_type=ds_type, + ) + + dsp_service = DatasourceProviderService() + credentials = dsp_service.get_datasource_credentials( + tenant_id=tenant_id, + provider=provider, + plugin_id=plugin_id, + credential_id=credential_id, + ) + + if ds_type == DatasourceProviderType.ONLINE_DOCUMENT: + doc_runtime = cast(OnlineDocumentDatasourcePlugin, runtime) + if credentials: + doc_runtime.runtime.credentials = credentials + if datasource_param is None: + raise ValueError("datasource_param is required for ONLINE_DOCUMENT streaming") + inner_gen: Generator[DatasourceMessage, None, None] = doc_runtime.get_online_document_page_content( + user_id=user_id, + datasource_parameters=GetOnlineDocumentPageContentRequest( + workspace_id=datasource_param.workspace_id, + page_id=datasource_param.page_id, + type=datasource_param.type, + ), + provider_type=ds_type, + ) + elif ds_type == DatasourceProviderType.ONLINE_DRIVE: + drive_runtime = cast(OnlineDriveDatasourcePlugin, runtime) + if credentials: + drive_runtime.runtime.credentials = credentials + if online_drive_request is None: + raise ValueError("online_drive_request is required for ONLINE_DRIVE streaming") + inner_gen = drive_runtime.online_drive_download_file( + user_id=user_id, + request=OnlineDriveDownloadFileRequest( + id=online_drive_request.id, + bucket=online_drive_request.bucket, + ), + provider_type=ds_type, + ) + else: + raise ValueError(f"Unsupported datasource type for streaming: {ds_type}") + + # Bridge through to caller while preserving generator return contract + yield from inner_gen + # No structured final data here; node/adapter will assemble outputs + return {} + + @classmethod + def stream_node_events( + cls, + *, + node_id: str, + user_id: str, + datasource_name: str, + datasource_type: str, + provider_id: str, + tenant_id: str, + provider: str, + plugin_id: str, + credential_id: str, + parameters_for_log: dict[str, Any], + datasource_info: dict[str, Any], + variable_pool: Any, + datasource_param: DatasourceParameter | None = None, + online_drive_request: OnlineDriveDownloadFileParam | None = None, + ) -> Generator[StreamChunkEvent | StreamCompletedEvent, None, None]: + ds_type = DatasourceProviderType.value_of(datasource_type) + + messages = cls.stream_online_results( + user_id=user_id, + datasource_name=datasource_name, + datasource_type=datasource_type, + provider_id=provider_id, + tenant_id=tenant_id, + provider=provider, + plugin_id=plugin_id, + credential_id=credential_id, + datasource_param=datasource_param, + online_drive_request=online_drive_request, + ) + + transformed = DatasourceFileMessageTransformer.transform_datasource_invoke_messages( + messages=messages, user_id=user_id, tenant_id=tenant_id, conversation_id=None + ) + + variables: dict[str, Any] = {} + file_out: File | None = None + + for message in transformed: + mtype = message.type + if mtype in { + DatasourceMessage.MessageType.IMAGE_LINK, + DatasourceMessage.MessageType.BINARY_LINK, + DatasourceMessage.MessageType.IMAGE, + }: + wanted_ds_type = ds_type in { + DatasourceProviderType.ONLINE_DRIVE, + DatasourceProviderType.ONLINE_DOCUMENT, + } + if wanted_ds_type and isinstance(message.message, DatasourceMessage.TextMessage): + url = message.message.text + + datasource_file_id = str(url).split("/")[-1].split(".")[0] + with session_factory.create_session() as session: + stmt = select(ToolFile).where( + ToolFile.id == datasource_file_id, ToolFile.tenant_id == tenant_id + ) + datasource_file = session.scalar(stmt) + if not datasource_file: + raise ValueError( + f"ToolFile not found for file_id={datasource_file_id}, tenant_id={tenant_id}" + ) + mime_type = datasource_file.mimetype + if datasource_file is not None: + mapping = { + "tool_file_id": datasource_file_id, + "type": file_factory.get_file_type_by_mime_type(mime_type), + "transfer_method": FileTransferMethod.TOOL_FILE, + "url": url, + } + file_out = file_factory.build_from_mapping(mapping=mapping, tenant_id=tenant_id) + elif mtype == DatasourceMessage.MessageType.TEXT: + assert isinstance(message.message, DatasourceMessage.TextMessage) + yield StreamChunkEvent(selector=[node_id, "text"], chunk=message.message.text, is_final=False) + elif mtype == DatasourceMessage.MessageType.LINK: + assert isinstance(message.message, DatasourceMessage.TextMessage) + yield StreamChunkEvent( + selector=[node_id, "text"], chunk=f"Link: {message.message.text}\n", is_final=False + ) + elif mtype == DatasourceMessage.MessageType.VARIABLE: + assert isinstance(message.message, DatasourceMessage.VariableMessage) + name = message.message.variable_name + value = message.message.variable_value + if message.message.stream: + assert isinstance(value, str), "stream variable_value must be str" + variables[name] = variables.get(name, "") + value + yield StreamChunkEvent(selector=[node_id, name], chunk=value, is_final=False) + else: + variables[name] = value + elif mtype == DatasourceMessage.MessageType.FILE: + if ds_type == DatasourceProviderType.ONLINE_DRIVE and message.meta: + f = message.meta.get("file") + if isinstance(f, File): + file_out = f + else: + pass + + yield StreamChunkEvent(selector=[node_id, "text"], chunk="", is_final=True) + + if ds_type == DatasourceProviderType.ONLINE_DRIVE and file_out is not None: + variable_pool.add([node_id, "file"], file_out) + + if ds_type == DatasourceProviderType.ONLINE_DOCUMENT: + yield StreamCompletedEvent( + node_run_result=NodeRunResult( + status=WorkflowNodeExecutionStatus.SUCCEEDED, + inputs=parameters_for_log, + metadata={WorkflowNodeExecutionMetadataKey.DATASOURCE_INFO: datasource_info}, + outputs={**variables}, + ) + ) + else: + yield StreamCompletedEvent( + node_run_result=NodeRunResult( + status=WorkflowNodeExecutionStatus.SUCCEEDED, + inputs=parameters_for_log, + metadata={WorkflowNodeExecutionMetadataKey.DATASOURCE_INFO: datasource_info}, + outputs={ + "file": file_out, + "datasource_type": ds_type, + }, + ) + ) + + @classmethod + def get_upload_file_by_id(cls, file_id: str, tenant_id: str) -> File: + with session_factory.create_session() as session: + upload_file = ( + session.query(UploadFile).where(UploadFile.id == file_id, UploadFile.tenant_id == tenant_id).first() + ) + if not upload_file: + raise ValueError(f"UploadFile not found for file_id={file_id}, tenant_id={tenant_id}") + + file_info = File( + id=upload_file.id, + filename=upload_file.name, + extension="." + upload_file.extension, + mime_type=upload_file.mime_type, + tenant_id=tenant_id, + type=FileType.CUSTOM, + transfer_method=FileTransferMethod.LOCAL_FILE, + remote_url=upload_file.source_url, + related_id=upload_file.id, + size=upload_file.size, + storage_key=upload_file.key, + url=upload_file.source_url, + ) + return file_info diff --git a/api/core/datasource/entities/datasource_entities.py b/api/core/datasource/entities/datasource_entities.py index dde7d59726..a063a3680b 100644 --- a/api/core/datasource/entities/datasource_entities.py +++ b/api/core/datasource/entities/datasource_entities.py @@ -379,4 +379,11 @@ class OnlineDriveDownloadFileRequest(BaseModel): """ id: str = Field(..., description="The id of the file") - bucket: str | None = Field(None, description="The name of the bucket") + bucket: str = Field("", description="The name of the bucket") + + @field_validator("bucket", mode="before") + @classmethod + def _coerce_bucket(cls, v) -> str: + if v is None: + return "" + return str(v) diff --git a/api/core/workflow/nodes/datasource/datasource_node.py b/api/core/workflow/nodes/datasource/datasource_node.py index 80869ac7f7..17f8bcb2db 100644 --- a/api/core/workflow/nodes/datasource/datasource_node.py +++ b/api/core/workflow/nodes/datasource/datasource_node.py @@ -1,40 +1,26 @@ from collections.abc import Generator, Mapping, Sequence -from typing import Any, cast +from typing import TYPE_CHECKING, Any -from sqlalchemy import select -from sqlalchemy.orm import Session - -from core.datasource.entities.datasource_entities import ( - DatasourceMessage, - DatasourceParameter, - DatasourceProviderType, - GetOnlineDocumentPageContentRequest, - OnlineDriveDownloadFileRequest, -) -from core.datasource.online_document.online_document_plugin import OnlineDocumentDatasourcePlugin -from core.datasource.online_drive.online_drive_plugin import OnlineDriveDatasourcePlugin -from core.datasource.utils.message_transformer import DatasourceFileMessageTransformer +from core.datasource.entities.datasource_entities import DatasourceProviderType from core.plugin.impl.exc import PluginDaemonClientSideError -from core.variables.segments import ArrayAnySegment -from core.variables.variables import ArrayAnyVariable from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus from core.workflow.enums import NodeExecutionType, NodeType, SystemVariableKey -from core.workflow.file import File -from core.workflow.file.enums import FileTransferMethod, FileType -from core.workflow.node_events import NodeRunResult, StreamChunkEvent, StreamCompletedEvent +from core.workflow.node_events import NodeRunResult, StreamCompletedEvent from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser -from core.workflow.nodes.tool.exc import ToolFileError -from core.workflow.runtime import VariablePool -from extensions.ext_database import db -from factories import file_factory -from models.model import UploadFile -from models.tools import ToolFile -from services.datasource_provider_service import DatasourceProviderService +from core.workflow.repositories.datasource_manager_protocol import ( + DatasourceManagerProtocol, + DatasourceParameter, + OnlineDriveDownloadFileParam, +) from ...entities.workflow_node_execution import WorkflowNodeExecutionMetadataKey from .entities import DatasourceNodeData -from .exc import DatasourceNodeError, DatasourceParameterError +from .exc import DatasourceNodeError + +if TYPE_CHECKING: + from core.workflow.entities import GraphInitParams + from core.workflow.runtime import GraphRuntimeState class DatasourceNode(Node[DatasourceNodeData]): @@ -45,6 +31,22 @@ class DatasourceNode(Node[DatasourceNodeData]): node_type = NodeType.DATASOURCE execution_type = NodeExecutionType.ROOT + def __init__( + self, + id: str, + config: Mapping[str, Any], + graph_init_params: "GraphInitParams", + graph_runtime_state: "GraphRuntimeState", + datasource_manager: DatasourceManagerProtocol, + ): + super().__init__( + id=id, + config=config, + graph_init_params=graph_init_params, + graph_runtime_state=graph_runtime_state, + ) + self.datasource_manager = datasource_manager + def _run(self) -> Generator: """ Run the datasource node @@ -52,84 +54,69 @@ class DatasourceNode(Node[DatasourceNodeData]): node_data = self.node_data variable_pool = self.graph_runtime_state.variable_pool - datasource_type_segement = variable_pool.get(["sys", SystemVariableKey.DATASOURCE_TYPE]) - if not datasource_type_segement: + datasource_type_segment = variable_pool.get(["sys", SystemVariableKey.DATASOURCE_TYPE]) + if not datasource_type_segment: raise DatasourceNodeError("Datasource type is not set") - datasource_type = str(datasource_type_segement.value) if datasource_type_segement.value else None - datasource_info_segement = variable_pool.get(["sys", SystemVariableKey.DATASOURCE_INFO]) - if not datasource_info_segement: + datasource_type = str(datasource_type_segment.value) if datasource_type_segment.value else None + datasource_info_segment = variable_pool.get(["sys", SystemVariableKey.DATASOURCE_INFO]) + if not datasource_info_segment: raise DatasourceNodeError("Datasource info is not set") - datasource_info_value = datasource_info_segement.value + datasource_info_value = datasource_info_segment.value if not isinstance(datasource_info_value, dict): raise DatasourceNodeError("Invalid datasource info format") datasource_info: dict[str, Any] = datasource_info_value - # get datasource runtime - from core.datasource.datasource_manager import DatasourceManager if datasource_type is None: raise DatasourceNodeError("Datasource type is not set") datasource_type = DatasourceProviderType.value_of(datasource_type) + provider_id = f"{node_data.plugin_id}/{node_data.provider_name}" - datasource_runtime = DatasourceManager.get_datasource_runtime( - provider_id=f"{node_data.plugin_id}/{node_data.provider_name}", + datasource_info["icon"] = self.datasource_manager.get_icon_url( + provider_id=provider_id, datasource_name=node_data.datasource_name or "", tenant_id=self.tenant_id, - datasource_type=datasource_type, + datasource_type=datasource_type.value, ) - datasource_info["icon"] = datasource_runtime.get_icon_url(self.tenant_id) parameters_for_log = datasource_info try: - datasource_provider_service = DatasourceProviderService() - credentials = datasource_provider_service.get_datasource_credentials( - tenant_id=self.tenant_id, - provider=node_data.provider_name, - plugin_id=node_data.plugin_id, - credential_id=datasource_info.get("credential_id", ""), - ) match datasource_type: - case DatasourceProviderType.ONLINE_DOCUMENT: - datasource_runtime = cast(OnlineDocumentDatasourcePlugin, datasource_runtime) - if credentials: - datasource_runtime.runtime.credentials = credentials - online_document_result: Generator[DatasourceMessage, None, None] = ( - datasource_runtime.get_online_document_page_content( - user_id=self.user_id, - datasource_parameters=GetOnlineDocumentPageContentRequest( - workspace_id=datasource_info.get("workspace_id", ""), - page_id=datasource_info.get("page", {}).get("page_id", ""), - type=datasource_info.get("page", {}).get("type", ""), - ), - provider_type=datasource_type, + case DatasourceProviderType.ONLINE_DOCUMENT | DatasourceProviderType.ONLINE_DRIVE: + # Build typed request objects + datasource_parameters = None + if datasource_type == DatasourceProviderType.ONLINE_DOCUMENT: + datasource_parameters = DatasourceParameter( + workspace_id=datasource_info.get("workspace_id", ""), + page_id=datasource_info.get("page", {}).get("page_id", ""), + type=datasource_info.get("page", {}).get("type", ""), ) - ) - yield from self._transform_message( - messages=online_document_result, - parameters_for_log=parameters_for_log, - datasource_info=datasource_info, - ) - case DatasourceProviderType.ONLINE_DRIVE: - datasource_runtime = cast(OnlineDriveDatasourcePlugin, datasource_runtime) - if credentials: - datasource_runtime.runtime.credentials = credentials - online_drive_result: Generator[DatasourceMessage, None, None] = ( - datasource_runtime.online_drive_download_file( - user_id=self.user_id, - request=OnlineDriveDownloadFileRequest( - id=datasource_info.get("id", ""), - bucket=datasource_info.get("bucket"), - ), - provider_type=datasource_type, + + online_drive_request = None + if datasource_type == DatasourceProviderType.ONLINE_DRIVE: + online_drive_request = OnlineDriveDownloadFileParam( + id=datasource_info.get("id", ""), + bucket=datasource_info.get("bucket", ""), ) - ) - yield from self._transform_datasource_file_message( - messages=online_drive_result, + + credential_id = datasource_info.get("credential_id", "") + + yield from self.datasource_manager.stream_node_events( + node_id=self._node_id, + user_id=self.user_id, + datasource_name=node_data.datasource_name or "", + datasource_type=datasource_type.value, + provider_id=provider_id, + tenant_id=self.tenant_id, + provider=node_data.provider_name, + plugin_id=node_data.plugin_id, + credential_id=credential_id, parameters_for_log=parameters_for_log, datasource_info=datasource_info, variable_pool=variable_pool, - datasource_type=datasource_type, + datasource_param=datasource_parameters, + online_drive_request=online_drive_request, ) case DatasourceProviderType.WEBSITE_CRAWL: yield StreamCompletedEvent( @@ -147,23 +134,9 @@ class DatasourceNode(Node[DatasourceNodeData]): related_id = datasource_info.get("related_id") if not related_id: raise DatasourceNodeError("File is not exist") - upload_file = db.session.query(UploadFile).where(UploadFile.id == related_id).first() - if not upload_file: - raise ValueError("Invalid upload file Info") - file_info = File( - id=upload_file.id, - filename=upload_file.name, - extension="." + upload_file.extension, - mime_type=upload_file.mime_type, - tenant_id=self.tenant_id, - type=FileType.CUSTOM, - transfer_method=FileTransferMethod.LOCAL_FILE, - remote_url=upload_file.source_url, - related_id=upload_file.id, - size=upload_file.size, - storage_key=upload_file.key, - url=upload_file.source_url, + file_info = self.datasource_manager.get_upload_file_by_id( + file_id=related_id, tenant_id=self.tenant_id ) variable_pool.add([self._node_id, "file"], file_info) # variable_pool.add([self.node_id, "file"], file_info.to_dict()) @@ -201,55 +174,6 @@ class DatasourceNode(Node[DatasourceNodeData]): ) ) - def _generate_parameters( - self, - *, - datasource_parameters: Sequence[DatasourceParameter], - variable_pool: VariablePool, - node_data: DatasourceNodeData, - for_log: bool = False, - ) -> dict[str, Any]: - """ - Generate parameters based on the given tool parameters, variable pool, and node data. - - Args: - tool_parameters (Sequence[ToolParameter]): The list of tool parameters. - variable_pool (VariablePool): The variable pool containing the variables. - node_data (ToolNodeData): The data associated with the tool node. - - Returns: - Mapping[str, Any]: A dictionary containing the generated parameters. - - """ - datasource_parameters_dictionary = {parameter.name: parameter for parameter in datasource_parameters} - - result: dict[str, Any] = {} - if node_data.datasource_parameters: - for parameter_name in node_data.datasource_parameters: - parameter = datasource_parameters_dictionary.get(parameter_name) - if not parameter: - result[parameter_name] = None - continue - datasource_input = node_data.datasource_parameters[parameter_name] - if datasource_input.type == "variable": - variable = variable_pool.get(datasource_input.value) - if variable is None: - raise DatasourceParameterError(f"Variable {datasource_input.value} does not exist") - parameter_value = variable.value - elif datasource_input.type in {"mixed", "constant"}: - segment_group = variable_pool.convert_template(str(datasource_input.value)) - parameter_value = segment_group.log if for_log else segment_group.text - else: - raise DatasourceParameterError(f"Unknown datasource input type '{datasource_input.type}'") - result[parameter_name] = parameter_value - - return result - - def _fetch_files(self, variable_pool: VariablePool) -> list[File]: - variable = variable_pool.get(["sys", SystemVariableKey.FILES]) - assert isinstance(variable, ArrayAnyVariable | ArrayAnySegment) - return list(variable.value) if variable else [] - @classmethod def _extract_variable_selector_to_variable_mapping( cls, @@ -287,206 +211,6 @@ class DatasourceNode(Node[DatasourceNodeData]): return result - def _transform_message( - self, - messages: Generator[DatasourceMessage, None, None], - parameters_for_log: dict[str, Any], - datasource_info: dict[str, Any], - ) -> Generator: - """ - Convert ToolInvokeMessages into tuple[plain_text, files] - """ - # transform message and handle file storage - message_stream = DatasourceFileMessageTransformer.transform_datasource_invoke_messages( - messages=messages, - user_id=self.user_id, - tenant_id=self.tenant_id, - conversation_id=None, - ) - - text = "" - files: list[File] = [] - json: list[dict | list] = [] - - variables: dict[str, Any] = {} - - for message in message_stream: - match message.type: - case ( - DatasourceMessage.MessageType.IMAGE_LINK - | DatasourceMessage.MessageType.BINARY_LINK - | DatasourceMessage.MessageType.IMAGE - ): - assert isinstance(message.message, DatasourceMessage.TextMessage) - - url = message.message.text - transfer_method = FileTransferMethod.TOOL_FILE - - datasource_file_id = str(url).split("/")[-1].split(".")[0] - - with Session(db.engine) as session: - stmt = select(ToolFile).where(ToolFile.id == datasource_file_id) - datasource_file = session.scalar(stmt) - if datasource_file is None: - raise ToolFileError(f"Tool file {datasource_file_id} does not exist") - - mapping = { - "tool_file_id": datasource_file_id, - "type": file_factory.get_file_type_by_mime_type(datasource_file.mimetype), - "transfer_method": transfer_method, - "url": url, - } - file = file_factory.build_from_mapping( - mapping=mapping, - tenant_id=self.tenant_id, - ) - files.append(file) - case DatasourceMessage.MessageType.BLOB: - # get tool file id - assert isinstance(message.message, DatasourceMessage.TextMessage) - assert message.meta - - datasource_file_id = message.message.text.split("/")[-1].split(".")[0] - with Session(db.engine) as session: - stmt = select(ToolFile).where(ToolFile.id == datasource_file_id) - datasource_file = session.scalar(stmt) - if datasource_file is None: - raise ToolFileError(f"datasource file {datasource_file_id} not exists") - - mapping = { - "tool_file_id": datasource_file_id, - "transfer_method": FileTransferMethod.TOOL_FILE, - } - - files.append( - file_factory.build_from_mapping( - mapping=mapping, - tenant_id=self.tenant_id, - ) - ) - case DatasourceMessage.MessageType.TEXT: - assert isinstance(message.message, DatasourceMessage.TextMessage) - text += message.message.text - yield StreamChunkEvent( - selector=[self._node_id, "text"], - chunk=message.message.text, - is_final=False, - ) - case DatasourceMessage.MessageType.JSON: - assert isinstance(message.message, DatasourceMessage.JsonMessage) - json.append(message.message.json_object) - case DatasourceMessage.MessageType.LINK: - assert isinstance(message.message, DatasourceMessage.TextMessage) - stream_text = f"Link: {message.message.text}\n" - text += stream_text - yield StreamChunkEvent( - selector=[self._node_id, "text"], - chunk=stream_text, - is_final=False, - ) - case DatasourceMessage.MessageType.VARIABLE: - assert isinstance(message.message, DatasourceMessage.VariableMessage) - variable_name = message.message.variable_name - variable_value = message.message.variable_value - if message.message.stream: - if not isinstance(variable_value, str): - raise ValueError("When 'stream' is True, 'variable_value' must be a string.") - if variable_name not in variables: - variables[variable_name] = "" - variables[variable_name] += variable_value - - yield StreamChunkEvent( - selector=[self._node_id, variable_name], - chunk=variable_value, - is_final=False, - ) - else: - variables[variable_name] = variable_value - case DatasourceMessage.MessageType.FILE: - assert message.meta is not None - files.append(message.meta["file"]) - case ( - DatasourceMessage.MessageType.BLOB_CHUNK - | DatasourceMessage.MessageType.LOG - | DatasourceMessage.MessageType.RETRIEVER_RESOURCES - ): - pass - - # mark the end of the stream - yield StreamChunkEvent( - selector=[self._node_id, "text"], - chunk="", - is_final=True, - ) - yield StreamCompletedEvent( - node_run_result=NodeRunResult( - status=WorkflowNodeExecutionStatus.SUCCEEDED, - outputs={**variables}, - metadata={ - WorkflowNodeExecutionMetadataKey.DATASOURCE_INFO: datasource_info, - }, - inputs=parameters_for_log, - ) - ) - @classmethod def version(cls) -> str: return "1" - - def _transform_datasource_file_message( - self, - messages: Generator[DatasourceMessage, None, None], - parameters_for_log: dict[str, Any], - datasource_info: dict[str, Any], - variable_pool: VariablePool, - datasource_type: DatasourceProviderType, - ) -> Generator: - """ - Convert ToolInvokeMessages into tuple[plain_text, files] - """ - # transform message and handle file storage - message_stream = DatasourceFileMessageTransformer.transform_datasource_invoke_messages( - messages=messages, - user_id=self.user_id, - tenant_id=self.tenant_id, - conversation_id=None, - ) - file = None - for message in message_stream: - if message.type == DatasourceMessage.MessageType.BINARY_LINK: - assert isinstance(message.message, DatasourceMessage.TextMessage) - - url = message.message.text - transfer_method = FileTransferMethod.TOOL_FILE - - datasource_file_id = str(url).split("/")[-1].split(".")[0] - - with Session(db.engine) as session: - stmt = select(ToolFile).where(ToolFile.id == datasource_file_id) - datasource_file = session.scalar(stmt) - if datasource_file is None: - raise ToolFileError(f"Tool file {datasource_file_id} does not exist") - - mapping = { - "tool_file_id": datasource_file_id, - "type": file_factory.get_file_type_by_mime_type(datasource_file.mimetype), - "transfer_method": transfer_method, - "url": url, - } - file = file_factory.build_from_mapping( - mapping=mapping, - tenant_id=self.tenant_id, - ) - if file: - variable_pool.add([self._node_id, "file"], file) - yield StreamCompletedEvent( - node_run_result=NodeRunResult( - status=WorkflowNodeExecutionStatus.SUCCEEDED, - inputs=parameters_for_log, - metadata={WorkflowNodeExecutionMetadataKey.DATASOURCE_INFO: datasource_info}, - outputs={ - "file": file, - "datasource_type": datasource_type, - }, - ) - ) diff --git a/api/core/workflow/repositories/datasource_manager_protocol.py b/api/core/workflow/repositories/datasource_manager_protocol.py new file mode 100644 index 0000000000..4acf486bef --- /dev/null +++ b/api/core/workflow/repositories/datasource_manager_protocol.py @@ -0,0 +1,50 @@ +from collections.abc import Generator +from typing import Any, Protocol + +from pydantic import BaseModel + +from core.workflow.file import File +from core.workflow.node_events import StreamChunkEvent, StreamCompletedEvent + + +class DatasourceParameter(BaseModel): + workspace_id: str + page_id: str + type: str + + +class OnlineDriveDownloadFileParam(BaseModel): + id: str + bucket: str + + +class DatasourceFinal(BaseModel): + data: dict[str, Any] | None = None + + +class DatasourceManagerProtocol(Protocol): + @classmethod + def get_icon_url(cls, provider_id: str, tenant_id: str, datasource_name: str, datasource_type: str) -> str: ... + + @classmethod + def stream_node_events( + cls, + *, + node_id: str, + user_id: str, + datasource_name: str, + datasource_type: str, + provider_id: str, + tenant_id: str, + provider: str, + plugin_id: str, + credential_id: str, + parameters_for_log: dict[str, Any], + datasource_info: dict[str, Any], + variable_pool: Any, + datasource_param: DatasourceParameter | None = None, + online_drive_request: OnlineDriveDownloadFileParam | None = None, + ) -> Generator[StreamChunkEvent | StreamCompletedEvent, None, None]: ... + + @classmethod + def get_upload_file_by_id(cls, file_id: str, tenant_id: str) -> File: ... diff --git a/api/tests/integration_tests/core/datasource/test_datasource_manager_integration.py b/api/tests/integration_tests/core/datasource/test_datasource_manager_integration.py new file mode 100644 index 0000000000..003bb356e5 --- /dev/null +++ b/api/tests/integration_tests/core/datasource/test_datasource_manager_integration.py @@ -0,0 +1,42 @@ +from collections.abc import Generator + +from core.datasource.datasource_manager import DatasourceManager +from core.datasource.entities.datasource_entities import DatasourceMessage +from core.workflow.node_events import StreamCompletedEvent + + +def _gen_var_stream() -> Generator[DatasourceMessage, None, None]: + # produce a streamed variable "a"="xy" + yield DatasourceMessage( + type=DatasourceMessage.MessageType.VARIABLE, + message=DatasourceMessage.VariableMessage(variable_name="a", variable_value="x", stream=True), + meta=None, + ) + yield DatasourceMessage( + type=DatasourceMessage.MessageType.VARIABLE, + message=DatasourceMessage.VariableMessage(variable_name="a", variable_value="y", stream=True), + meta=None, + ) + + +def test_stream_node_events_accumulates_variables(mocker): + mocker.patch.object(DatasourceManager, "stream_online_results", return_value=_gen_var_stream()) + events = list( + DatasourceManager.stream_node_events( + node_id="A", + user_id="u", + datasource_name="ds", + datasource_type="online_document", + provider_id="p/x", + tenant_id="t", + provider="prov", + plugin_id="plug", + credential_id="", + parameters_for_log={}, + datasource_info={"user_id": "u"}, + variable_pool=mocker.Mock(), + datasource_param=type("P", (), {"workspace_id": "w", "page_id": "pg", "type": "t"})(), + online_drive_request=None, + ) + ) + assert isinstance(events[-1], StreamCompletedEvent) diff --git a/api/tests/integration_tests/core/workflow/nodes/datasource/test_datasource_node_integration.py b/api/tests/integration_tests/core/workflow/nodes/datasource/test_datasource_node_integration.py new file mode 100644 index 0000000000..909d6377ce --- /dev/null +++ b/api/tests/integration_tests/core/workflow/nodes/datasource/test_datasource_node_integration.py @@ -0,0 +1,84 @@ +from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus +from core.workflow.node_events import NodeRunResult, StreamCompletedEvent +from core.workflow.nodes.datasource.datasource_node import DatasourceNode + + +class _Seg: + def __init__(self, v): + self.value = v + + +class _VarPool: + def __init__(self, data): + self.data = data + + def get(self, path): + d = self.data + for k in path: + d = d[k] + return _Seg(d) + + def add(self, *_a, **_k): + pass + + +class _GS: + def __init__(self, vp): + self.variable_pool = vp + + +class _GP: + tenant_id = "t1" + app_id = "app-1" + workflow_id = "wf-1" + graph_config = {} + user_id = "u1" + user_from = "account" + invoke_from = "debugger" + call_depth = 0 + + +def test_node_integration_minimal_stream(mocker): + sys_d = { + "sys": { + "datasource_type": "online_document", + "datasource_info": {"workspace_id": "w", "page": {"page_id": "pg", "type": "t"}, "credential_id": ""}, + } + } + vp = _VarPool(sys_d) + + class _Mgr: + @classmethod + def get_icon_url(cls, **_): + return "icon" + + @classmethod + def stream_node_events(cls, **_): + yield from () + yield StreamCompletedEvent(node_run_result=NodeRunResult(status=WorkflowNodeExecutionStatus.SUCCEEDED)) + + @classmethod + def get_upload_file_by_id(cls, **_): + raise AssertionError + + node = DatasourceNode( + id="n", + config={ + "id": "n", + "data": { + "type": "datasource", + "version": "1", + "title": "Datasource", + "provider_type": "plugin", + "provider_name": "p", + "plugin_id": "plug", + "datasource_name": "ds", + }, + }, + graph_init_params=_GP(), + graph_runtime_state=_GS(vp), + datasource_manager=_Mgr, + ) + + out = list(node._run()) + assert isinstance(out[-1], StreamCompletedEvent) diff --git a/api/tests/unit_tests/core/datasource/test_datasource_manager.py b/api/tests/unit_tests/core/datasource/test_datasource_manager.py new file mode 100644 index 0000000000..9ee1df8bdc --- /dev/null +++ b/api/tests/unit_tests/core/datasource/test_datasource_manager.py @@ -0,0 +1,135 @@ +import types +from collections.abc import Generator + +from core.datasource.datasource_manager import DatasourceManager +from core.datasource.entities.datasource_entities import DatasourceMessage +from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus +from core.workflow.node_events import StreamChunkEvent, StreamCompletedEvent + + +def _gen_messages_text_only(text: str) -> Generator[DatasourceMessage, None, None]: + yield DatasourceMessage( + type=DatasourceMessage.MessageType.TEXT, + message=DatasourceMessage.TextMessage(text=text), + meta=None, + ) + + +def test_get_icon_url_calls_runtime(mocker): + fake_runtime = mocker.Mock() + fake_runtime.get_icon_url.return_value = "https://icon" + mocker.patch.object(DatasourceManager, "get_datasource_runtime", return_value=fake_runtime) + + url = DatasourceManager.get_icon_url( + provider_id="p/x", + tenant_id="t1", + datasource_name="ds", + datasource_type="online_document", + ) + assert url == "https://icon" + DatasourceManager.get_datasource_runtime.assert_called_once() + + +def test_stream_online_results_yields_messages_online_document(mocker): + # stub runtime to yield a text message + def _doc_messages(**_): + yield from _gen_messages_text_only("hello") + + fake_runtime = mocker.Mock() + fake_runtime.get_online_document_page_content.side_effect = _doc_messages + mocker.patch.object(DatasourceManager, "get_datasource_runtime", return_value=fake_runtime) + mocker.patch( + "core.datasource.datasource_manager.DatasourceProviderService.get_datasource_credentials", + return_value=None, + ) + + gen = DatasourceManager.stream_online_results( + user_id="u1", + datasource_name="ds", + datasource_type="online_document", + provider_id="p/x", + tenant_id="t1", + provider="prov", + plugin_id="plug", + credential_id="", + datasource_param=types.SimpleNamespace(workspace_id="w", page_id="pg", type="t"), + online_drive_request=None, + ) + msgs = list(gen) + assert len(msgs) == 1 + assert msgs[0].message.text == "hello" + + +def test_stream_node_events_emits_events_online_document(mocker): + # make manager's low-level stream produce TEXT only + mocker.patch.object( + DatasourceManager, + "stream_online_results", + return_value=_gen_messages_text_only("hello"), + ) + + events = list( + DatasourceManager.stream_node_events( + node_id="nodeA", + user_id="u1", + datasource_name="ds", + datasource_type="online_document", + provider_id="p/x", + tenant_id="t1", + provider="prov", + plugin_id="plug", + credential_id="", + parameters_for_log={"k": "v"}, + datasource_info={"user_id": "u1"}, + variable_pool=mocker.Mock(), + datasource_param=types.SimpleNamespace(workspace_id="w", page_id="pg", type="t"), + online_drive_request=None, + ) + ) + # should contain one StreamChunkEvent then a final chunk (empty) and a completed event + assert isinstance(events[0], StreamChunkEvent) + assert events[0].chunk == "hello" + assert isinstance(events[-1], StreamCompletedEvent) + assert events[-1].node_run_result.status == WorkflowNodeExecutionStatus.SUCCEEDED + + +def test_get_upload_file_by_id_builds_file(mocker): + # fake UploadFile row + fake_row = types.SimpleNamespace( + id="fid", + name="f", + extension="txt", + mime_type="text/plain", + size=1, + key="k", + source_url="http://x", + ) + + class _Q: + def __init__(self, row): + self._row = row + + def where(self, *_args, **_kwargs): + return self + + def first(self): + return self._row + + class _S: + def __init__(self, row): + self._row = row + + def __enter__(self): + return self + + def __exit__(self, *exc): + return False + + def query(self, *_): + return _Q(self._row) + + mocker.patch("core.datasource.datasource_manager.session_factory.create_session", return_value=_S(fake_row)) + + f = DatasourceManager.get_upload_file_by_id(file_id="fid", tenant_id="t1") + assert f.related_id == "fid" + assert f.extension == ".txt" diff --git a/api/tests/unit_tests/core/workflow/nodes/datasource/test_datasource_node.py b/api/tests/unit_tests/core/workflow/nodes/datasource/test_datasource_node.py new file mode 100644 index 0000000000..584ed23e91 --- /dev/null +++ b/api/tests/unit_tests/core/workflow/nodes/datasource/test_datasource_node.py @@ -0,0 +1,93 @@ +from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus +from core.workflow.node_events import NodeRunResult, StreamChunkEvent, StreamCompletedEvent +from core.workflow.nodes.datasource.datasource_node import DatasourceNode + + +class _VarSeg: + def __init__(self, v): + self.value = v + + +class _VarPool: + def __init__(self, mapping): + self._m = mapping + + def get(self, selector): + d = self._m + for k in selector: + d = d[k] + return _VarSeg(d) + + def add(self, *_args, **_kwargs): + pass + + +class _GraphState: + def __init__(self, var_pool): + self.variable_pool = var_pool + + +class _GraphParams: + tenant_id = "t1" + app_id = "app-1" + workflow_id = "wf-1" + graph_config = {} + user_id = "u1" + user_from = "account" + invoke_from = "debugger" + call_depth = 0 + + +def test_datasource_node_delegates_to_manager_stream(mocker): + # prepare sys variables + sys_vars = { + "sys": { + "datasource_type": "online_document", + "datasource_info": { + "workspace_id": "w", + "page": {"page_id": "pg", "type": "t"}, + "credential_id": "", + }, + } + } + var_pool = _VarPool(sys_vars) + gs = _GraphState(var_pool) + gp = _GraphParams() + + # stub manager class + class _Mgr: + @classmethod + def get_icon_url(cls, **_): + return "icon" + + @classmethod + def stream_node_events(cls, **_): + yield StreamChunkEvent(selector=["n", "text"], chunk="hi", is_final=False) + yield StreamCompletedEvent(node_run_result=NodeRunResult(status=WorkflowNodeExecutionStatus.SUCCEEDED)) + + @classmethod + def get_upload_file_by_id(cls, **_): + raise AssertionError("not called") + + node = DatasourceNode( + id="n", + config={ + "id": "n", + "data": { + "type": "datasource", + "version": "1", + "title": "Datasource", + "provider_type": "plugin", + "provider_name": "p", + "plugin_id": "plug", + "datasource_name": "ds", + }, + }, + graph_init_params=gp, + graph_runtime_state=gs, + datasource_manager=_Mgr, + ) + + evts = list(node._run()) + assert isinstance(evts[0], StreamChunkEvent) + assert isinstance(evts[-1], StreamCompletedEvent) From 233e12e631dc134361d4ec4c8dee66450447d486 Mon Sep 17 00:00:00 2001 From: Varun Chawla <34209028+veeceey@users.noreply.github.com> Date: Fri, 27 Feb 2026 03:40:51 -0800 Subject: [PATCH 2/3] fix: correct mock return type in CodeBasedExtension test (#32058) --- api/tests/unit_tests/controllers/console/test_extension.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/tests/unit_tests/controllers/console/test_extension.py b/api/tests/unit_tests/controllers/console/test_extension.py index 32b41baa27..85eb6e7d71 100644 --- a/api/tests/unit_tests/controllers/console/test_extension.py +++ b/api/tests/unit_tests/controllers/console/test_extension.py @@ -77,7 +77,7 @@ def _restx_mask_defaults(app: Flask): def test_code_based_extension_get_returns_service_data(app: Flask, monkeypatch: pytest.MonkeyPatch): - service_result = {"entrypoint": "main:agent"} + service_result = [{"entrypoint": "main:agent"}] service_mock = MagicMock(return_value=service_result) monkeypatch.setattr( "controllers.console.extension.CodeBasedExtensionService.get_code_based_extension", From 439ff3775d2fde23254a09a85b1584162d550b9a Mon Sep 17 00:00:00 2001 From: Stephen Zhou <38493346+hyoban@users.noreply.github.com> Date: Fri, 27 Feb 2026 19:44:54 +0800 Subject: [PATCH 3/3] chore: update to eslint 10 (#32646) --- web/README.md | 2 +- .../dataset-config/params-config/index.tsx | 3 +- .../components/workflow/nodes/http/default.ts | 3 +- web/eslint-suppressions.json | 5 - web/i18n-config/README.md | 6 +- web/package.json | 21 +- web/pnpm-lock.yaml | 1432 +++++++++-------- 7 files changed, 756 insertions(+), 716 deletions(-) diff --git a/web/README.md b/web/README.md index 64039709dc..f069ec82b2 100644 --- a/web/README.md +++ b/web/README.md @@ -33,7 +33,7 @@ Then, configure the environment variables. Create a file named `.env.local` in t cp .env.example .env.local ``` -``` +```txt # For production release, change this to PRODUCTION NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT # The deployment edition, SELF_HOSTED diff --git a/web/app/components/app/configuration/dataset-config/params-config/index.tsx b/web/app/components/app/configuration/dataset-config/params-config/index.tsx index 5ad16d139f..692ae12022 100644 --- a/web/app/components/app/configuration/dataset-config/params-config/index.tsx +++ b/web/app/components/app/configuration/dataset-config/params-config/index.tsx @@ -61,8 +61,7 @@ const ParamsConfig = ({ if (tempDataSetConfigs.retrieval_model === RETRIEVE_TYPE.multiWay) { if (tempDataSetConfigs.reranking_enable && tempDataSetConfigs.reranking_mode === RerankingModeEnum.RerankingModel - && !isCurrentRerankModelValid - ) { + && !isCurrentRerankModelValid) { errMsg = t('datasetConfig.rerankModelRequired', { ns: 'appDebug' }) } } diff --git a/web/app/components/workflow/nodes/http/default.ts b/web/app/components/workflow/nodes/http/default.ts index 05c4a1fd4f..6ec3fb45ee 100644 --- a/web/app/components/workflow/nodes/http/default.ts +++ b/web/app/components/workflow/nodes/http/default.ts @@ -46,8 +46,7 @@ const nodeDefault: NodeDefault = { if (!errorMessages && payload.body.type === BodyType.binary - && ((!(payload.body.data as BodyPayload)[0]?.file) || (payload.body.data as BodyPayload)[0]?.file?.length === 0) - ) { + && ((!(payload.body.data as BodyPayload)[0]?.file) || (payload.body.data as BodyPayload)[0]?.file?.length === 0)) { errorMessages = t('errorMsg.fieldRequired', { ns: 'workflow', field: t('nodes.http.binaryFileVariable', { ns: 'workflow' }) }) } diff --git a/web/eslint-suppressions.json b/web/eslint-suppressions.json index 6364d00af8..0df2f2601f 100644 --- a/web/eslint-suppressions.json +++ b/web/eslint-suppressions.json @@ -8169,11 +8169,6 @@ "count": 3 } }, - "i18n-config/README.md": { - "no-irregular-whitespace": { - "count": 1 - } - }, "i18n/de-DE/billing.json": { "no-irregular-whitespace": { "count": 1 diff --git a/web/i18n-config/README.md b/web/i18n-config/README.md index c90904459c..2bfa1ef024 100644 --- a/web/i18n-config/README.md +++ b/web/i18n-config/README.md @@ -6,7 +6,7 @@ This directory contains i18n tooling and configuration. Translation files live u ## File Structure -``` +```txt web/i18n ├── en-US │ ├── app.json @@ -36,7 +36,7 @@ By default we will use `LanguagesSupported` to determine which languages are sup 1. Create a new folder for the new language. -``` +```txt cd web/i18n cp -r en-US id-ID ``` @@ -98,7 +98,7 @@ export const languages = [ { value: 'ru-RU', name: 'Русский(Россия)', - example: ' Привет, Dify!', + example: 'Привет, Dify!', supported: false, }, { diff --git a/web/package.json b/web/package.json index 24fdaafb60..1ca26fd562 100644 --- a/web/package.json +++ b/web/package.json @@ -3,7 +3,7 @@ "type": "module", "version": "1.13.0", "private": true, - "packageManager": "pnpm@10.27.0+sha512.72d699da16b1179c14ba9e64dc71c9a40988cbdc65c264cb0e489db7de917f20dcf4d64d8723625f2969ba52d4b7e2a1170682d9ac2a5dcaeaab732b7e16f04a", + "packageManager": "pnpm@10.27.0", "imports": { "#i18n": { "react-server": "./i18n-config/lib.server.ts", @@ -165,10 +165,10 @@ "zustand": "5.0.9" }, "devDependencies": { - "@antfu/eslint-config": "7.2.0", + "@antfu/eslint-config": "7.6.1", "@chromatic-com/storybook": "5.0.0", "@egoist/tailwindcss-icons": "1.9.2", - "@eslint-react/eslint-plugin": "2.9.4", + "@eslint-react/eslint-plugin": "2.13.0", "@iconify-json/heroicons": "1.2.3", "@iconify-json/ri": "1.2.9", "@mdx-js/loader": "3.1.1", @@ -208,7 +208,7 @@ "@types/semver": "7.7.1", "@types/sortablejs": "1.15.8", "@types/uuid": "10.0.0", - "@typescript-eslint/parser": "8.54.0", + "@typescript-eslint/parser": "8.56.1", "@typescript/native-preview": "7.0.0-dev.20251209.1", "@vitejs/plugin-react": "5.1.2", "@vitest/coverage-v8": "4.0.17", @@ -216,13 +216,13 @@ "code-inspector-plugin": "1.3.6", "cross-env": "10.1.0", "esbuild": "0.27.2", - "eslint": "9.39.2", - "eslint-plugin-better-tailwindcss": "https://pkg.pr.new/hyoban/eslint-plugin-better-tailwindcss@c0161c7", - "eslint-plugin-hyoban": "0.11.1", + "eslint": "10.0.2", + "eslint-plugin-better-tailwindcss": "4.3.1", + "eslint-plugin-hyoban": "0.11.2", "eslint-plugin-react-hooks": "7.0.1", - "eslint-plugin-react-refresh": "0.5.0", - "eslint-plugin-sonarjs": "3.0.6", - "eslint-plugin-storybook": "10.2.6", + "eslint-plugin-react-refresh": "0.5.2", + "eslint-plugin-sonarjs": "4.0.0", + "eslint-plugin-storybook": "10.2.13", "husky": "9.1.7", "iconify-import-svg": "0.1.1", "jsdom": "27.3.0", @@ -249,6 +249,7 @@ "overrides": { "@monaco-editor/loader": "1.5.0", "@nolyfill/safe-buffer": "npm:safe-buffer@^5.2.1", + "@stylistic/eslint-plugin": "https://pkg.pr.new/@stylistic/eslint-plugin@258f9d8", "array-includes": "npm:@nolyfill/array-includes@^1", "array.prototype.findlast": "npm:@nolyfill/array.prototype.findlast@^1", "array.prototype.findlastindex": "npm:@nolyfill/array.prototype.findlastindex@^1", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 73abcd2101..c2a01358b6 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -12,6 +12,7 @@ overrides: string-width: ~4.2.3 '@monaco-editor/loader': 1.5.0 '@nolyfill/safe-buffer': npm:safe-buffer@^5.2.1 + '@stylistic/eslint-plugin': https://pkg.pr.new/@stylistic/eslint-plugin@258f9d8 array-includes: npm:@nolyfill/array-includes@^1 array.prototype.findlast: npm:@nolyfill/array.prototype.findlast@^1 array.prototype.findlastindex: npm:@nolyfill/array.prototype.findlastindex@^1 @@ -370,8 +371,8 @@ importers: version: 5.0.9(@types/react@19.2.9)(immer@11.1.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: '@antfu/eslint-config': - specifier: 7.2.0 - version: 7.2.0(@eslint-react/eslint-plugin@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(@next/eslint-plugin-next@16.1.6)(@vue/compiler-sfc@3.5.27)(eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@1.21.7)))(eslint-plugin-react-refresh@0.5.0(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17) + specifier: 7.6.1 + version: 7.6.1(@eslint-react/eslint-plugin@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(@next/eslint-plugin-next@16.1.6)(@typescript-eslint/rule-tester@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3))(@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint-plugin-react-hooks@7.0.1(eslint@10.0.2(jiti@1.21.7)))(eslint-plugin-react-refresh@0.5.2(eslint@10.0.2(jiti@1.21.7)))(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17) '@chromatic-com/storybook': specifier: 5.0.0 version: 5.0.0(storybook@10.2.0(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) @@ -379,8 +380,8 @@ importers: specifier: 1.9.2 version: 1.9.2(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) '@eslint-react/eslint-plugin': - specifier: 2.9.4 - version: 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + specifier: 2.13.0 + version: 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) '@iconify-json/heroicons': specifier: 1.2.3 version: 1.2.3 @@ -425,7 +426,7 @@ importers: version: 10.2.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.2.0(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) '@tanstack/eslint-plugin-query': specifier: 5.91.4 - version: 5.91.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + version: 5.91.4(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) '@tanstack/react-devtools': specifier: 0.9.2 version: 0.9.2(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11) @@ -499,8 +500,8 @@ importers: specifier: 10.0.0 version: 10.0.0 '@typescript-eslint/parser': - specifier: 8.54.0 - version: 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) '@typescript/native-preview': specifier: 7.0.0-dev.20251209.1 version: 7.0.0-dev.20251209.1 @@ -523,26 +524,26 @@ importers: specifier: 0.27.2 version: 0.27.2 eslint: - specifier: 9.39.2 - version: 9.39.2(jiti@1.21.7) + specifier: 10.0.2 + version: 10.0.2(jiti@1.21.7) eslint-plugin-better-tailwindcss: - specifier: https://pkg.pr.new/hyoban/eslint-plugin-better-tailwindcss@c0161c7 - version: https://pkg.pr.new/hyoban/eslint-plugin-better-tailwindcss@c0161c7(eslint@9.39.2(jiti@1.21.7))(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2))(typescript@5.9.3) + specifier: 4.3.1 + version: 4.3.1(eslint@10.0.2(jiti@1.21.7))(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2))(typescript@5.9.3) eslint-plugin-hyoban: - specifier: 0.11.1 - version: 0.11.1(eslint@9.39.2(jiti@1.21.7)) + specifier: 0.11.2 + version: 0.11.2(eslint@10.0.2(jiti@1.21.7)) eslint-plugin-react-hooks: specifier: 7.0.1 - version: 7.0.1(eslint@9.39.2(jiti@1.21.7)) + version: 7.0.1(eslint@10.0.2(jiti@1.21.7)) eslint-plugin-react-refresh: - specifier: 0.5.0 - version: 0.5.0(eslint@9.39.2(jiti@1.21.7)) + specifier: 0.5.2 + version: 0.5.2(eslint@10.0.2(jiti@1.21.7)) eslint-plugin-sonarjs: - specifier: 3.0.6 - version: 3.0.6(eslint@9.39.2(jiti@1.21.7)) + specifier: 4.0.0 + version: 4.0.0(eslint@10.0.2(jiti@1.21.7)) eslint-plugin-storybook: - specifier: 10.2.6 - version: 10.2.6(eslint@9.39.2(jiti@1.21.7))(storybook@10.2.0(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + specifier: 10.2.13 + version: 10.2.13(eslint@10.0.2(jiti@1.21.7))(storybook@10.2.0(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) husky: specifier: 9.1.7 version: 9.1.7 @@ -696,21 +697,24 @@ packages: '@amplitude/targeting@0.2.0': resolution: {integrity: sha512-/50ywTrC4hfcfJVBbh5DFbqMPPfaIOivZeb5Gb+OGM03QrA+lsUqdvtnKLNuWtceD4H6QQ2KFzPJ5aAJLyzVDA==} - '@antfu/eslint-config@7.2.0': - resolution: {integrity: sha512-I/GWDvkvUfp45VolhrMpOdkfBC69f6lstJi0BCSooylQZwH4OTJPkbXCkp4lKh9V4BeMrcO3G5iC+YIfY28/aA==} + '@antfu/eslint-config@7.6.1': + resolution: {integrity: sha512-MRiskHFHYPF0R3eWDUkPPiHUM3fWXwAviVv9O8iMH5hVJkgp60oJYBMzbImKdqSGMuuyOMY3GXxWbH60t9rK0g==} hasBin: true peerDependencies: - '@eslint-react/eslint-plugin': ^2.0.1 + '@angular-eslint/eslint-plugin': ^21.1.0 + '@angular-eslint/eslint-plugin-template': ^21.1.0 + '@angular-eslint/template-parser': ^21.1.0 + '@eslint-react/eslint-plugin': ^2.11.0 '@next/eslint-plugin-next': '>=15.0.0' '@prettier/plugin-xml': ^3.4.1 '@unocss/eslint-plugin': '>=0.50.0' astro-eslint-parser: ^1.0.2 - eslint: ^9.10.0 + eslint: ^9.10.0 || ^10.0.0 eslint-plugin-astro: ^1.2.0 eslint-plugin-format: '>=0.1.0' eslint-plugin-jsx-a11y: '>=6.10.2' eslint-plugin-react-hooks: ^7.0.0 - eslint-plugin-react-refresh: ^0.4.19 + eslint-plugin-react-refresh: ^0.5.0 eslint-plugin-solid: ^0.14.3 eslint-plugin-svelte: '>=2.35.1' eslint-plugin-vuejs-accessibility: ^2.4.1 @@ -718,6 +722,12 @@ packages: prettier-plugin-slidev: ^1.0.5 svelte-eslint-parser: '>=0.37.0' peerDependenciesMeta: + '@angular-eslint/eslint-plugin': + optional: true + '@angular-eslint/eslint-plugin-template': + optional: true + '@angular-eslint/template-parser': + optional: true '@eslint-react/eslint-plugin': optional: true '@next/eslint-plugin-next': @@ -893,15 +903,15 @@ packages: '@clack/core@0.3.5': resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} - '@clack/core@0.5.0': - resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} - - '@clack/prompts@0.11.0': - resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} + '@clack/core@1.0.1': + resolution: {integrity: sha512-WKeyK3NOBwDOzagPR5H08rFk9D/WuN705yEbuZvKqlkmoLM2woKtXb10OO2k1NoSU4SFG947i2/SCYh+2u5e4g==} '@clack/prompts@0.8.2': resolution: {integrity: sha512-6b9Ab2UiZwJYA9iMyboYyW9yJvAO9V753ZhS+DHKEjZRKAxPPOb7MXXu84lsPFG+vZt6FRFniZ8rXi+zCIw4yQ==} + '@clack/prompts@1.0.1': + resolution: {integrity: sha512-/42G73JkuYdyWZ6m8d/CJtBrGl1Hegyc7Fy78m5Ob+jF85TOUmLR5XLce/U3LxYAw0kJ8CT5aI99RIvPHcGp/Q==} + '@code-inspector/core@1.3.6': resolution: {integrity: sha512-bSxf/PWDPY6rv9EFf0mJvTnLnz3927PPrpX6BmQcRKQab+Ez95yRqrVZY8IcBUpaqA/k3etA5rZ1qkN0V4ERtw==} @@ -971,12 +981,8 @@ packages: '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} - '@es-joy/jsdoccomment@0.78.0': - resolution: {integrity: sha512-rQkU5u8hNAq2NVRzHnIUUvR6arbO0b6AOlvpTNS48CkiKSn/xtNfOzBK23JE4SiW89DgvU7GtxLVgV4Vn2HBAw==} - engines: {node: '>=20.11.0'} - - '@es-joy/jsdoccomment@0.83.0': - resolution: {integrity: sha512-e1MHSEPJ4m35zkBvNT6kcdeH1SvMaJDsPC3Xhfseg3hvF50FUE3f46Yn36jgbrPYYXezlWUQnevv23c+lx2MCA==} + '@es-joy/jsdoccomment@0.84.0': + resolution: {integrity: sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@es-joy/resolve.exports@1.2.0': @@ -1155,50 +1161,50 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-react/ast@2.9.4': - resolution: {integrity: sha512-WI9iq5ePTlcWo0xhSs4wxLUC6u4QuBmQkKeSiXexkEO8C2p8QE7ECNIXhRVkYs3p3AKH5xTez9V8C/CBIGxeXA==} + '@eslint-react/ast@2.13.0': + resolution: {integrity: sha512-43+5gmqV3MpatTzKnu/V2i/jXjmepvwhrb9MaGQvnXHQgq9J7/C7VVCCcwp6Rvp2QHAFquAAdvQDSL8IueTpeA==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@eslint-react/core@2.9.4': - resolution: {integrity: sha512-Ob+Dip1vyR9ch9XL7LUAsGXc0UUf9Kuzn9BEiwOLT7l+cF91ieKeCvIzNPp0LmTuanPfQweJ9iDT9i295SqBZA==} + '@eslint-react/core@2.13.0': + resolution: {integrity: sha512-m62XDzkf1hpzW4sBc7uh7CT+8rBG2xz/itSADuEntlsg4YA7Jhb8hjU6VHf3wRFDwyfx5VnbV209sbJ7Azey0Q==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@eslint-react/eff@2.9.4': - resolution: {integrity: sha512-7AOmozmfa0HgXY9O+J+iX3ciZfViz+W+jhRe2y0YqqkDR7PwV2huzhk/Bxq6sRzzf2uFHqoh/AQNZUhRJ3A05A==} + '@eslint-react/eff@2.13.0': + resolution: {integrity: sha512-rEH2R8FQnUAblUW+v3ZHDU1wEhatbL1+U2B1WVuBXwSKqzF7BGaLqCPIU7o9vofumz5MerVfaCtJgI8jYe2Btg==} engines: {node: '>=20.19.0'} - '@eslint-react/eslint-plugin@2.9.4': - resolution: {integrity: sha512-B1LOEUBuT4L7EmY3E9F7+K8Jdr9nAzx66USz4uWEtg8ZMn82E2O5TzOBPw6eeL0O9BoyLBoslZotXNQVazR2dA==} + '@eslint-react/eslint-plugin@2.13.0': + resolution: {integrity: sha512-iaMXpqnJCTW7317hg8L4wx7u5aIiPzZ+d1p59X8wXFgMHzFX4hNu4IfV8oygyjmWKdLsjKE9sEpv/UYWczlb+A==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@eslint-react/shared@2.9.4': - resolution: {integrity: sha512-PU7C4JzDZ6OffAWD+HwJdvzGSho25UPYJRyb4wZ/pDaI8QPTDj8AtKWKK69SEOQl2ic89ht1upjQX+jrXhN15w==} + '@eslint-react/shared@2.13.0': + resolution: {integrity: sha512-IOloCqrZ7gGBT4lFf9+0/wn7TfzU7JBRjYwTSyb9SDngsbeRrtW95ZpgUpS8/jen1wUEm6F08duAooTZ2FtsWA==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@eslint-react/var@2.9.4': - resolution: {integrity: sha512-Qiih6hT+D2vZmCbAGUooReKlqXjtb/g3SzYj2zNlci6YcWxsQB/pqhR0ayU2AOdW6U9YdeCCfPIwBBQ4AEpyBA==} + '@eslint-react/var@2.13.0': + resolution: {integrity: sha512-dM+QaeiHR16qPQoJYg205MkdHYSWVa2B7ore5OFpOPlSwqDV3tLW7I+475WjbK7potq5QNPTxRa7VLp9FGeQqA==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@eslint/compat@1.4.1': - resolution: {integrity: sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/compat@2.0.2': + resolution: {integrity: sha512-pR1DoD0h3HfF675QZx0xsyrsU8q70Z/plx7880NOhS02NuWLgBCOMDL787nUeQ7EWLkxv3bPQJaarjcPQb2Dwg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: - eslint: ^8.40 || 9 + eslint: ^8.40 || 9 || 10 peerDependenciesMeta: eslint: optional: true @@ -1207,20 +1213,16 @@ packages: resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.23.2': + resolution: {integrity: sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/config-helpers@0.2.3': resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.5.1': - resolution: {integrity: sha512-QN8067dXsXAl9HIvqws7STEviheRFojX3zek5OpC84oBxDGqizW9731ByF/ASxqQihbWrVDdZXS+Ihnsckm9dg==} + '@eslint/config-helpers@0.5.2': + resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/core@0.14.0': @@ -1239,8 +1241,12 @@ packages: resolution: {integrity: sha512-r18fEAj9uCk+VjzGt2thsbOmychS+4kxI14spVNibUO2vqKX7obOG+ymZljAwuPZl+S3clPGwCwTDtrdqTiY6Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/css-tree@3.6.8': - resolution: {integrity: sha512-s0f40zY7dlMp8i0Jf0u6l/aSswS0WRAgkhgETgiCJRcxIWb4S/Sp9uScKHWbkM3BnoFLbJbmOYk5AZUDFVxaLA==} + '@eslint/core@1.1.0': + resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/css-tree@3.6.9': + resolution: {integrity: sha512-3D5/OHibNEGk+wKwNwMbz63NMf367EoR4mVNNpxddCHKEb2Nez7z62J2U6YjtErSsZDoY0CsccmoUpdEbkogNA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} '@eslint/eslintrc@3.3.3': @@ -1251,10 +1257,6 @@ packages: resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/markdown@7.5.1': resolution: {integrity: sha512-R8uZemG9dKTbru/DQRPblbJyXpObwKzo8rv1KYGGuPUPtjM4LXBYM9q5CIZAComzZupws3tWbDwam5AFpPLyJQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1263,6 +1265,10 @@ packages: resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@3.0.2': + resolution: {integrity: sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/plugin-kit@0.3.5': resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1271,8 +1277,8 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.5.1': - resolution: {integrity: sha512-hZ2uC1jbf6JMSsF2ZklhRQqf6GLpYyux6DlzegnW/aFlpu6qJj5GO7ub7WOETCrEl6pl6DAX7RgTgj/fyG+6BQ==} + '@eslint/plugin-kit@0.6.0': + resolution: {integrity: sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@floating-ui/core@1.7.3': @@ -1935,6 +1941,10 @@ packages: '@orpc/client': 1.13.4 '@tanstack/query-core': '>=5.80.2' + '@ota-meshi/ast-token-store@0.3.0': + resolution: {integrity: sha512-XRO0zi2NIUKq2lUk3T1ecFSld1fMWRKE6naRFGkgkdeosx7IslyUKNv5Dcb5PJTja9tHJoFu0v/7yEpAkrkrTg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@oxc-resolver/binding-android-arm-eabi@11.16.4': resolution: {integrity: sha512-6XUHilmj8D6Ggus+sTBp64x/DUQ7LgC/dvTDdUOt4iMQnDdSep6N1mnvVLIiG+qM5tRnNHravNzBJnUlYwRQoA==} cpu: [arm] @@ -2771,11 +2781,12 @@ packages: typescript: optional: true - '@stylistic/eslint-plugin@5.7.1': - resolution: {integrity: sha512-zjTUwIsEfT+k9BmXwq1QEFYsb4afBlsI1AXFyWQBgggMzwBFOuu92pGrE5OFx90IOjNl+lUbQoTG7f8S0PkOdg==} + '@stylistic/eslint-plugin@https://pkg.pr.new/@stylistic/eslint-plugin@258f9d8': + resolution: {integrity: sha512-Yisv+b7hdYyFLAc3/nR4eAqcdhS+UKNwNxPedEL3+CaBEKOIN0kZPmSc6uQsXyMxb7IlhfujbYqu6eBm7KVbWw==, tarball: https://pkg.pr.new/@stylistic/eslint-plugin@258f9d8} + version: 5.9.0 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '>=9.0.0' + eslint: ^9.0.0 || ^10.0.0 '@svgdotjs/svg.js@3.2.5': resolution: {integrity: sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ==} @@ -3226,6 +3237,9 @@ packages: '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -3329,25 +3343,19 @@ packages: '@types/zen-observable@0.8.3': resolution: {integrity: sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==} - '@typescript-eslint/eslint-plugin@8.53.1': - resolution: {integrity: sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==} + '@typescript-eslint/eslint-plugin@8.56.1': + resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.53.1 - eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/parser': ^8.56.1 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.54.0': - resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.53.1': - resolution: {integrity: sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==} + '@typescript-eslint/parser@8.56.1': + resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/project-service@8.54.0': @@ -3356,19 +3364,25 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.53.1': - resolution: {integrity: sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==} + '@typescript-eslint/project-service@8.56.1': + resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/rule-tester@8.56.1': + resolution: {integrity: sha512-EWuV5Vq1EFYJEOVcILyWPO35PjnT0c6tv99PCpD12PgfZae5/Jo+F17hGjsEs2Moe+Dy1J7KIr8y037cK8+/rQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 '@typescript-eslint/scope-manager@8.54.0': resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.53.1': - resolution: {integrity: sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==} + '@typescript-eslint/scope-manager@8.56.1': + resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/tsconfig-utils@8.54.0': resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} @@ -3376,33 +3390,26 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.53.1': - resolution: {integrity: sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==} + '@typescript-eslint/tsconfig-utils@8.56.1': + resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.54.0': - resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} + '@typescript-eslint/type-utils@8.56.1': + resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.53.1': - resolution: {integrity: sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.54.0': resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.53.1': - resolution: {integrity: sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==} + '@typescript-eslint/types@8.56.1': + resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/typescript-estree@8.54.0': resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} @@ -3410,11 +3417,10 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.53.1': - resolution: {integrity: sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==} + '@typescript-eslint/typescript-estree@8.56.1': + resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/utils@8.54.0': @@ -3424,14 +3430,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.53.1': - resolution: {integrity: sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==} + '@typescript-eslint/utils@8.56.1': + resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/visitor-keys@8.54.0': resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.56.1': + resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251209.1': resolution: {integrity: sha512-F1cnYi+ZeinYQnaTQKKIsbuoq8vip5iepBkSZXlB8PjbG62LW1edUdktd/nVEc+Q+SEysSQ3jRdk9eU766s5iw==} cpu: [arm64] @@ -3505,8 +3518,8 @@ packages: '@vitest/browser': optional: true - '@vitest/eslint-plugin@1.6.6': - resolution: {integrity: sha512-bwgQxQWRtnTVzsUHK824tBmHzjV0iTx3tZaiQIYDjX3SA7TsQS8CuDVqxXrRY3FaOUMgbGavesCxI9MOfFLm7Q==} + '@vitest/eslint-plugin@1.6.9': + resolution: {integrity: sha512-9WfPx1OwJ19QLCSRLkqVO7//1WcWnK3fE/3fJhKMAmDe8+9G4rB47xCNIIeCq3FdEzkIoLTfDlwDlPBaUTMhow==} engines: {node: '>=18'} peerDependencies: eslint: '>=8.57.0' @@ -3670,6 +3683,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -3697,6 +3715,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -4068,10 +4089,6 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - comment-parser@1.4.1: - resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} - engines: {node: '>= 12.0.0'} - comment-parser@1.4.5: resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==} engines: {node: '>= 12.0.0'} @@ -4392,10 +4409,6 @@ packages: didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - diff-sequences@27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4485,10 +4498,6 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.18.4: - resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} - engines: {node: '>=10.13.0'} - enhanced-resolve@5.19.0: resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} engines: {node: '>=10.13.0'} @@ -4556,19 +4565,13 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-compat-utils@0.6.5: - resolution: {integrity: sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==} - engines: {node: '>=12'} + eslint-config-flat-gitignore@2.2.1: + resolution: {integrity: sha512-wA5EqN0era7/7Gt5Botlsfin/UNY0etJSEeBgbUlFLFrBi47rAN//+39fI7fpYcl8RENutlFtvp/zRa/M/pZNg==} peerDependencies: - eslint: '>=6.0.0' + eslint: ^9.5.0 || ^10.0.0 - eslint-config-flat-gitignore@2.1.0: - resolution: {integrity: sha512-cJzNJ7L+psWp5mXM7jBX+fjHtBvvh06RBlcweMhKD8jWqQw0G78hOW5tpVALGHGFPsBV+ot2H+pdDGJy6CV8pA==} - peerDependencies: - eslint: ^9.5.0 - - eslint-flat-config-utils@3.0.0: - resolution: {integrity: sha512-bzTam/pSnPANR0GUz4g7lo4fyzlQZwuz/h8ytsSS4w59N/JlXH/l7jmyNVBLxPz3B9/9ntz5ZLevGpazyDXJQQ==} + eslint-flat-config-utils@3.0.1: + resolution: {integrity: sha512-VMA3u86bLzNAwD/7DkLtQ9lolgIOx2Sj0kTMMnBvrvEz7w0rQj4aGCR+lqsqtld63gKiLyT4BnQZ3gmGDXtvjg==} eslint-json-compat-utils@0.2.1: resolution: {integrity: sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==} @@ -4586,17 +4589,16 @@ packages: peerDependencies: eslint: '*' - eslint-plugin-antfu@3.1.3: - resolution: {integrity: sha512-Az1QuqQJ/c2efWCxVxF249u3D4AcAu1Y3VCGAlJm+x4cgnn1ybUAnCT5DWVcogeaWduQKeVw07YFydVTOF4xDw==} + eslint-plugin-antfu@3.2.2: + resolution: {integrity: sha512-Qzixht2Dmd/pMbb5EnKqw2V8TiWHbotPlsORO8a+IzCLFwE0RxK8a9k4DCTFPzBwyxJzH+0m2Mn8IUGeGQkyUw==} peerDependencies: eslint: '*' - eslint-plugin-better-tailwindcss@https://pkg.pr.new/hyoban/eslint-plugin-better-tailwindcss@c0161c7: - resolution: {tarball: https://pkg.pr.new/hyoban/eslint-plugin-better-tailwindcss@c0161c7} - version: 4.1.1 + eslint-plugin-better-tailwindcss@4.3.1: + resolution: {integrity: sha512-b6xM31GukKz0WlgMD0tQdY/rLjf/9mWIk8EcA45ngOKJPPQf1C482xZtBlT357jyunQE2mOk4NlPcL4i9Pr85A==} engines: {node: ^20.19.0 || ^22.12.0 || >=23.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 oxlint: ^1.35.0 tailwindcss: ^3.3.0 || ^4.1.17 peerDependenciesMeta: @@ -4605,9 +4607,12 @@ packages: oxlint: optional: true - eslint-plugin-command@3.4.0: - resolution: {integrity: sha512-EW4eg/a7TKEhG0s5IEti72kh3YOTlnhfFNuctq5WnB1fst37/IHTd5OkD+vnlRf3opTvUcSRihAateP6bT5ZcA==} + eslint-plugin-command@3.5.2: + resolution: {integrity: sha512-PA59QAkQDwvcCMEt5lYLJLI3zDGVKJeC4id/pcRY2XdRYhSGW7iyYT1VC1N3bmpuvu6Qb/9QptiS3GJMjeGTJg==} peerDependencies: + '@typescript-eslint/rule-tester': '*' + '@typescript-eslint/typescript-estree': '*' + '@typescript-eslint/utils': '*' eslint: '*' eslint-plugin-es-x@7.8.0: @@ -4616,31 +4621,31 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-hyoban@0.11.1: - resolution: {integrity: sha512-GpLo3Ig0l6bn0Ceu3vqBbdFfWox0LKPXb1K2pha4Ov4DzJdZRQkNA8UWtulGr8ZSy9SiK3YJoKphgZfk9kWvGQ==} + eslint-plugin-hyoban@0.11.2: + resolution: {integrity: sha512-tCWk/r37PXsp3swU59e9xNYV+istWcYW2cg8j6U5fnbI7mT2p+KIA/NjAVV5jqTVVRInK1YJCiRwc8krXX4+wA==} peerDependencies: eslint: '*' - eslint-plugin-import-lite@0.5.0: - resolution: {integrity: sha512-7uBvxuQj+VlYmZSYSHcm33QgmZnvMLP2nQiWaLtjhJ5x1zKcskOqjolL+dJC13XY+ktQqBgidAnnQMELfRaXQg==} + eslint-plugin-import-lite@0.5.2: + resolution: {integrity: sha512-XvfdWOC5dSLEI9krIPRlNmKSI2ViIE9pVylzfV9fCq0ZpDaNeUk6o0wZv0OzN83QdadgXp1NsY0qjLINxwYCsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' - eslint-plugin-jsdoc@62.4.1: - resolution: {integrity: sha512-HgX2iN4j104D/mCUqRbhtzSZbph+KO9jfMHiIJjJ19Q+IwLQ5Na2IqvOJYq4S+4kgvEk1w6KYF4vVus6H2wcHg==} + eslint-plugin-jsdoc@62.7.1: + resolution: {integrity: sha512-4Zvx99Q7d1uggYBUX/AIjvoyqXhluGbbKrRmG8SQTLprPFg6fa293tVJH1o1GQwNe3lUydd8ZHzn37OaSncgSQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 - eslint-plugin-jsonc@2.21.0: - resolution: {integrity: sha512-HttlxdNG5ly3YjP1cFMP62R4qKLxJURfBZo2gnMY+yQojZxkLyOpY1H1KRTKBmvQeSG9pIpSGEhDjE17vvYosg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-plugin-jsonc@3.1.1: + resolution: {integrity: sha512-7TSQO8ZyvOuXWb0sYke3KUSh0DJA4/QviKfuzD3/Cy3XDjtrIrTWQbjb7j/Yy2l/DgwuM+lCS2c/jqJifv5jhg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: - eslint: '>=6.0.0' + eslint: '>=9.38.0' - eslint-plugin-n@17.23.2: - resolution: {integrity: sha512-RhWBeb7YVPmNa2eggvJooiuehdL76/bbfj/OJewyoGT80qn5PXdz8zMOTO6YHOsI7byPt7+Ighh/i/4a5/v7hw==} + eslint-plugin-n@17.24.0: + resolution: {integrity: sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' @@ -4649,29 +4654,29 @@ packages: resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} engines: {node: '>=5.0.0'} - eslint-plugin-perfectionist@5.4.0: - resolution: {integrity: sha512-XxpUMpeVaSJF5rpF6NHmhj3xavHZrflKcRbDssAUWrHUU/+l3l7PPYnVJ6IOpR2KjQ1Blucaeb0cFL3LIBis0A==} + eslint-plugin-perfectionist@5.6.0: + resolution: {integrity: sha512-pxrLrfRp5wl1Vol1fAEa/G5yTXxefTPJjz07qC7a8iWFXcOZNuWBItMQ2OtTzfQIvMq6bMyYcrzc3Wz++na55Q==} engines: {node: ^20.0.0 || >=22.0.0} peerDependencies: - eslint: '>=8.45.0' + eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 - eslint-plugin-pnpm@1.5.0: - resolution: {integrity: sha512-ayMo1GvrQ/sF/bz1aOAiH0jv9eAqU2Z+a1ycoWz/uFFK5NxQDq49BDKQtBumcOUBf2VHyiTW4a8u+6KVqoIWzQ==} + eslint-plugin-pnpm@1.6.0: + resolution: {integrity: sha512-dxmt9r3zvPaft6IugS4i0k16xag3fTbOvm/road5uV9Y8qUCQT0xzheSh3gMlYAlC6vXRpfArBDsTZ7H7JKCbg==} peerDependencies: - eslint: ^9.0.0 + eslint: ^9.0.0 || ^10.0.0 - eslint-plugin-react-dom@2.9.4: - resolution: {integrity: sha512-lRa3iN082cX3HRKdbKSESmlj+z4zMR10DughwagV7h+IOd3O07UGnYQhenH08GMSyLy1f2D6QJmKBLGbx2p20g==} + eslint-plugin-react-dom@2.13.0: + resolution: {integrity: sha512-+2IZzQ1WEFYOWatW+xvNUqmZn55YBCufzKA7hX3XQ/8eu85Mp4vnlOyNvdVHEOGhUnGuC6+9+zLK+IlEHKdKLQ==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - eslint-plugin-react-hooks-extra@2.9.4: - resolution: {integrity: sha512-8hQArFHpXubT+i++8TwIL24vQ5b/ZcnVT3EFOSvy1TdBZw8NqrcFNBVqywQ6YUWX0utuPiTQgeJB0qnBF7gx4g==} + eslint-plugin-react-hooks-extra@2.13.0: + resolution: {integrity: sha512-qIbha1nzuyhXM9SbEfrcGVqmyvQu7GAOB2sy9Y4Qo5S8nCqw4fSBxq+8lSce5Tk5Y7XzIkgHOhNyXEvUHRWFMQ==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' eslint-plugin-react-hooks@7.0.1: @@ -4680,84 +4685,85 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-naming-convention@2.9.4: - resolution: {integrity: sha512-Ow9ikJ49tDjeTaO2wfUYlSlVBsbG8AZVqoVFu4HH69FZe6I5LEdjZf/gdXnN2W+/JAy7Ru5vYQ8H8LU3tTZERg==} + eslint-plugin-react-naming-convention@2.13.0: + resolution: {integrity: sha512-uSd25JzSg2R4p81s3Wqck0AdwRlO9Yc+cZqTEXv7vW8exGGAM3mWnF6hgrgdqVJqBEGJIbS/Vx1r5BdKcY/MHA==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - eslint-plugin-react-refresh@0.5.0: - resolution: {integrity: sha512-ZYvmh7VfVgqR/7wR71I3Zl6hK/C5CcxdWYKZSpHawS5JCNgE4efhQWg/+/WPpgGAp9Ngp/rRZYyaIwmPQBq/lA==} + eslint-plugin-react-refresh@0.5.2: + resolution: {integrity: sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==} peerDependencies: - eslint: '>=9' + eslint: ^9 || ^10 - eslint-plugin-react-rsc@2.9.4: - resolution: {integrity: sha512-RwBYSLkcGXQV6SQYABdHLrafUmpfdPBYsAa/kvg6smqEn+/vPKSk0I+uAuzkmiw4y4KXW94Q9rlIdJlzOMdJfQ==} + eslint-plugin-react-rsc@2.13.0: + resolution: {integrity: sha512-RaftgITDLQm1zIgYyvR51sBdy4FlVaXFts5VISBaKbSUB0oqXyzOPxMHasfr9BCSjPLKus9zYe+G/Hr6rjFLXQ==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - eslint-plugin-react-web-api@2.9.4: - resolution: {integrity: sha512-/k++qhGoYtMNZrsQT+M08fCGi/VurL1fE/LNiz2fMwOIU7KjXD9N0kGWPFdIAISnYXGzOg53O5WW/mnNR78emQ==} + eslint-plugin-react-web-api@2.13.0: + resolution: {integrity: sha512-nmJbzIAte7PeAkp22CwcKEASkKi49MshSdiDGO1XuN3f4N4/8sBfDcWbQuLPde6JiuzDT/0+l7Gi8wwTHtR1kg==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - eslint-plugin-react-x@2.9.4: - resolution: {integrity: sha512-a078MHeM/FdjRu3KJsFX+PCHewZyC77EjAO7QstL/vvwjsFae3PCWMZ8Q4b+mzUsT4FkFxi5mEW43ZHksPWDFw==} + eslint-plugin-react-x@2.13.0: + resolution: {integrity: sha512-cMNX0+ws/fWTgVxn52qAQbaFF2rqvaDAtjrPUzY6XOzPjY0rJQdR2tSlWJttz43r2yBfqu+LGvHlGpWL2wfpTQ==} engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - eslint-plugin-regexp@2.10.0: - resolution: {integrity: sha512-ovzQT8ESVn5oOe5a7gIDPD5v9bCSjIFJu57sVPDqgPRXicQzOnYfFN21WoQBQF18vrhT5o7UMKFwJQVVjyJ0ng==} - engines: {node: ^18 || >=20} - peerDependencies: - eslint: '>=8.44.0' - - eslint-plugin-sonarjs@3.0.6: - resolution: {integrity: sha512-3mVUqsAUSylGfkJMj2v0aC2Cu/eUunDLm+XMjLf0uLjAZao205NWF3g6EXxcCAFO+rCZiQ6Or1WQkUcU9/sKFQ==} - peerDependencies: - eslint: ^8.0.0 || ^9.0.0 - - eslint-plugin-storybook@10.2.6: - resolution: {integrity: sha512-Ykf0hDS97oJlQel21WG+SYtGnzFkkSfifupJ92NQtMMSMLXsWm4P0x8ZQqu9/EQa+dUkGoj9EWyNmmbB/54uhA==} - peerDependencies: - eslint: '>=8' - storybook: ^10.2.6 - - eslint-plugin-toml@1.0.3: - resolution: {integrity: sha512-GlCBX+R313RvFY2Tj0ZmvzCEv8FDp1z2itvTFTV4bW/Bkbl3xEp9inWNsRWH3SiDUlxo8Pew31ILEp/3J0WxaA==} + eslint-plugin-regexp@3.0.0: + resolution: {integrity: sha512-iW7hgAV8NOG6E2dz+VeKpq67YLQ9jaajOKYpoOSic2/q8y9BMdXBKkSR9gcMtbqEhNQzdW41E3wWzvhp8ExYwQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: eslint: '>=9.38.0' - eslint-plugin-unicorn@62.0.0: - resolution: {integrity: sha512-HIlIkGLkvf29YEiS/ImuDZQbP12gWyx5i3C6XrRxMvVdqMroCI9qoVYCoIl17ChN+U89pn9sVwLxhIWj5nEc7g==} + eslint-plugin-sonarjs@4.0.0: + resolution: {integrity: sha512-ihyH9HO52OeeWer/gWRndkW/ZhGqx9HDg+Iptu+ApSfiomT2LzhHgHCoyJrhh7DjCyKhjU3Hmmz1pzcXRf7B3g==} + peerDependencies: + eslint: ^8.0.0 || ^9.0.0 || ^10.0.0 + + eslint-plugin-storybook@10.2.13: + resolution: {integrity: sha512-ftNfZVL5zXhGMPEy/7PTCEriVH0zCBI89uiYYgSSTtM1b4l++VP+/MzJ17U1R1/jgENsp9LJm+jwRJnViv79RQ==} + peerDependencies: + eslint: '>=8' + storybook: ^10.2.13 + + eslint-plugin-toml@1.3.0: + resolution: {integrity: sha512-+jjKAs2WRNom9PU1APlrL1kNexy1RHoKB7SHw7FLZBlqOCYXUKyG3Quiv1XUICdWDJ6oGVgW/mSm+BDuQrcc3w==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: '>=9.38.0' + + eslint-plugin-unicorn@63.0.0: + resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==} engines: {node: ^20.10.0 || >=21.0.0} peerDependencies: eslint: '>=9.38.0' - eslint-plugin-unused-imports@4.3.0: - resolution: {integrity: sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA==} + eslint-plugin-unused-imports@4.4.1: + resolution: {integrity: sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==} peerDependencies: '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 - eslint: ^9.0.0 || ^8.0.0 + eslint: ^10.0.0 || ^9.0.0 || ^8.0.0 peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true - eslint-plugin-vue@10.7.0: - resolution: {integrity: sha512-r2XFCK4qlo1sxEoAMIoTTX0PZAdla0JJDt1fmYiworZUX67WeEGqm+JbyAg3M+pGiJ5U6Mp5WQbontXWtIW7TA==} + eslint-plugin-vue@10.8.0: + resolution: {integrity: sha512-f1J/tcbnrpgC8suPN5AtdJ5MQjuXbSU9pGRSSYAuF3SHoiYCOdEX6O22pLaRyLHXvDcOe+O5ENgc1owQ587agA==} + version: 10.8.0 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 '@typescript-eslint/parser': ^7.0.0 || ^8.0.0 - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 vue-eslint-parser: ^10.0.0 peerDependenciesMeta: '@stylistic/eslint-plugin': @@ -4765,8 +4771,8 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-yml@3.0.0: - resolution: {integrity: sha512-kuAW6o3hlFHyF5p7TLon+AtvNWnsvRrb88pqywGMSCEqAP5d1gOMvNGgWLVlKHqmx5RbFhQLcxFDGmS4IU9DwA==} + eslint-plugin-yml@3.3.0: + resolution: {integrity: sha512-kRja5paNrMfZnbNqDbZSFrSHz5x7jmGBQq7d6z/+wRvWD4Y0yb1fbjojBg3ReMewFhBB7nD2nPC86+m3HmILJA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} peerDependencies: eslint: '>=9.38.0' @@ -4785,6 +4791,10 @@ packages: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-scope@9.1.1: + resolution: {integrity: sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4797,9 +4807,13 @@ packages: resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@9.27.0: - resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.0.2: + resolution: {integrity: sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: jiti: '*' @@ -4807,8 +4821,8 @@ packages: jiti: optional: true - eslint@9.39.2: - resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} + eslint@9.27.0: + resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -4825,9 +4839,9 @@ packages: resolution: {integrity: sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@11.1.1: + resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -4928,6 +4942,12 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} @@ -5091,8 +5111,8 @@ packages: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} - globals@17.1.0: - resolution: {integrity: sha512-8HoIcWI5fCvG5NADj4bDav+er9B9JMj2vyL2pI8D0eismKyUvPLTSs+Ln3wqhwcp306i73iyVnEKx3F6T47TGw==} + globals@17.3.0: + resolution: {integrity: sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==} engines: {node: '>=18'} globrex@0.1.2: @@ -5106,9 +5126,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - hachure-fill@0.5.2: resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} @@ -5471,18 +5488,14 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdoc-type-pratt-parser@4.8.0: - resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} - engines: {node: '>=12.0.0'} - - jsdoc-type-pratt-parser@7.0.0: - resolution: {integrity: sha512-c7YbokssPOSHmqTbSAmTtnVgAVa/7lumWNYqomgd5KOMyPrRve2anx6lonfOsXEQacqF9FKVUj7bLg4vRSvdYA==} - engines: {node: '>=20.0.0'} - jsdoc-type-pratt-parser@7.1.0: resolution: {integrity: sha512-SX7q7XyCwzM/MEDCYz0l8GgGbJAACGFII9+WfNYr5SLEKukHWRy2Jk3iWRe7P+lpYJNs7oQ+OSei4JtKGUjd7A==} engines: {node: '>=20.0.0'} + jsdoc-type-pratt-parser@7.1.1: + resolution: {integrity: sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==} + engines: {node: '>=20.0.0'} + jsdom-testing-mocks@1.16.0: resolution: {integrity: sha512-wLrulXiLpjmcUYOYGEvz4XARkrmdVpyxzdBl9IAMbQ+ib2/UhUTRCn49McdNfXLff2ysGBUms49ZKX0LR1Q0gg==} engines: {node: '>=14'} @@ -5524,9 +5537,9 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-eslint-parser@2.4.2: - resolution: {integrity: sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + jsonc-eslint-parser@3.1.0: + resolution: {integrity: sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} @@ -5933,6 +5946,14 @@ packages: resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} + minimatch@10.2.1: + resolution: {integrity: sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==} + engines: {node: 20 || >=22} + + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -6278,8 +6299,8 @@ packages: resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} engines: {node: '>=14.19.0'} - pnpm-workspace-yaml@1.5.0: - resolution: {integrity: sha512-PxdyJuFvq5B0qm3s9PaH/xOtSxrcvpBRr+BblhucpWjs8c79d4b7/cXhyY4AyHOHCnqklCYZTjfl0bT/mFVTRw==} + pnpm-workspace-yaml@1.6.0: + resolution: {integrity: sha512-uUy4dK3E11sp7nK+hnT7uAWfkBMe00KaUw8OG3NuNlYQoTk4sc9pcdIy1+XIP85v9Tvr02mK3JPaNNrP0QyRaw==} points-on-curve@0.2.0: resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} @@ -6802,6 +6823,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -7539,11 +7565,11 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - vue-eslint-parser@10.2.0: - resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==} + vue-eslint-parser@10.4.0: + resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} @@ -7905,52 +7931,54 @@ snapshots: idb: 8.0.3 tslib: 2.8.1 - '@antfu/eslint-config@7.2.0(@eslint-react/eslint-plugin@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(@next/eslint-plugin-next@16.1.6)(@vue/compiler-sfc@3.5.27)(eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@1.21.7)))(eslint-plugin-react-refresh@0.5.0(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17)': + '@antfu/eslint-config@7.6.1(@eslint-react/eslint-plugin@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(@next/eslint-plugin-next@16.1.6)(@typescript-eslint/rule-tester@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3))(@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint-plugin-react-hooks@7.0.1(eslint@10.0.2(jiti@1.21.7)))(eslint-plugin-react-refresh@0.5.2(eslint@10.0.2(jiti@1.21.7)))(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17)': dependencies: '@antfu/install-pkg': 1.1.0 - '@clack/prompts': 0.11.0 - '@eslint-community/eslint-plugin-eslint-comments': 4.6.0(eslint@9.39.2(jiti@1.21.7)) + '@clack/prompts': 1.0.1 + '@eslint-community/eslint-plugin-eslint-comments': 4.6.0(eslint@10.0.2(jiti@1.21.7)) '@eslint/markdown': 7.5.1 - '@stylistic/eslint-plugin': 5.7.1(eslint@9.39.2(jiti@1.21.7)) - '@typescript-eslint/eslint-plugin': 8.53.1(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@vitest/eslint-plugin': 1.6.6(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17) + '@stylistic/eslint-plugin': https://pkg.pr.new/@stylistic/eslint-plugin@258f9d8(eslint@10.0.2(jiti@1.21.7)) + '@typescript-eslint/eslint-plugin': 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@vitest/eslint-plugin': 1.6.9(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17) ansis: 4.2.0 cac: 6.7.14 - eslint: 9.39.2(jiti@1.21.7) - eslint-config-flat-gitignore: 2.1.0(eslint@9.39.2(jiti@1.21.7)) - eslint-flat-config-utils: 3.0.0 - eslint-merge-processors: 2.0.0(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-antfu: 3.1.3(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-command: 3.4.0(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-import-lite: 0.5.0(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-jsdoc: 62.4.1(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-jsonc: 2.21.0(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-n: 17.23.2(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) + eslint-config-flat-gitignore: 2.2.1(eslint@10.0.2(jiti@1.21.7)) + eslint-flat-config-utils: 3.0.1 + eslint-merge-processors: 2.0.0(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-antfu: 3.2.2(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3))(@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-import-lite: 0.5.2(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-jsdoc: 62.7.1(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-jsonc: 3.1.1(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-n: 17.24.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-perfectionist: 5.4.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint-plugin-pnpm: 1.5.0(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-regexp: 2.10.0(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-toml: 1.0.3(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-unicorn: 62.0.0(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-unused-imports: 4.3.0(@typescript-eslint/eslint-plugin@8.53.1(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-vue: 10.7.0(@stylistic/eslint-plugin@5.7.1(eslint@9.39.2(jiti@1.21.7)))(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@1.21.7))) - eslint-plugin-yml: 3.0.0(eslint@9.39.2(jiti@1.21.7)) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@1.21.7)) - globals: 17.1.0 - jsonc-eslint-parser: 2.4.2 + eslint-plugin-perfectionist: 5.6.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-pnpm: 1.6.0(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-regexp: 3.0.0(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-toml: 1.3.0(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-unicorn: 63.0.0(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-vue: 10.8.0(@stylistic/eslint-plugin@https://pkg.pr.new/@stylistic/eslint-plugin@258f9d8(eslint@10.0.2(jiti@1.21.7)))(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7))(vue-eslint-parser@10.4.0(eslint@10.0.2(jiti@1.21.7))) + eslint-plugin-yml: 3.3.0(eslint@10.0.2(jiti@1.21.7)) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.27)(eslint@10.0.2(jiti@1.21.7)) + globals: 17.3.0 local-pkg: 1.1.2 parse-gitignore: 2.0.0 toml-eslint-parser: 1.0.3 - vue-eslint-parser: 10.2.0(eslint@9.39.2(jiti@1.21.7)) + vue-eslint-parser: 10.4.0(eslint@10.0.2(jiti@1.21.7)) yaml-eslint-parser: 2.0.0 optionalDependencies: - '@eslint-react/eslint-plugin': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/eslint-plugin': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) '@next/eslint-plugin-next': 16.1.6 - eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-react-refresh: 0.5.0(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-react-hooks: 7.0.1(eslint@10.0.2(jiti@1.21.7)) + eslint-plugin-react-refresh: 0.5.2(eslint@10.0.2(jiti@1.21.7)) transitivePeerDependencies: - '@eslint/json' + - '@typescript-eslint/rule-tester' + - '@typescript-eslint/typescript-estree' + - '@typescript-eslint/utils' - '@vue/compiler-sfc' - supports-color - typescript @@ -8142,23 +8170,23 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/core@0.5.0': + '@clack/core@1.0.1': dependencies: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@0.11.0': - dependencies: - '@clack/core': 0.5.0 - picocolors: 1.1.1 - sisteransi: 1.0.5 - '@clack/prompts@0.8.2': dependencies: '@clack/core': 0.3.5 picocolors: 1.1.1 sisteransi: 1.0.5 + '@clack/prompts@1.0.1': + dependencies: + '@clack/core': 1.0.1 + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@code-inspector/core@1.3.6': dependencies: '@vue/compiler-dom': 3.5.27 @@ -8248,21 +8276,13 @@ snapshots: '@epic-web/invariant@1.0.0': {} - '@es-joy/jsdoccomment@0.78.0': + '@es-joy/jsdoccomment@0.84.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.53.1 - comment-parser: 1.4.1 - esquery: 1.7.0 - jsdoc-type-pratt-parser: 7.0.0 - - '@es-joy/jsdoccomment@0.83.0': - dependencies: - '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/types': 8.54.0 comment-parser: 1.4.5 esquery: 1.7.0 - jsdoc-type-pratt-parser: 7.1.0 + jsdoc-type-pratt-parser: 7.1.1 '@es-joy/resolve.exports@1.2.0': {} @@ -8344,103 +8364,103 @@ snapshots: '@esbuild/win32-x64@0.27.2': optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.6.0(eslint@9.39.2(jiti@1.21.7))': + '@eslint-community/eslint-plugin-eslint-comments@4.6.0(eslint@10.0.2(jiti@1.21.7))': dependencies: escape-string-regexp: 4.0.0 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) ignore: 7.0.5 + '@eslint-community/eslint-utils@4.9.1(eslint@10.0.2(jiti@1.21.7))': + dependencies: + eslint: 10.0.2(jiti@1.21.7) + eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@9.27.0(jiti@1.21.7))': dependencies: eslint: 9.27.0(jiti@1.21.7) eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@1.21.7))': - dependencies: - eslint: 9.39.2(jiti@1.21.7) - eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.2': {} - '@eslint-react/ast@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': + '@eslint-react/ast@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: - '@eslint-react/eff': 2.9.4 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@eslint-react/eff': 2.13.0 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) string-ts: 2.3.1 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@eslint-react/core@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': + '@eslint-react/core@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@eslint-react/ast': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@eslint-react/eff@2.9.4': {} + '@eslint-react/eff@2.13.0': {} - '@eslint-react/eslint-plugin@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': + '@eslint-react/eslint-plugin@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) - eslint-plugin-react-dom: 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint-plugin-react-hooks-extra: 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint-plugin-react-naming-convention: 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint-plugin-react-rsc: 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint-plugin-react-web-api: 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint-plugin-react-x: 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) + eslint-plugin-react-dom: 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-react-hooks-extra: 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-react-naming-convention: 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-react-rsc: 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-react-web-api: 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-react-x: 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@eslint-react/shared@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': + '@eslint-react/shared@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: - '@eslint-react/eff': 2.9.4 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@eslint-react/eff': 2.13.0 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) ts-pattern: 5.9.0 typescript: 5.9.3 zod: 4.3.6 transitivePeerDependencies: - supports-color - '@eslint-react/var@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': + '@eslint-react/var@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@eslint-react/ast': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@eslint/compat@1.4.1(eslint@9.39.2(jiti@1.21.7))': + '@eslint/compat@2.0.2(eslint@10.0.2(jiti@1.21.7))': dependencies: - '@eslint/core': 0.17.0 + '@eslint/core': 1.1.0 optionalDependencies: - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) '@eslint/config-array@0.20.1': dependencies: @@ -8450,23 +8470,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-array@0.21.1': + '@eslint/config-array@0.23.2': dependencies: - '@eslint/object-schema': 2.1.7 + '@eslint/object-schema': 3.0.2 debug: 4.4.3 - minimatch: 3.1.2 + minimatch: 10.2.4 transitivePeerDependencies: - supports-color '@eslint/config-helpers@0.2.3': {} - '@eslint/config-helpers@0.4.2': + '@eslint/config-helpers@0.5.2': dependencies: - '@eslint/core': 0.17.0 - - '@eslint/config-helpers@0.5.1': - dependencies: - '@eslint/core': 1.0.1 + '@eslint/core': 1.1.0 '@eslint/core@0.14.0': dependencies: @@ -8484,7 +8500,11 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/css-tree@3.6.8': + '@eslint/core@1.1.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/css-tree@3.6.9': dependencies: mdn-data: 2.23.0 source-map-js: 1.2.1 @@ -8505,8 +8525,6 @@ snapshots: '@eslint/js@9.27.0': {} - '@eslint/js@9.39.2': {} - '@eslint/markdown@7.5.1': dependencies: '@eslint/core': 0.17.0 @@ -8523,6 +8541,8 @@ snapshots: '@eslint/object-schema@2.1.7': {} + '@eslint/object-schema@3.0.2': {} + '@eslint/plugin-kit@0.3.5': dependencies: '@eslint/core': 0.15.2 @@ -8533,9 +8553,9 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@eslint/plugin-kit@0.5.1': + '@eslint/plugin-kit@0.6.0': dependencies: - '@eslint/core': 1.0.1 + '@eslint/core': 1.1.0 levn: 0.4.1 '@floating-ui/core@1.7.3': @@ -9317,6 +9337,8 @@ snapshots: transitivePeerDependencies: - '@opentelemetry/api' + '@ota-meshi/ast-token-store@0.3.0': {} + '@oxc-resolver/binding-android-arm-eabi@11.16.4': optional: true @@ -10093,11 +10115,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@stylistic/eslint-plugin@5.7.1(eslint@9.39.2(jiti@1.21.7))': + '@stylistic/eslint-plugin@https://pkg.pr.new/@stylistic/eslint-plugin@258f9d8(eslint@10.0.2(jiti@1.21.7))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7)) - '@typescript-eslint/types': 8.53.1 - eslint: 9.39.2(jiti@1.21.7) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@1.21.7)) + '@typescript-eslint/types': 8.56.1 + eslint: 10.0.2(jiti@1.21.7) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -10235,10 +10257,10 @@ snapshots: - csstype - utf-8-validate - '@tanstack/eslint-plugin-query@5.91.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': + '@tanstack/eslint-plugin-query@5.91.4(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@typescript-eslint/utils': 8.54.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -10393,7 +10415,7 @@ snapshots: '@tsslint/compat-eslint@3.0.2(jiti@1.21.7)(typescript@5.9.3)': dependencies: '@tsslint/types': 3.0.2 - '@typescript-eslint/parser': 8.54.0(eslint@9.27.0(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@9.27.0(jiti@1.21.7))(typescript@5.9.3) eslint: 9.27.0(jiti@1.21.7) transitivePeerDependencies: - jiti @@ -10589,6 +10611,8 @@ snapshots: '@types/json-schema': 7.0.15 optional: true + '@types/esrecurse@4.3.1': {} + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.8 @@ -10686,15 +10710,15 @@ snapshots: '@types/zen-observable@0.8.3': {} - '@typescript-eslint/eslint-plugin@8.53.1(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.53.1 - '@typescript-eslint/type-utils': 8.53.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.53.1 - eslint: 9.39.2(jiti@1.21.7) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.1 + eslint: 10.0.2(jiti@1.21.7) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -10702,39 +10726,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.54.0(eslint@9.27.0(jiti@1.21.7))(typescript@5.9.3)': + '@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.1 + debug: 4.4.3 + eslint: 10.0.2(jiti@1.21.7) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.56.1(eslint@9.27.0(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3 eslint: 9.27.0(jiti@1.21.7) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 - debug: 4.4.3 - eslint: 9.39.2(jiti@1.21.7) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.53.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.9.3) - '@typescript-eslint/types': 8.53.1 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) @@ -10744,66 +10759,62 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.53.1': + '@typescript-eslint/project-service@8.56.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.53.1 - '@typescript-eslint/visitor-keys': 8.53.1 + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/rule-tester@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + ajv: 6.14.0 + eslint: 10.0.2(jiti@1.21.7) + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + - typescript '@typescript-eslint/scope-manager@8.54.0': dependencies: '@typescript-eslint/types': 8.54.0 '@typescript-eslint/visitor-keys': 8.54.0 - '@typescript-eslint/tsconfig-utils@8.53.1(typescript@5.9.3)': + '@typescript-eslint/scope-manager@8.56.1': dependencies: - typescript: 5.9.3 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/visitor-keys': 8.56.1 '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.53.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.56.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.53.1 - '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) debug: 4.4.3 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.2(jiti@1.21.7) - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.53.1': {} - '@typescript-eslint/types@8.54.0': {} - '@typescript-eslint/typescript-estree@8.53.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.53.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.9.3) - '@typescript-eslint/types': 8.53.1 - '@typescript-eslint/visitor-keys': 8.53.1 - debug: 4.4.3 - minimatch: 9.0.5 - semver: 7.7.3 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types@8.56.1': {} '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': dependencies: @@ -10820,38 +10831,53 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7)) - '@typescript-eslint/scope-manager': 8.53.1 - '@typescript-eslint/types': 8.53.1 - '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@typescript-eslint/project-service': 8.56.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/visitor-keys': 8.56.1 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.3 + tinyglobby: 0.2.15 + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': + '@typescript-eslint/utils@8.54.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@1.21.7)) '@typescript-eslint/scope-manager': 8.54.0 '@typescript-eslint/types': 8.54.0 '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.53.1': + '@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.53.1 - eslint-visitor-keys: 4.2.1 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color '@typescript-eslint/visitor-keys@8.54.0': dependencies: '@typescript-eslint/types': 8.54.0 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.56.1': + dependencies: + '@typescript-eslint/types': 8.56.1 + eslint-visitor-keys: 5.0.0 + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251209.1': optional: true @@ -10949,11 +10975,11 @@ snapshots: optionalDependencies: '@vitest/browser': 4.0.17(vite@7.3.1(@types/node@24.10.12)(jiti@1.21.7)(sass@1.93.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.17) - '@vitest/eslint-plugin@1.6.6(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17)': + '@vitest/eslint-plugin@1.6.9(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17)': dependencies: - '@typescript-eslint/scope-manager': 8.53.1 - '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) optionalDependencies: typescript: 5.9.3 vitest: 4.0.17(@types/node@24.10.12)(@vitest/browser-playwright@4.0.17)(jiti@1.21.7)(jsdom@27.3.0(canvas@3.2.1))(sass@1.93.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) @@ -11176,17 +11202,23 @@ snapshots: abcjs@6.5.2: {} - acorn-import-phases@1.0.4(acorn@8.15.0): + acorn-import-phases@1.0.4(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 optional: true acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn@8.15.0: {} + acorn@8.16.0: {} + agent-base@7.1.4: {} ahooks@3.9.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): @@ -11222,6 +11254,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -11580,8 +11619,6 @@ snapshots: commander@8.3.0: {} - comment-parser@1.4.1: {} - comment-parser@1.4.5: {} common-tags@1.8.2: {} @@ -11913,8 +11950,6 @@ snapshots: didyoumean@1.2.2: {} - diff-sequences@27.5.1: {} - diff-sequences@29.6.3: {} dlv@1.1.3: {} @@ -12002,16 +12037,10 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.18.4: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - enhanced-resolve@5.19.0: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 - optional: true entities@4.5.0: {} @@ -12082,45 +12111,40 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.39.2(jiti@1.21.7)): + eslint-compat-utils@0.5.1(eslint@10.0.2(jiti@1.21.7)): dependencies: - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) semver: 7.7.3 - eslint-compat-utils@0.6.5(eslint@9.39.2(jiti@1.21.7)): + eslint-config-flat-gitignore@2.2.1(eslint@10.0.2(jiti@1.21.7)): dependencies: - eslint: 9.39.2(jiti@1.21.7) - semver: 7.7.3 + '@eslint/compat': 2.0.2(eslint@10.0.2(jiti@1.21.7)) + eslint: 10.0.2(jiti@1.21.7) - eslint-config-flat-gitignore@2.1.0(eslint@9.39.2(jiti@1.21.7)): + eslint-flat-config-utils@3.0.1: dependencies: - '@eslint/compat': 1.4.1(eslint@9.39.2(jiti@1.21.7)) - eslint: 9.39.2(jiti@1.21.7) - - eslint-flat-config-utils@3.0.0: - dependencies: - '@eslint/config-helpers': 0.5.1 + '@eslint/config-helpers': 0.5.2 pathe: 2.0.3 - eslint-json-compat-utils@0.2.1(eslint@9.39.2(jiti@1.21.7))(jsonc-eslint-parser@2.4.2): + eslint-json-compat-utils@0.2.1(eslint@10.0.2(jiti@1.21.7))(jsonc-eslint-parser@3.1.0): dependencies: - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) esquery: 1.7.0 - jsonc-eslint-parser: 2.4.2 + jsonc-eslint-parser: 3.1.0 - eslint-merge-processors@2.0.0(eslint@9.39.2(jiti@1.21.7)): + eslint-merge-processors@2.0.0(eslint@10.0.2(jiti@1.21.7)): dependencies: - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) - eslint-plugin-antfu@3.1.3(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-antfu@3.2.2(eslint@10.0.2(jiti@1.21.7)): dependencies: - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) - eslint-plugin-better-tailwindcss@https://pkg.pr.new/hyoban/eslint-plugin-better-tailwindcss@c0161c7(eslint@9.39.2(jiti@1.21.7))(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2))(typescript@5.9.3): + eslint-plugin-better-tailwindcss@4.3.1(eslint@10.0.2(jiti@1.21.7))(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2))(typescript@5.9.3): dependencies: - '@eslint/css-tree': 3.6.8 + '@eslint/css-tree': 3.6.9 '@valibot/to-json-schema': 1.5.0(valibot@1.2.0(typescript@5.9.3)) - enhanced-resolve: 5.18.4 + enhanced-resolve: 5.19.0 jiti: 2.6.1 synckit: 0.11.12 tailwind-csstree: 0.1.4 @@ -12128,71 +12152,75 @@ snapshots: tsconfig-paths-webpack-plugin: 4.2.0 valibot: 1.2.0(typescript@5.9.3) optionalDependencies: - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) transitivePeerDependencies: - typescript - eslint-plugin-command@3.4.0(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-command@3.5.2(@typescript-eslint/rule-tester@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3))(@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7)): dependencies: - '@es-joy/jsdoccomment': 0.78.0 - eslint: 9.39.2(jiti@1.21.7) + '@es-joy/jsdoccomment': 0.84.0 + '@typescript-eslint/rule-tester': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) - eslint-plugin-es-x@7.8.0(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-es-x@7.8.0(eslint@10.0.2(jiti@1.21.7)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.2 - eslint: 9.39.2(jiti@1.21.7) - eslint-compat-utils: 0.5.1(eslint@9.39.2(jiti@1.21.7)) + eslint: 10.0.2(jiti@1.21.7) + eslint-compat-utils: 0.5.1(eslint@10.0.2(jiti@1.21.7)) - eslint-plugin-hyoban@0.11.1(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-hyoban@0.11.2(eslint@10.0.2(jiti@1.21.7)): dependencies: - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) + fast-string-width: 3.0.2 - eslint-plugin-import-lite@0.5.0(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-import-lite@0.5.2(eslint@10.0.2(jiti@1.21.7)): dependencies: - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) - eslint-plugin-jsdoc@62.4.1(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-jsdoc@62.7.1(eslint@10.0.2(jiti@1.21.7)): dependencies: - '@es-joy/jsdoccomment': 0.83.0 + '@es-joy/jsdoccomment': 0.84.0 '@es-joy/resolve.exports': 1.2.0 are-docs-informative: 0.0.2 comment-parser: 1.4.5 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) espree: 11.1.0 esquery: 1.7.0 html-entities: 2.6.0 object-deep-merge: 2.0.0 parse-imports-exports: 0.2.4 - semver: 7.7.3 + semver: 7.7.4 spdx-expression-parse: 4.0.0 to-valid-identifier: 1.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.21.0(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-jsonc@3.1.1(eslint@10.0.2(jiti@1.21.7)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7)) - diff-sequences: 27.5.1 - eslint: 9.39.2(jiti@1.21.7) - eslint-compat-utils: 0.6.5(eslint@9.39.2(jiti@1.21.7)) - eslint-json-compat-utils: 0.2.1(eslint@9.39.2(jiti@1.21.7))(jsonc-eslint-parser@2.4.2) - espree: 10.4.0 - graphemer: 1.4.0 - jsonc-eslint-parser: 2.4.2 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@1.21.7)) + '@eslint/core': 1.0.1 + '@eslint/plugin-kit': 0.6.0 + '@ota-meshi/ast-token-store': 0.3.0 + diff-sequences: 29.6.3 + eslint: 10.0.2(jiti@1.21.7) + eslint-json-compat-utils: 0.2.1(eslint@10.0.2(jiti@1.21.7))(jsonc-eslint-parser@3.1.0) + jsonc-eslint-parser: 3.1.0 natural-compare: 1.4.0 synckit: 0.11.12 transitivePeerDependencies: - '@eslint/json' - eslint-plugin-n@17.23.2(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7)) - enhanced-resolve: 5.18.4 - eslint: 9.39.2(jiti@1.21.7) - eslint-plugin-es-x: 7.8.0(eslint@9.39.2(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@1.21.7)) + enhanced-resolve: 5.19.0 + eslint: 10.0.2(jiti@1.21.7) + eslint-plugin-es-x: 7.8.0(eslint@10.0.2(jiti@1.21.7)) get-tsconfig: 4.13.0 globals: 15.15.0 globrex: 0.1.2 @@ -12204,199 +12232,200 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-perfectionist@5.4.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + eslint-plugin-perfectionist@5.6.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-pnpm@1.5.0(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-pnpm@1.6.0(eslint@10.0.2(jiti@1.21.7)): dependencies: empathic: 2.0.0 - eslint: 9.39.2(jiti@1.21.7) - jsonc-eslint-parser: 2.4.2 + eslint: 10.0.2(jiti@1.21.7) + jsonc-eslint-parser: 3.1.0 pathe: 2.0.3 - pnpm-workspace-yaml: 1.5.0 + pnpm-workspace-yaml: 1.6.0 tinyglobby: 0.2.15 yaml: 2.8.2 yaml-eslint-parser: 2.0.0 - eslint-plugin-react-dom@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + eslint-plugin-react-dom@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/core': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) compare-versions: 6.1.1 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks-extra@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + eslint-plugin-react-hooks-extra@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/core': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@eslint-react/ast': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-react-hooks@7.0.1(eslint@10.0.2(jiti@1.21.7)): dependencies: '@babel/core': 7.28.6 '@babel/parser': 7.28.6 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) hermes-parser: 0.25.1 zod: 4.3.6 zod-validation-error: 4.0.2(zod@4.3.6) transitivePeerDependencies: - supports-color - eslint-plugin-react-naming-convention@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + eslint-plugin-react-naming-convention@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/core': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) compare-versions: 6.1.1 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) string-ts: 2.3.1 ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-refresh@0.5.0(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-react-refresh@0.5.2(eslint@10.0.2(jiti@1.21.7)): dependencies: - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) - eslint-plugin-react-rsc@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + eslint-plugin-react-rsc@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@eslint-react/ast': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-web-api@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + eslint-plugin-react-web-api@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/core': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) birecord: 0.1.1 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-x@2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + eslint-plugin-react-x@2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/core': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/eff': 2.13.0 + '@eslint-react/shared': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) compare-versions: 6.1.1 - eslint: 9.39.2(jiti@1.21.7) - is-immutable-type: 5.0.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) + is-immutable-type: 5.0.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) ts-api-utils: 2.4.0(typescript@5.9.3) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-regexp@2.10.0(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-regexp@3.0.0(eslint@10.0.2(jiti@1.21.7)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.2 comment-parser: 1.4.5 - eslint: 9.39.2(jiti@1.21.7) - jsdoc-type-pratt-parser: 4.8.0 + eslint: 10.0.2(jiti@1.21.7) + jsdoc-type-pratt-parser: 7.1.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-sonarjs@3.0.6(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-sonarjs@4.0.0(eslint@10.0.2(jiti@1.21.7)): dependencies: '@eslint-community/regexpp': 4.12.2 builtin-modules: 3.3.0 bytes: 3.1.2 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) functional-red-black-tree: 1.0.1 + globals: 17.3.0 jsx-ast-utils-x: 0.1.0 lodash.merge: 4.6.2 - minimatch: 10.1.1 + minimatch: 10.2.1 scslre: 0.3.0 - semver: 7.7.3 + semver: 7.7.4 + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 - eslint-plugin-storybook@10.2.6(eslint@9.39.2(jiti@1.21.7))(storybook@10.2.0(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3): + eslint-plugin-storybook@10.2.13(eslint@10.0.2(jiti@1.21.7))(storybook@10.2.0(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@typescript-eslint/utils': 8.54.0(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) storybook: 10.2.0(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-toml@1.0.3(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-toml@1.3.0(eslint@10.0.2(jiti@1.21.7)): dependencies: '@eslint/core': 1.0.1 - '@eslint/plugin-kit': 0.5.1 + '@eslint/plugin-kit': 0.6.0 + '@ota-meshi/ast-token-store': 0.3.0 debug: 4.4.3 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) toml-eslint-parser: 1.0.3 transitivePeerDependencies: - supports-color - eslint-plugin-unicorn@62.0.0(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-unicorn@63.0.0(eslint@10.0.2(jiti@1.21.7)): dependencies: '@babel/helper-validator-identifier': 7.28.5 - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7)) - '@eslint/plugin-kit': 0.4.1 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@1.21.7)) change-case: 5.4.4 ci-info: 4.3.1 clean-regexp: 1.0.0 core-js-compat: 3.48.0 - eslint: 9.39.2(jiti@1.21.7) - esquery: 1.7.0 + eslint: 10.0.2(jiti@1.21.7) find-up-simple: 1.0.1 globals: 16.5.0 indent-string: 5.0.0 @@ -12408,43 +12437,44 @@ snapshots: semver: 7.7.3 strip-indent: 4.1.1 - eslint-plugin-unused-imports@4.3.0(@typescript-eslint/eslint-plugin@8.53.1(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7)): dependencies: - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.53.1(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) - eslint-plugin-vue@10.7.0(@stylistic/eslint-plugin@5.7.1(eslint@9.39.2(jiti@1.21.7)))(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@1.21.7))): + eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@https://pkg.pr.new/@stylistic/eslint-plugin@258f9d8(eslint@10.0.2(jiti@1.21.7)))(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3))(eslint@10.0.2(jiti@1.21.7))(vue-eslint-parser@10.4.0(eslint@10.0.2(jiti@1.21.7))): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7)) - eslint: 9.39.2(jiti@1.21.7) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@1.21.7)) + eslint: 10.0.2(jiti@1.21.7) natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 7.1.1 semver: 7.7.3 - vue-eslint-parser: 10.2.0(eslint@9.39.2(jiti@1.21.7)) + vue-eslint-parser: 10.4.0(eslint@10.0.2(jiti@1.21.7)) xml-name-validator: 4.0.0 optionalDependencies: - '@stylistic/eslint-plugin': 5.7.1(eslint@9.39.2(jiti@1.21.7)) - '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@stylistic/eslint-plugin': https://pkg.pr.new/@stylistic/eslint-plugin@258f9d8(eslint@10.0.2(jiti@1.21.7)) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) - eslint-plugin-yml@3.0.0(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-yml@3.3.0(eslint@10.0.2(jiti@1.21.7)): dependencies: '@eslint/core': 1.0.1 - '@eslint/plugin-kit': 0.5.1 + '@eslint/plugin-kit': 0.6.0 + '@ota-meshi/ast-token-store': 0.3.0 debug: 4.4.3 diff-sequences: 29.6.3 escape-string-regexp: 5.0.0 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) natural-compare: 1.4.0 yaml-eslint-parser: 2.0.0 transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@1.21.7)): + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.27)(eslint@10.0.2(jiti@1.21.7)): dependencies: '@vue/compiler-sfc': 3.5.27 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) eslint-scope@5.1.1: dependencies: @@ -12457,12 +12487,58 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 + eslint-scope@9.1.1: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 + esrecurse: 4.3.0 + estraverse: 5.3.0 + eslint-visitor-keys@3.4.3: {} eslint-visitor-keys@4.2.1: {} eslint-visitor-keys@5.0.0: {} + eslint-visitor-keys@5.0.1: {} + + eslint@10.0.2(jiti@1.21.7): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.2 + '@eslint/config-helpers': 0.5.2 + '@eslint/core': 1.1.0 + '@eslint/plugin-kit': 0.6.0 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.1 + eslint-visitor-keys: 5.0.1 + espree: 11.1.1 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.4 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + eslint@9.27.0(jiti@1.21.7): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.27.0(jiti@1.21.7)) @@ -12505,47 +12581,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.39.2(jiti@1.21.7): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7)) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.2 - '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.7 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.7.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 1.21.7 - transitivePeerDependencies: - - supports-color - espree@10.4.0: dependencies: acorn: 8.15.0 @@ -12558,11 +12593,11 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 5.0.0 - espree@9.6.1: + espree@11.1.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 3.4.3 + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 esprima@4.0.1: {} @@ -12676,6 +12711,12 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + fast-uri@3.1.0: optional: true @@ -12817,7 +12858,7 @@ snapshots: globals@16.5.0: {} - globals@17.1.0: {} + globals@17.3.0: {} globrex@0.1.2: {} @@ -12827,8 +12868,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - hachure-fill@0.5.2: {} has-flag@4.0.0: {} @@ -13141,10 +13180,10 @@ snapshots: is-hexadecimal@2.0.1: {} - is-immutable-type@5.0.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + is-immutable-type@5.0.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3): dependencies: - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.2(jiti@1.21.7) + '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.0.2(jiti@1.21.7) ts-api-utils: 2.4.0(typescript@5.9.3) ts-declaration-location: 1.0.7(typescript@5.9.3) typescript: 5.9.3 @@ -13228,12 +13267,10 @@ snapshots: dependencies: argparse: 2.0.1 - jsdoc-type-pratt-parser@4.8.0: {} - - jsdoc-type-pratt-parser@7.0.0: {} - jsdoc-type-pratt-parser@7.1.0: {} + jsdoc-type-pratt-parser@7.1.1: {} + jsdom-testing-mocks@1.16.0: dependencies: bezier-easing: 2.1.0 @@ -13286,11 +13323,10 @@ snapshots: json5@2.2.3: {} - jsonc-eslint-parser@2.4.2: + jsonc-eslint-parser@3.1.0: dependencies: acorn: 8.15.0 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-visitor-keys: 5.0.0 semver: 7.7.3 jsonfile@6.2.0: @@ -14013,6 +14049,14 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.2.1: + dependencies: + brace-expansion: 2.0.2 + + minimatch@10.2.4: + dependencies: + brace-expansion: 2.0.2 + minimatch@3.1.2: dependencies: brace-expansion: 2.0.2 @@ -14351,7 +14395,7 @@ snapshots: pngjs@7.0.0: optional: true - pnpm-workspace-yaml@1.5.0: + pnpm-workspace-yaml@1.6.0: dependencies: yaml: 2.8.2 @@ -15012,6 +15056,8 @@ snapshots: semver@7.7.3: {} + semver@7.7.4: {} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -15383,7 +15429,7 @@ snapshots: terser@5.46.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 optional: true @@ -15479,7 +15525,7 @@ snapshots: tsconfig-paths-webpack-plugin@4.2.0: dependencies: chalk: 4.1.2 - enhanced-resolve: 5.18.4 + enhanced-resolve: 5.19.0 tapable: 2.3.0 tsconfig-paths: 4.2.0 @@ -15791,13 +15837,13 @@ snapshots: vscode-uri@3.1.0: {} - vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@1.21.7)): + vue-eslint-parser@10.4.0(eslint@10.0.2(jiti@1.21.7)): dependencies: debug: 4.4.3 - eslint: 9.39.2(jiti@1.21.7) + eslint: 10.0.2(jiti@1.21.7) eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 + eslint-visitor-keys: 5.0.0 + espree: 11.1.0 esquery: 1.7.0 semver: 7.7.3 transitivePeerDependencies: @@ -15836,8 +15882,8 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.15.0 - acorn-import-phases: 1.0.4(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.19.0