diff --git a/Caddyfile b/Caddyfile index 85d33dc..4e470e6 100644 --- a/Caddyfile +++ b/Caddyfile @@ -22,6 +22,7 @@ } handle /api/* { + uri strip_prefix /api reverse_proxy api:8902 } } \ No newline at end of file diff --git a/backend/api/__init__.py b/backend/api/__init__.py index dce3c46..2d5ccb5 100644 --- a/backend/api/__init__.py +++ b/backend/api/__init__.py @@ -1,12 +1,10 @@ -from sanic import Blueprint +from litestar import Router -from api.info import info_blueprint -from api.status import status_blueprint -from api.tools import tools_blueprint +from .v1 import V1_ROUTER -api_blueprint = Blueprint.group( - info_blueprint, - status_blueprint, - tools_blueprint, - url_prefix="/api", +API_ROUTER = Router( + path="/", + route_handlers=[ + V1_ROUTER, + ], ) diff --git a/backend/api/info.py b/backend/api/info.py deleted file mode 100644 index 54f755b..0000000 --- a/backend/api/info.py +++ /dev/null @@ -1,123 +0,0 @@ -from datetime import datetime -from enum import IntEnum -from typing import Dict, Literal, Optional - -from pydantic import Field -from pymongo.collection import Collection -from sanic import Blueprint, HTTPResponse, Request -from sspeedup.api import CODE, sanic_response_json -from sspeedup.data_validation import BaseModel, sanic_inject_pydantic_model -from sspeedup.dict_helper import filter_null_value -from yaml import safe_load - -from utils.db import ( - JPEP_FTN_market_db, - LP_collections_db, - article_FP_rank_db, - lottery_db, -) - -DB_STRING_TO_OBJ: Dict[str, Collection] = { - "article_FP_rank": article_FP_rank_db, - "lottery": lottery_db, - "LP_collections": LP_collections_db, - "JPEP_FTN_market": JPEP_FTN_market_db, -} - -with open("tools_info.yaml", encoding="utf-8") as file: - TOOLS_INFO = safe_load(file) - -info_blueprint = Blueprint("info", url_prefix="/info") - - -def get_data_update_time( - db: str, key: str, sort_direction: Literal["asc", "desc"] -) -> Optional[datetime]: - db_result = ( - DB_STRING_TO_OBJ[db] - .find() - .sort(key, {"asc": 1, "desc": -1}[sort_direction]) - .limit(1) - ) - - try: - return db_result.next()[key] - except StopIteration: - return None - - -def get_data_count(db: str) -> int: - return DB_STRING_TO_OBJ[db].estimated_document_count() - - -class InfoStatus(IntEnum): - NORMAL = 0 - UNAVALIABLE = 1 - DOWNGRADED = 2 - - -class InfoItem(BaseModel): - status: InfoStatus = Field(InfoStatus, strict=False) - reason: str - enable_data_update_time: bool - enable_data_count: bool - db: Optional[str] = None - data_update_time_key: Optional[str] = None - data_update_time_sort_direction: Optional[Literal["asc", "desc"]] = None - data_update_freq_desc: Optional[str] = None - data_source: Optional[Dict[str, str]] = None - - -class InfoRequest(BaseModel): - tool_slug: str - - -class InfoResponse(BaseModel): - status: InfoStatus = Field(InfoStatus, strict=False) - reason: Optional[str] = None - data_update_time: Optional[int] = None - data_update_freq_desc: Optional[str] = None - data_count: Optional[int] = None - data_source: Optional[Dict[str, str]] = None - - -@info_blueprint.get("/") -@sanic_inject_pydantic_model(InfoRequest, source="query_args") -def info_handler(request: Request, data: InfoRequest) -> HTTPResponse: - del request - - if data.tool_slug not in TOOLS_INFO: - return sanic_response_json(code=CODE.BAD_ARGUMENTS, message="小工具不存在") - - info = InfoItem(**TOOLS_INFO[data.tool_slug]) - - status = info.status - reason = info.reason if len(info.reason) != 0 else None - data_update_time = ( - get_data_update_time( - info.db, # type: ignore - info.data_update_time_key, # type: ignore - info.data_update_time_sort_direction, # type: ignore - ) - if info.enable_data_update_time - else None - ) - data_count = get_data_count(info.db) if info.enable_data_count else None # type: ignore - data_update_freq_desc = info.data_update_freq_desc - data_source = info.data_source - - return sanic_response_json( - code=CODE.SUCCESS, - data=filter_null_value( - InfoResponse( - status=status, - reason=reason, - data_update_time=int(data_update_time.timestamp()) - if data_update_time is not None - else None, - data_count=data_count, - data_update_freq_desc=data_update_freq_desc, - data_source=data_source, - ).model_dump() - ), - ) diff --git a/backend/api/status.py b/backend/api/status.py deleted file mode 100644 index b76c775..0000000 --- a/backend/api/status.py +++ /dev/null @@ -1,65 +0,0 @@ -from enum import IntEnum -from typing import Dict, List, Literal, Optional - -from pydantic import Field -from sanic import Blueprint, HTTPResponse, Request -from sspeedup.api import CODE, sanic_response_json -from sspeedup.data_validation import BaseModel -from yaml import safe_load - -from utils.config import config - -status_blueprint = Blueprint("status", url_prefix="/status") - - -class InfoStatus(IntEnum): - NORMAL = 0 - UNAVALIABLE = 1 - DOWNGRADED = 2 - - -class InfoItem(BaseModel): - status: InfoStatus = Field(InfoStatus, strict=False) - reason: str - enable_data_update_time: bool - enable_data_count: bool - db: Optional[str] = None - data_update_time_key: Optional[str] = None - data_update_time_sort_direction: Optional[Literal["asc", "desc"]] = None - data_update_freq_desc: Optional[str] = None - data_source: Optional[Dict[str, str]] = None - - -with open("tools_info.yaml", encoding="utf-8") as file: - TOOLS_INFO = {key: InfoItem(**value) for key, value in safe_load(file).items()} - - -class StatusResponse(BaseModel): - version: str - downgraded_tools: List[str] - unavaliable_tools: List[str] - - -@status_blueprint.get("/") -def status_handler(request: Request) -> HTTPResponse: - del request - - version: str = config.version - downgraded_tools = [ - key - for key, value in TOOLS_INFO.items() - if value.status == InfoStatus.DOWNGRADED - ] - unavaliable_tools = [ - key - for key, value in TOOLS_INFO.items() - if value.status == InfoStatus.UNAVALIABLE - ] - return sanic_response_json( - code=CODE.SUCCESS, - data=StatusResponse( - version=version, - downgraded_tools=downgraded_tools, - unavaliable_tools=unavaliable_tools, - ).model_dump(), - ) diff --git a/backend/api/tools/JPEP_FTN_macket_analyzer.py b/backend/api/tools/JPEP_FTN_macket_analyzer.py deleted file mode 100644 index 7fdfb05..0000000 --- a/backend/api/tools/JPEP_FTN_macket_analyzer.py +++ /dev/null @@ -1,409 +0,0 @@ -from datetime import datetime, timedelta # noqa: N999 -from typing import Dict, Literal - -from httpx import Client -from sanic import Blueprint, HTTPResponse, Request -from sspeedup.api import CODE, sanic_response_json -from sspeedup.cache.timeout import timeout_cache -from sspeedup.data_validation import BaseModel, sanic_inject_pydantic_model -from sspeedup.time_helper import get_start_time - -from utils.db import JPEP_FTN_market_db - -TEXT_TO_TIMEDELTA: Dict[str, timedelta] = { - "6h": timedelta(hours=6), - "24h": timedelta(hours=24), - "7d": timedelta(days=7), - "15d": timedelta(days=15), - "30d": timedelta(days=30), -} - -HTTP_CLIENT = Client() - -JPEP_FTN_market_analyzer_blueprint = Blueprint( - "JPEP_FTN_market_analyzer", url_prefix="/JPEP_FTN_market_analyzer" -) - - -@timeout_cache(60) -def get_data_update_time() -> datetime: - return ( - JPEP_FTN_market_db.find( - {}, - { - "_id": 0, - "fetch_time": 1, - }, - ) - .sort("fetch_time", -1) - .limit(1) - .next()["fetch_time"] - ) - - -def get_price(type_: Literal["buy", "sell"], time: datetime) -> float: - try: - return ( - JPEP_FTN_market_db.find( - { - "fetch_time": time, - "trade_type": type_, - "amount.tradable": {"$ne": 0}, - } - ) - .sort("price", 1 if type_ == "buy" else -1) - .limit(1) - .next()["price"] - ) - except StopIteration: # 该侧没有挂单 - return 0.0 - - -def get_pool_amount(type_: Literal["buy", "sell"], time: datetime) -> int: - try: - return JPEP_FTN_market_db.aggregate( - [ - { - "$match": { - "fetch_time": time, - "trade_type": type_, - } - }, - { - "$group": { - "_id": None, - "sum": { - "$sum": "$amount.tradable", - }, - }, - }, - ] - ).next()["sum"] - except StopIteration: # 该侧没有挂单 - return 0 - - -def get_price_trend_data( - type_: Literal["buy", "sell"], td: timedelta -) -> Dict[str, float]: - unit = "hour" if td <= timedelta(days=1) else "day" - - db_result = JPEP_FTN_market_db.aggregate( - [ - { - "$match": { - "fetch_time": { - "$gte": get_start_time(td), - }, - "trade_type": type_, - } - }, - { - "$group": { - "_id": ( - { - "$dateTrunc": { - "date": "$fetch_time", - "unit": unit, - }, - } - ) - if td >= timedelta(hours=24) - else "$fetch_time", - "price": { - "$min" if type_ == "buy" else "$max": "$price", - }, - } - }, - { - "$sort": { - "_id": 1, - }, - }, - ] - ) - - if unit == "hour": - return { - item["_id"].strftime(r"%m-%d %I:%M"): item["price"] for item in db_result - } - - return {item["_id"].strftime(r"%m-%d"): item["price"] for item in db_result} - - -def get_pool_amount_trend_data( - type_: Literal["buy", "sell"], td: timedelta -) -> Dict[str, float]: - unit = "hour" if td <= timedelta(days=1) else "day" - - db_result = JPEP_FTN_market_db.aggregate( - [ - { - "$match": { - "trade_type": type_, - "fetch_time": { - "$gte": get_start_time(td), - }, - }, - }, - { - "$group": { - "_id": "$fetch_time", - "amount": { - "$sum": "$amount.tradable", - }, - }, - }, - { - "$group": { - "_id": ( - { - "$dateTrunc": { - "date": "$_id", - "unit": "hour", - }, - } - ) - if td >= timedelta(hours=24) - else "$_id", - "amount": { - "$avg": "$amount", - }, - }, - }, - { - "$sort": { - "_id": 1, - }, - }, - ] - ) - - if unit == "hour": - return { - item["_id"].strftime(r"%m-%d %I:%M"): round(item["amount"]) - for item in db_result - } - - return { - item["_id"].strftime(r"%m-%d"): round(item["amount"], 2) for item in db_result - } - - -def get_per_price_amount_data( - type_: Literal["buy", "sell"], time: datetime -) -> Dict[float, int]: - db_result = JPEP_FTN_market_db.aggregate( - [ - { - "$match": { - "fetch_time": time, - "trade_type": type_, - }, - }, - { - "$group": { - "_id": "$price", - "amount": { - "$sum": "$amount.tradable", - }, - }, - }, - { - "$match": { - "amount": { - "$ne": 0, - }, - }, - }, - { - "$sort": { - "_id": 1 if type_ == "buy" else -1, - }, - }, - { - "$limit": 10, - }, - ] - ) - - return {item["_id"]: item["amount"] for item in db_result} - - -class DataUpdateTimeResponse(BaseModel): - data_update_time: int - - -@JPEP_FTN_market_analyzer_blueprint.get("/data_update_time") -def data_update_time_handler(request: Request) -> HTTPResponse: - del request - - data_update_time = get_data_update_time() - - return sanic_response_json( - code=CODE.SUCCESS, - data=DataUpdateTimeResponse( - data_update_time=int(data_update_time.timestamp()) - ).model_dump(), - ) - - -class PriceResponse(BaseModel): - buy_price: float - sell_price: float - - -@JPEP_FTN_market_analyzer_blueprint.get("/price") -def price_handler(request: Request) -> HTTPResponse: - del request - - data_update_time = get_data_update_time() - - buy_price = get_price("buy", data_update_time) - sell_price = get_price("sell", data_update_time) - - return sanic_response_json( - code=CODE.SUCCESS, - data=PriceResponse(buy_price=buy_price, sell_price=sell_price).model_dump(), - ) - - -class PoolAmountResponse(BaseModel): - buy_amount: int - sell_amount: int - - -@JPEP_FTN_market_analyzer_blueprint.get("/pool_amount") -def pool_amount_handler(request: Request) -> HTTPResponse: - del request - - data_update_time = get_data_update_time() - - buy_amount = get_pool_amount("buy", data_update_time) - sell_amount = get_pool_amount("sell", data_update_time) - - return sanic_response_json( - code=CODE.SUCCESS, - data=PoolAmountResponse( - buy_amount=buy_amount, sell_amount=sell_amount - ).model_dump(), - ) - - -class JPEPRulesResponse(BaseModel): - buy_order_minimum_price: float - sell_order_minimum_price: float - trade_fee_percent: float - - -@JPEP_FTN_market_analyzer_blueprint.get("/JPEP_rules") -def JPEP_rules_handler(request: Request) -> HTTPResponse: # noqa: N802 - del request - - response = HTTP_CLIENT.post( - "https://20221023.jianshubei.com/api/getList/furnish.setting/1/", - json={ - "fields": "fee,minimum_price,buy_minimum_price", - }, - ) - - response.raise_for_status() - json_data = response.json() - if json_data["code"] != 200: - raise ValueError() - - buy_order_minimum_price = json_data["data"]["buy_minimum_price"] - sell_order_minimum_price = json_data["data"]["minimum_price"] - trade_fee_percent = json_data["data"]["fee"] - - return sanic_response_json( - code=CODE.SUCCESS, - data=JPEPRulesResponse( - buy_order_minimum_price=buy_order_minimum_price, - sell_order_minimum_price=sell_order_minimum_price, - trade_fee_percent=trade_fee_percent, - ).model_dump(), - ) - - -class PriceTrendDataRequest(BaseModel): - time_range: Literal["6h", "24h", "7d", "15d", "30d"] - - -class PriceTrendDataResponse(BaseModel): - buy_trend: Dict[str, float] - sell_trend: Dict[str, float] - - -@JPEP_FTN_market_analyzer_blueprint.get("/price_trend_data") -@sanic_inject_pydantic_model(PriceTrendDataRequest, source="query_args") -def price_trend_data_handler( - request: Request, data: PriceTrendDataRequest -) -> HTTPResponse: - del request - - buy_trend = get_price_trend_data("buy", TEXT_TO_TIMEDELTA[data.time_range]) - sell_trend = get_price_trend_data("sell", TEXT_TO_TIMEDELTA[data.time_range]) - - return sanic_response_json( - code=CODE.SUCCESS, - data=PriceTrendDataResponse( - buy_trend=buy_trend, - sell_trend=sell_trend, - ).model_dump(), - ) - - -class PoolAmountTrendDataRequest(BaseModel): - time_range: Literal["6h", "24h", "7d", "15d", "30d"] - - -class PoolAmountTrendDataResponse(BaseModel): - buy_trend: Dict[str, float] - sell_trend: Dict[str, float] - - -@JPEP_FTN_market_analyzer_blueprint.get("/pool_amount_trend_data") -@sanic_inject_pydantic_model(PoolAmountTrendDataRequest, source="query_args") -def pool_amount_trend_data_handler( - request: Request, data: PoolAmountTrendDataRequest -) -> HTTPResponse: - del request - - buy_trend = get_pool_amount_trend_data("buy", TEXT_TO_TIMEDELTA[data.time_range]) - sell_trend = get_pool_amount_trend_data("sell", TEXT_TO_TIMEDELTA[data.time_range]) - - return sanic_response_json( - code=CODE.SUCCESS, - data=PoolAmountTrendDataResponse( - buy_trend=buy_trend, - sell_trend=sell_trend, - ).model_dump(), - ) - - -class PerPriceAmountRequest(BaseModel): - trade_type: Literal["buy", "sell"] - - -class PerPriceAmountResponse(BaseModel): - per_price_amount_data: Dict[float, int] - - -@JPEP_FTN_market_analyzer_blueprint.get("/per_price_amount_data") -@sanic_inject_pydantic_model(PerPriceAmountRequest, source="query_args") -def per_price_amount_data_handler( - request: Request, data: PerPriceAmountRequest -) -> HTTPResponse: - del request - - data_update_time = get_data_update_time() - - per_price_amount_data = get_per_price_amount_data(data.trade_type, data_update_time) - - return sanic_response_json( - code=CODE.SUCCESS, - data=PerPriceAmountResponse( - per_price_amount_data=per_price_amount_data - ).model_dump(), - ) diff --git a/backend/api/tools/LP_recommend_checker.py b/backend/api/tools/LP_recommend_checker.py deleted file mode 100644 index 1e8037b..0000000 --- a/backend/api/tools/LP_recommend_checker.py +++ /dev/null @@ -1,173 +0,0 @@ -from collections import namedtuple # noqa: N999 -from datetime import datetime, timedelta -from typing import Callable, List, Tuple, Union - -from httpx import Client -from JianshuResearchTools.convert import UserSlugToUserUrl -from JianshuResearchTools.exceptions import InputError, ResourceError -from JianshuResearchTools.objects import Article, set_cache_status -from sanic import Blueprint, HTTPResponse, Request -from sspeedup.api import CODE, sanic_response_json -from sspeedup.cache.timeout import timeout_cache -from sspeedup.data_validation import BaseModel, sanic_inject_pydantic_model - -from utils.db import LP_collections_db, article_FP_rank_db - -set_cache_status(False) - -LP_recommend_checker_blueprint = Blueprint( - "LP_recommend_checker", url_prefix="/LP_recommend_checker" -) -HTTP_CLIENT = Client() -httpx_get = HTTP_CLIENT.get - -CheckResult = namedtuple( - "CheckResult", ["name", "passed", "limit", "operator", "actual"] -) - - -@timeout_cache(3600) -def get_author_url(article_obj: Article) -> str: - response = httpx_get(f"https://www.jianshu.com/asimov/p/{article_obj.slug}") - data = response.json() - return UserSlugToUserUrl(data["user"]["slug"]) - - -def wordage_checker(article_obj: Article) -> CheckResult: - wordage: int = article_obj.wordage - return CheckResult("字数", wordage >= 800, 800, ">=", wordage) - - -def reward_checker(article_obj: Article) -> CheckResult: - reward: float = article_obj.total_FP_count - return CheckResult("收益", reward < 35.0, 35.0, "<", reward) - - -def recommend_by_lp_last_7d_checker(article_obj: Article) -> CheckResult: - author_url: str = get_author_url(article_obj) - recommend_by_lp_last_7d: int = LP_collections_db.count_documents( - { - "author.url": author_url, - "fetch_date": { - "$gt": datetime.now() - timedelta(days=7), - }, - } - ) - return CheckResult( - "作者过去 7 天被 LP 理事会推荐次数", - recommend_by_lp_last_7d == 0, - 0, - "=", - recommend_by_lp_last_7d, - ) - - -def on_rank_last_10d_top30_checker(article_obj: Article) -> CheckResult: - author_url: str = get_author_url(article_obj) - on_rank_last_10d_top30: int = article_FP_rank_db.count_documents( - { - "author.url": author_url, - "date": { - "$gt": datetime.now() - timedelta(days=10), - }, - "ranking": { - "$lte": 30, - }, - } - ) - return CheckResult( - "作者过去 10 天前 30 名次数", on_rank_last_10d_top30 == 0, 0, "=", on_rank_last_10d_top30 - ) - - -def on_rank_last_1m_top30_checker(article_obj: Article) -> CheckResult: - author_url: str = get_author_url(article_obj) - on_rank_last_1m_top30: int = article_FP_rank_db.count_documents( - { - "author.url": author_url, - "date": { - "$gt": datetime.now() - timedelta(days=30), - }, - "ranking": { - "$lte": 30, - }, - } - ) - return CheckResult( - "作者过去 1 个月前 30 名次数", on_rank_last_1m_top30 <= 2, 2, "<=", on_rank_last_1m_top30 - ) - - -CHECK_FUNCS: Tuple[Callable[[Article], CheckResult], ...] = ( - wordage_checker, - reward_checker, - recommend_by_lp_last_7d_checker, - on_rank_last_10d_top30_checker, - on_rank_last_1m_top30_checker, -) - - -class CheckRequest(BaseModel): - article_url: str - - -class CheckItem(BaseModel): - name: str - item_passed: bool - limit_value: Union[int, float] - operator: str - actual_value: Union[int, float] - - -class CheckResponse(BaseModel): - title: str - release_time: int - check_passed: bool - check_items: List[CheckItem] - - -@LP_recommend_checker_blueprint.post("/check") -@sanic_inject_pydantic_model(CheckRequest) -def check_handler(request: Request, data: CheckRequest) -> HTTPResponse: - del request - - if not data.article_url: - return sanic_response_json(code=CODE.BAD_ARGUMENTS, message="请输入文章链接") - - try: - article = Article.from_url(data.article_url) - except InputError: - return sanic_response_json(code=CODE.BAD_ARGUMENTS, message="输入的文章链接无效") - except ResourceError: - return sanic_response_json(code=CODE.BAD_ARGUMENTS, message="文章已被私密、锁定或删除") - - title = article.title - release_time = article.publish_time - - check_passed = True - check_items: List[CheckItem] = [] - for check_func in CHECK_FUNCS: - result = check_func(article) - - if not result.passed: - check_passed = False - - check_items.append( - CheckItem( - name=result.name, - item_passed=result.passed, - limit_value=result.limit, - operator=result.operator, - actual_value=result.actual, - ) - ) - - return sanic_response_json( - code=CODE.SUCCESS, - data=CheckResponse( - title=title, - release_time=int(release_time.timestamp()), - check_passed=check_passed, - check_items=check_items, - ).model_dump(), - ) diff --git a/backend/api/tools/VIP_info_viewer.py b/backend/api/tools/VIP_info_viewer.py deleted file mode 100644 index 397b390..0000000 --- a/backend/api/tools/VIP_info_viewer.py +++ /dev/null @@ -1,59 +0,0 @@ -from datetime import datetime # noqa: N999 -from typing import Optional - -from JianshuResearchTools.exceptions import InputError, ResourceError # noqa: N999 -from JianshuResearchTools.objects import User, set_cache_status -from sanic import Blueprint, HTTPResponse, Request -from sspeedup.api import CODE, sanic_response_json -from sspeedup.data_validation import BaseModel, sanic_inject_pydantic_model - -set_cache_status(False) - -VIP_info_viewer_blueprint = Blueprint("VIP_info_viewer", url_prefix="/VIP_info_viewer") - - -class VIPInfoRequest(BaseModel): - user_url: str - - -class VIPInfoResponse(BaseModel): - name: str - VIP_type: str - VIP_expire_time: Optional[int] = None - - -@VIP_info_viewer_blueprint.post("/VIP_info") -@sanic_inject_pydantic_model(VIPInfoRequest) -def VIP_info_handler( # noqa: N802 - request: Request, data: VIPInfoRequest -) -> HTTPResponse: - del request - - try: - user = User.from_url(data.user_url) - except InputError: - return sanic_response_json(code=CODE.BAD_ARGUMENTS, message="输入的简书个人主页链接无效") - except ResourceError: - return sanic_response_json(code=CODE.BAD_ARGUMENTS, message="用户已注销或被封禁") - - name = user.name - VIP_info = user.VIP_info # noqa: N806 - VIP_type: str = VIP_info["vip_type"] # noqa: N806 - if not VIP_type: - VIP_type = "无会员" # noqa: N806 - VIP_expire_time: datetime = VIP_info["expire_date"] # noqa: N806 - if VIP_expire_time: - VIP_expire_time = VIP_expire_time.replace( # noqa: N806 - hour=0, minute=0, second=0 - ) - - return sanic_response_json( - code=CODE.SUCCESS, - data=VIPInfoResponse( - name=name, - VIP_type=VIP_type, - VIP_expire_time=int(VIP_expire_time.timestamp()) - if VIP_expire_time - else None, - ).model_dump(), - ) diff --git a/backend/api/tools/__init__.py b/backend/api/tools/__init__.py deleted file mode 100644 index dfdfbda..0000000 --- a/backend/api/tools/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -from sanic import Blueprint - -from api.tools.article_wordcloud_generator import article_wordcloud_generator_blueprint -from api.tools.JPEP_FTN_macket_analyzer import JPEP_FTN_market_analyzer_blueprint -from api.tools.lottery_analyzer import lottery_analyzer_blueprint -from api.tools.lottery_reward_record_viewer import ( - lottery_reward_record_viewer_blueprint, -) -from api.tools.LP_recommend_checker import LP_recommend_checker_blueprint -from api.tools.on_rank_article_viewer import on_rank_article_viewer_blueprint -from api.tools.VIP_info_viewer import VIP_info_viewer_blueprint - -tools_blueprint = Blueprint.group( - article_wordcloud_generator_blueprint, - JPEP_FTN_market_analyzer_blueprint, - lottery_analyzer_blueprint, - lottery_reward_record_viewer_blueprint, - LP_recommend_checker_blueprint, - on_rank_article_viewer_blueprint, - VIP_info_viewer_blueprint, - url_prefix="/tools", -) diff --git a/backend/api/tools/article_wordcloud_generator.py b/backend/api/tools/article_wordcloud_generator.py deleted file mode 100644 index 61f3270..0000000 --- a/backend/api/tools/article_wordcloud_generator.py +++ /dev/null @@ -1,55 +0,0 @@ -from typing import Dict - -from JianshuResearchTools.exceptions import InputError, ResourceError -from JianshuResearchTools.objects import Article, set_cache_status -from sanic import Blueprint, HTTPResponse, Request -from sspeedup.ability.word_split.jieba import AbilityJiebaPossegSplitterV1 -from sspeedup.api import CODE, sanic_response_json -from sspeedup.data_validation import BaseModel, sanic_inject_pydantic_model - -from utils.config import config - -set_cache_status(False) - -splitter = AbilityJiebaPossegSplitterV1( - host=config.word_split_ability.host, - port=config.word_split_ability.port, - allowed_word_types_file="wordcloud_assets/allowed_word_types.txt", -) - -article_wordcloud_generator_blueprint = Blueprint( - "article_wordcloud_generator", url_prefix="/article_wordcloud_generator" -) - - -class WordFreqDataRequest(BaseModel): - article_url: str - - -class WordFreqDataResponse(BaseModel): - title: str - word_freq: Dict[str, int] - - -@article_wordcloud_generator_blueprint.post("/word_freq_data") -@sanic_inject_pydantic_model(WordFreqDataRequest) -def word_freq_data_handler(request: Request, data: WordFreqDataRequest) -> HTTPResponse: - del request - - if not data.article_url: - return sanic_response_json(code=CODE.BAD_ARGUMENTS, message="请输入文章链接") - - try: - article = Article.from_url(data.article_url) - except InputError: - return sanic_response_json(code=CODE.BAD_ARGUMENTS, message="输入的文章链接无效") - except ResourceError: - return sanic_response_json(code=CODE.BAD_ARGUMENTS, message="文章已被私密、锁定或删除") - - title = article.title - word_freq = dict(splitter.get_word_freq(article.text).most_common(100)) - - return sanic_response_json( - code=CODE.SUCCESS, - data=WordFreqDataResponse(title=title, word_freq=word_freq).model_dump(), - ) diff --git a/backend/api/tools/lottery_analyzer.py b/backend/api/tools/lottery_analyzer.py deleted file mode 100644 index 7a6aea5..0000000 --- a/backend/api/tools/lottery_analyzer.py +++ /dev/null @@ -1,245 +0,0 @@ -from datetime import timedelta -from typing import Dict, List, Literal, Optional - -from sanic import Blueprint, HTTPResponse, Request -from sspeedup.api import CODE, sanic_response_json -from sspeedup.data_validation import BaseModel, sanic_inject_pydantic_model -from sspeedup.time_helper import get_start_time - -from utils.db import lottery_db - -REWARDS: Dict[str, str] = { - "收益加成卡100": "收益加成卡 100", - "收益加成卡1万": "收益加成卡 1 万", - "四叶草徽章": "四叶草徽章", - "锦鲤头像框1年": "锦鲤头像框 1 年", -} - -TEXT_TO_TIMEDELTA: Dict[str, Optional[timedelta]] = { - "1d": timedelta(days=1), - "7d": timedelta(days=7), - "30d": timedelta(days=30), - "all": None, -} - -lottery_analyzer_blueprint = Blueprint( - "lottery_analyzer", url_prefix="/lottery_analyzer" -) - - -def get_all_rewards_wins_count(td: Optional[timedelta]) -> Dict[str, int]: - db_result = lottery_db.aggregate( - [ - { - "$match": { - "time": { - "$gte": get_start_time(td), - }, - }, - }, - { - "$group": { - "_id": "$reward_name", - "count": { - "$sum": 1, - }, - }, - }, - ] - ) - - result = {key: 0 for key in REWARDS.values()} - result.update({REWARDS[item["_id"]]: item["count"] for item in db_result}) - return result - - -def get_all_rewards_winners_count(td: Optional[timedelta]) -> Dict[str, int]: - result: Dict[str, int] = {} - - for reward_name_without_whitespace, reward_name_with_whitespace in REWARDS.items(): - db_result = len( - lottery_db.distinct( - "user.id", - { - "reward_name": reward_name_without_whitespace, - "time": { - "$gte": get_start_time(td), - }, - }, - ) - ) - result[reward_name_with_whitespace] = db_result - - return result - - -def get_average_wins_count_per_winner( - wins_count: Dict[str, int], winners_count: Dict[str, int] -) -> Dict[str, float]: - result: Dict[str, float] = {} - for reward_name, item_wins_count in wins_count.items(): - # 如果该奖项无人中奖,将平均每人中奖次数设为 0 - if item_wins_count == 0: - result[reward_name] = 0.0 - continue - - result[reward_name] = round(item_wins_count / winners_count[reward_name], 3) - - return result - - -def get_winning_rate(wins_count: Dict[str, int]) -> Dict[str, float]: - total_wins_count = sum(wins_count.values()) - return { - key: round(value / total_wins_count, 5) for key, value in wins_count.items() - } - - -def get_reward_rarity(winning_rate: Dict[str, float]) -> Dict[str, float]: - result = { - key: (1 / value if value != 0 else 0.0) for key, value in winning_rate.items() - } - - # 如果可能,使用收益加成卡 100 的中奖率修正其它结果 - scale: float = 1 / result.get("收益加成卡 100", 1.0) - - return {key: round(value * scale, 3) for key, value in result.items()} - - -def get_period_wins_count(td: Optional[timedelta]) -> Dict[str, int]: - if not td: - raise ValueError("不允许获取全部时间的中奖次数数据") - - unit = "hour" if td <= timedelta(days=1) else "day" - - db_result = lottery_db.aggregate( - [ - { - "$match": { - "time": { - "$gt": get_start_time(td), - }, - } - }, - { - "$group": { - "_id": { - "$dateTrunc": { - "date": "$time", - "unit": unit, - }, - }, - "count": { - "$sum": 1, - }, - } - }, - { - "$sort": { - "_id": 1, - }, - }, - ] - ) - if unit == "hour": - return { - item["_id"].strftime(r"%m-%d %I:%M"): item["count"] for item in db_result - } - - return {item["_id"].strftime(r"%m-%d"): item["count"] for item in db_result} - - -class PerPrizeDataRequest(BaseModel): - time_range: Literal["1d", "7d", "30d", "all"] - - -class PerPrizeDataItem(BaseModel): - reward_name: str - wins_count: int - winners_count: int - average_wins_count_per_winner: float - winning_rate: float - rarity: float - - -class PerPrizeDataResponse(BaseModel): - rewards: List[PerPrizeDataItem] - - -@lottery_analyzer_blueprint.get("/per_prize_data") -@sanic_inject_pydantic_model(PerPrizeDataRequest, source="query_args") -def per_prize_data_handler(request: Request, data: PerPrizeDataRequest) -> HTTPResponse: - del request - - wins_count = get_all_rewards_wins_count(TEXT_TO_TIMEDELTA[data.time_range]) - winners_count = get_all_rewards_winners_count(TEXT_TO_TIMEDELTA[data.time_range]) - average_wins_count_per_winner = get_average_wins_count_per_winner( - wins_count, winners_count - ) - winning_rate = get_winning_rate(wins_count) - rarity = get_reward_rarity(winning_rate) - - rewards: List[PerPrizeDataItem] = [] - for reward_name in REWARDS.values(): - rewards.append( - PerPrizeDataItem( - reward_name=reward_name, - wins_count=wins_count[reward_name], - winners_count=winners_count[reward_name], - average_wins_count_per_winner=average_wins_count_per_winner[ - reward_name - ], - winning_rate=winning_rate[reward_name], - rarity=rarity[reward_name], - ) - ) - - return sanic_response_json( - code=CODE.SUCCESS, data=PerPrizeDataResponse(rewards=rewards).model_dump() - ) - - -class RewardWinsCountDataRequest(BaseModel): - time_range: Literal["1d", "7d", "30d", "all"] - - -class RewardWinsCountDataResponse(BaseModel): - wins_count_data: Dict[str, int] - - -@lottery_analyzer_blueprint.get("/reward_wins_count_data") -@sanic_inject_pydantic_model(RewardWinsCountDataRequest, source="query_args") -def reward_wins_count_data_handler( - request: Request, data: RewardWinsCountDataRequest -) -> HTTPResponse: - del request - - wins_count_data = get_all_rewards_wins_count(TEXT_TO_TIMEDELTA[data.time_range]) - - return sanic_response_json( - code=CODE.SUCCESS, - data=RewardWinsCountDataResponse(wins_count_data=wins_count_data).model_dump(), - ) - - -class RewardWinsDataRequest(BaseModel): - time_range: Literal["1d", "7d", "30d"] - - -class RewardWinsDataResponse(BaseModel): - trend_data: Dict[str, int] - - -@lottery_analyzer_blueprint.get("/reward_wins_trend_data") -@sanic_inject_pydantic_model(RewardWinsDataRequest, source="query_args") -def reward_wins_trend_data_handler( - request: Request, data: RewardWinsDataRequest -) -> HTTPResponse: - del request - - trend_data = get_period_wins_count(TEXT_TO_TIMEDELTA[data.time_range]) - - return sanic_response_json( - code=CODE.SUCCESS, - data=RewardWinsDataResponse(trend_data=trend_data).model_dump(), - ) diff --git a/backend/api/tools/lottery_reward_record_viewer.py b/backend/api/tools/lottery_reward_record_viewer.py deleted file mode 100644 index a2578a4..0000000 --- a/backend/api/tools/lottery_reward_record_viewer.py +++ /dev/null @@ -1,89 +0,0 @@ -from typing import Dict, List, Set - -from JianshuResearchTools.assert_funcs import AssertUserUrl -from JianshuResearchTools.exceptions import InputError -from sanic import Blueprint, HTTPResponse, Request -from sspeedup.api import CODE, sanic_response_json -from sspeedup.data_validation import BaseModel, sanic_inject_pydantic_model - -from utils.db import lottery_db - -REWARDS: Set[str] = { - "收益加成卡 100", - "收益加成卡 1 万", - "四叶草徽章", - "锦鲤头像框 1 年", -} - -lottery_reward_record_viewer_blueprint = Blueprint( - "lottery_reward_record_viewer", url_prefix="/lottery_reward_record_viewer" -) - - -class RewardsResponse(BaseModel): - rewards: List[str] - - -@lottery_reward_record_viewer_blueprint.get("/rewards") -async def rewards_handler(request: Request) -> HTTPResponse: - del request - - return sanic_response_json( - code=CODE.SUCCESS, - data=RewardsResponse( - rewards=list(REWARDS), - ).model_dump(), - ) - - -class LotteryRecordsRequest(BaseModel): - user_url: str - target_rewards: List[str] - offset: int - - -class LotteryItem(BaseModel): - time: int - reward_name: str - - -class LotteryRecordsResponse(BaseModel): - records: List[LotteryItem] - total: int - - -@lottery_reward_record_viewer_blueprint.post("/lottery_records") -@sanic_inject_pydantic_model(LotteryRecordsRequest) -def lottery_records_handler( - request: Request, data: LotteryRecordsRequest -) -> HTTPResponse: - del request - - try: - AssertUserUrl(data.user_url) - except InputError: - return sanic_response_json(code=CODE.BAD_ARGUMENTS, message="输入的简书用户个人主页链接无效") - - filter_dict = { - "user.url": data.user_url, - "reward_name": { - "$in": data.target_rewards, - }, - } - result: List[Dict] = ( - lottery_db.find(filter_dict).sort("time", -1).skip(data.offset).limit(100) - ) # type: ignore - total = lottery_db.count_documents(filter_dict) - - return sanic_response_json( - code=CODE.SUCCESS, - data=LotteryRecordsResponse( - records=[ - LotteryItem( - time=int(x["time"].timestamp()), reward_name=x["reward_name"] - ) - for x in result - ], - total=total, - ).model_dump(), - ) diff --git a/backend/api/tools/on_rank_article_viewer.py b/backend/api/tools/on_rank_article_viewer.py deleted file mode 100644 index 57e9886..0000000 --- a/backend/api/tools/on_rank_article_viewer.py +++ /dev/null @@ -1,267 +0,0 @@ -from typing import Any, Dict, List, Literal, Optional - -from JianshuResearchTools.assert_funcs import AssertUserUrl -from JianshuResearchTools.exceptions import InputError -from sanic import Blueprint, HTTPResponse, Request -from sspeedup.api import CODE, sanic_response_json -from sspeedup.data_validation import BaseModel, sanic_inject_pydantic_model - -from utils.db import article_FP_rank_db -from utils.text_filter import has_banned_chars - -on_rank_article_viewer_blueprint = Blueprint( - "on_rank_article_viewer", url_prefix="/on_rank_article_viewer" -) - - -def get_topn_count(filter_dict: Dict[str, Any], n: int) -> int: - return article_FP_rank_db.count_documents( - { - **filter_dict, - "ranking": {"$lte": n}, - } - ) - - -def get_url_from_name(name: str) -> Optional[str]: - result = article_FP_rank_db.find_one({"author.name": name}) - if not result: # 用昵称查询无上榜记录 - return None - - return result["author"]["url"] - - -def get_same_url_records_summary(user_url: str, ignore_name: str) -> Dict[str, int]: - db_result = article_FP_rank_db.aggregate( - [ - { - "$match": { - "author.url": user_url, - }, - }, - { - "$group": { - "_id": "$author.name", - "count": {"$sum": 1}, - } - }, - # 排除当前昵称 - { - "$match": { - "_id": { - "$ne": ignore_name, - }, - }, - }, - ] - ) - return {item["_id"]: item["count"] for item in db_result} - - -class UserNameAutocompleteRequest(BaseModel): - name_part: str - - -class UserNameAutocompleteResponse(BaseModel): - possible_names: List[str] - - -@on_rank_article_viewer_blueprint.get("/user_name_autocomplete") -@sanic_inject_pydantic_model(UserNameAutocompleteRequest, source="query_args") -def user_name_autocomplete_handler( - request: Request, data: UserNameAutocompleteRequest -) -> HTTPResponse: - del request - - if not 0 < len(data.name_part) <= 15: - return sanic_response_json( - code=CODE.SUCCESS, - data=UserNameAutocompleteResponse(possible_names=[]).model_dump(), - ) - if has_banned_chars(data.name_part): - return sanic_response_json( - code=CODE.SUCCESS, - data=UserNameAutocompleteResponse(possible_names=[]).model_dump(), - ) - - result: List[str] = ( - article_FP_rank_db.distinct( - "author.name", - { - "author.name": { - "$regex": f"^{data.name_part}", - }, - }, - ) - )[:5] - - return sanic_response_json( - code=CODE.SUCCESS, - data=UserNameAutocompleteResponse(possible_names=result).model_dump(), - ) - - -class OnRankRecordsRequest(BaseModel): - user_url: Optional[str] = None - user_name: Optional[str] = None - sort_by: Literal["onrank_date", "ranking"] - sort_order: Literal["asc", "desc"] - offset: int - - -class OnRankRecordItem(BaseModel): - date: int - ranking: int - title: str - url: str - FP_reward_count: float - - -class OnRankRecordsResponse(BaseModel): - records: List[OnRankRecordItem] - - -@on_rank_article_viewer_blueprint.post("/on_rank_records") -@sanic_inject_pydantic_model(OnRankRecordsRequest) -def on_rank_records_handler( - request: Request, data: OnRankRecordsRequest -) -> HTTPResponse: - del request - - if not data.user_url and not data.user_name: - return sanic_response_json( - code=CODE.BAD_ARGUMENTS, message="用户个人主页链接或用户昵称必须至少传入一个" - ) - if data.user_url and data.user_name: - return sanic_response_json( - code=CODE.BAD_ARGUMENTS, message="用户个人主页链接和用户昵称不能同时传入" - ) - if data.user_url: - try: - AssertUserUrl(data.user_url) - except InputError: - return sanic_response_json( - code=CODE.BAD_ARGUMENTS, - message="输入的用户个人主页链接无效", - ) - - filter_dict: Dict[str, Any] = ( - {"author.name": data.user_name} - if data.user_name - else {"author.url": data.user_url} - ) - - result: List[Dict] = ( - article_FP_rank_db.find(filter_dict) - .sort( - "date" if data.sort_by == "onrank_date" else "ranking", - 1 if data.sort_order == "asc" else -1, - ) - .skip(data.offset) - .limit(50) - ) # type: ignore - - return sanic_response_json( - code=CODE.SUCCESS, - data=OnRankRecordsResponse( - records=[ - OnRankRecordItem( - date=int(x["date"].timestamp()), - ranking=x["ranking"], - title=x["article"]["title"], - url=x["article"]["url"], - FP_reward_count=x["reward"]["to_author"], - ) - for x in result - ], - ).model_dump(), - ) - - -class RankingSummaryRequest(BaseModel): - user_url: Optional[str] = None - user_name: Optional[str] = None - - -class RankingSummaryResponse(BaseModel): - top10_count: int - top30_count: int - top50_count: int - total: int - - -@on_rank_article_viewer_blueprint.post("/ranking_summary") -@sanic_inject_pydantic_model(RankingSummaryRequest) -def ranking_summary_handler( - request: Request, data: RankingSummaryRequest -) -> HTTPResponse: - del request - - if not data.user_url and not data.user_name: - return sanic_response_json( - code=CODE.BAD_ARGUMENTS, message="用户个人主页链接或用户昵称必须至少传入一个" - ) - if data.user_url and data.user_name: - return sanic_response_json( - code=CODE.BAD_ARGUMENTS, message="用户个人主页链接和用户昵称不能同时传入" - ) - if data.user_url: - try: - AssertUserUrl(data.user_url) - except InputError: - return sanic_response_json( - code=CODE.BAD_ARGUMENTS, - message="输入的用户个人主页链接无效", - ) - - filter_dict: Dict[str, Any] = ( - {"author.name": data.user_name} - if data.user_name - else {"author.url": data.user_url} - ) - - top10_count = get_topn_count(filter_dict, 10) - top30_count = get_topn_count(filter_dict, 30) - top50_count = get_topn_count(filter_dict, 50) - total = article_FP_rank_db.count_documents(filter_dict) - - return sanic_response_json( - code=CODE.SUCCESS, - data=RankingSummaryResponse( - top10_count=top10_count, - top30_count=top30_count, - top50_count=top50_count, - total=total, - ).model_dump(), - ) - - -class SameURLRecordsSummaryRequest(BaseModel): - user_name: str - - -class SameURLRecordsSummaryResponse(BaseModel): - records: Dict[str, int] - user_url: Optional[str] = None - - -@on_rank_article_viewer_blueprint.get("/same_url_records_summary") -@sanic_inject_pydantic_model(SameURLRecordsSummaryRequest, source="query_args") -def same_url_records_summary_handler( - request: Request, data: SameURLRecordsSummaryRequest -) -> HTTPResponse: - del request - - user_url = get_url_from_name(data.user_name) - if not user_url: - records = {} - else: - records = get_same_url_records_summary(user_url, data.user_name) - - return sanic_response_json( - code=CODE.SUCCESS, - data=SameURLRecordsSummaryResponse( - records=records, - user_url=user_url, - ).model_dump(), - ) diff --git a/backend/api/v1/__init__.py b/backend/api/v1/__init__.py new file mode 100644 index 0000000..9ae931d --- /dev/null +++ b/backend/api/v1/__init__.py @@ -0,0 +1,18 @@ +from litestar import Router + +from .articles import ARTICLES_ROUTER +from .jpep import JPEP_ROUTER +from .lottery import LOTTERY_ROUTER +from .status import STATUS_ROUTER +from .users import USERS_ROUTER + +V1_ROUTER = Router( + path="/v1", + route_handlers=[ + ARTICLES_ROUTER, + JPEP_ROUTER, + LOTTERY_ROUTER, + STATUS_ROUTER, + USERS_ROUTER, + ], +) diff --git a/backend/api/v1/articles.py b/backend/api/v1/articles.py new file mode 100644 index 0000000..26fbe29 --- /dev/null +++ b/backend/api/v1/articles.py @@ -0,0 +1,281 @@ +from asyncio import gather +from datetime import datetime, timedelta +from typing import Annotated, Any, Dict, Optional, cast + +from bson import ObjectId +from httpx import AsyncClient +from JianshuResearchTools.article import ( + GetArticleText, + GetArticleTitle, + GetArticleTotalFPCount, +) +from JianshuResearchTools.assert_funcs import AssertArticleStatusNormal +from JianshuResearchTools.convert import ArticleSlugToArticleUrl, UserSlugToUserUrl +from JianshuResearchTools.exceptions import InputError, ResourceError +from litestar import Response, Router, get +from litestar.openapi.spec.example import Example +from litestar.params import Parameter +from litestar.status_codes import HTTP_400_BAD_REQUEST +from msgspec import Struct, field +from sspeedup.ability.word_split.jieba import AbilityJiebaPossegSplitterV1 +from sspeedup.api.code import Code +from sspeedup.api.litestar import ( + RESPONSE_STRUCT_CONFIG, + fail, + generate_response_spec, + success, +) +from sspeedup.sync_to_async import sync_to_async + +from utils.config import config +from utils.db import ARTICLE_FP_RANK_COLLECTION + +CLIENT = AsyncClient(http2=True) + +# fmt: off +splitter = AbilityJiebaPossegSplitterV1( + host=config.ability_word_split.host, + port=config.ability_word_split.port, + allowed_word_types={ + "Ag", "a", "ad", "an", "dg", "g", "i", + "j", "l", "Ng", "n", "nr", "ns", "nt", + "nz","tg","vg","v","vd","vn","un", + }, +) +# fmt: on + + +async def get_author_url(article_slug: str) -> str: + response = await CLIENT.get(f"https://www.jianshu.com/asimov/p/{article_slug}") + response.raise_for_status() + + json = response.json() + return UserSlugToUserUrl(json["user"]["slug"]) + + +async def get_latest_onrank_record( + author_url: str, *, minimum_ranking: Optional[int] = None +) -> Optional[Dict[str, Any]]: + cursor = ( + ARTICLE_FP_RANK_COLLECTION.find( + { + "author.url": author_url, + "ranking": { + "$lte": minimum_ranking if minimum_ranking else 100, + }, + } + ) + .sort("date", -1) + .limit(1) + ) + + try: + return await cursor.next() + except StopAsyncIteration: + return None + + +async def get_pervious_onrank_record( + onrank_record: Dict[str, Any], minimum_ranking: Optional[int] = None +) -> Optional[Dict[str, Any]]: + cursor = ( + ARTICLE_FP_RANK_COLLECTION.find( + { + "_id": {"$lt": ObjectId(onrank_record["_id"])}, + "author.url": onrank_record["author"]["url"], + "ranking": { + "$lte": minimum_ranking if minimum_ranking else 100, + }, + } + ) + .sort("_id", -1) + .limit(1) + ) + + try: + return await cursor.next() + except StopAsyncIteration: + return None + + +async def caculate_next_can_recommend_date(author_url: str) -> Optional[datetime]: + counted_article_urls = set() + + latest_onrank_record = await get_latest_onrank_record( + author_url, minimum_ranking=85 + ) + if not latest_onrank_record: + # 作者没有上榜文章,或全部上榜文章均低于 85 名 + return None + + interval_days = 10 if latest_onrank_record["ranking"] <= 30 else 7 + counted_article_urls.add(latest_onrank_record["article"]["url"]) + + now_record = latest_onrank_record + while True: + pervious_record = await get_pervious_onrank_record( + now_record, minimum_ranking=85 + ) + if not pervious_record: + # 没有更多文章 + return cast(datetime, now_record["date"]) + timedelta(days=interval_days) + if pervious_record["article"]["url"] in counted_article_urls: + # 该文章之前计算过间隔 + now_record = pervious_record + continue + + counted_article_urls.add(pervious_record["article"]["url"]) + + if ( + now_record["ranking"] <= 30 + and (now_record["date"] - pervious_record["date"]).days > 10 + ) or ( + now_record["ranking"] > 30 + and (now_record["date"] - pervious_record["date"]).days > 7 + ): + return cast(datetime, now_record["date"]) + timedelta(days=interval_days) + + if pervious_record["ranking"] <= 30: + interval_days += 10 + else: + interval_days += 7 + + now_record = pervious_record + + +class GetWordFreqResponse(Struct, **RESPONSE_STRUCT_CONFIG): + title: str + word_freq: Dict[str, int] + + +@get( + "/{article_slug: str}/word-freq", + summary="获取文章词频", + responses={ + 200: generate_response_spec(GetWordFreqResponse), + 400: generate_response_spec(), + }, +) +async def get_word_freq_handler( + article_slug: Annotated[ + str, + Parameter( + description="文章 slug", + min_length=12, + max_length=12, + examples=[ + Example( + summary="简书导航 一文助你玩转简书 - LP 理事会", + value="088f7eed2ca3", + ) + ], + ), + ], +) -> Response: + try: + article_url = ArticleSlugToArticleUrl(article_slug) + title, article_text = await gather( + sync_to_async(GetArticleTitle, article_url), + sync_to_async(GetArticleText, article_url), + ) + except InputError: + return fail( + http_code=HTTP_400_BAD_REQUEST, + api_code=Code.BAD_ARGUMENTS, + msg="输入的文章链接无效", + ) + except ResourceError: + return fail( + http_code=HTTP_400_BAD_REQUEST, + api_code=Code.BAD_ARGUMENTS, + msg="文章已被删除、锁定或正在审核中", + ) + + word_freq = dict((await splitter.get_word_freq(article_text)).most_common(100)) + + return success( + data=GetWordFreqResponse( + title=title, + word_freq=word_freq, + ) + ) + + +class GetLPRecommendCheckResponse(Struct, **RESPONSE_STRUCT_CONFIG): + article_title: str + can_recommend_now: bool + FP_reward: float = field(name="FPReward") + next_can_recommend_date: Optional[datetime] + + +# TODO: 实现 LP 理事会推文检测接口 +@get( + "/{article_slug: str}/lp-recommend-check", + summary="获取 LP 理事会推文检测结果", + responses={ + 200: generate_response_spec(GetLPRecommendCheckResponse), + 400: generate_response_spec(), + }, +) +async def get_LP_recommend_check_handler( # noqa: N802 + article_slug: Annotated[ + str, + Parameter( + description="文章 slug", + min_length=12, + max_length=12, + examples=[ + Example( + summary="简书导航 一文助你玩转简书 - LP 理事会", + value="088f7eed2ca3", + ) + ], + ), + ], +) -> Response: + try: + article_url = ArticleSlugToArticleUrl(article_slug) + await sync_to_async(AssertArticleStatusNormal, article_url) + except InputError: + return fail( + http_code=HTTP_400_BAD_REQUEST, + api_code=Code.BAD_ARGUMENTS, + msg="输入的文章链接无效", + ) + except ResourceError: + return fail( + http_code=HTTP_400_BAD_REQUEST, + api_code=Code.BAD_ARGUMENTS, + msg="文章已被删除、锁定或正在审核中", + ) + + author_url = await get_author_url(article_slug) + + article_title, FP_reward, next_can_recommend_date = await gather( # noqa: N806 + sync_to_async(GetArticleTitle, article_url), + sync_to_async(GetArticleTotalFPCount, article_url), + caculate_next_can_recommend_date(author_url), + ) + + can_recommend_now = FP_reward < 35 and ( + not next_can_recommend_date or next_can_recommend_date <= datetime.now() + ) + + return success( + data=GetLPRecommendCheckResponse( + article_title=article_title, + can_recommend_now=can_recommend_now, + FP_reward=FP_reward, + next_can_recommend_date=next_can_recommend_date, + ) + ) + + +ARTICLES_ROUTER = Router( + path="/articles", + route_handlers=[ + get_word_freq_handler, + get_LP_recommend_check_handler, + ], + tags=["文章"], +) diff --git a/backend/api/v1/jpep/__init__.py b/backend/api/v1/jpep/__init__.py new file mode 100644 index 0000000..42cc460 --- /dev/null +++ b/backend/api/v1/jpep/__init__.py @@ -0,0 +1,8 @@ +from litestar import Router + +from .ftn_macket import FTN_MACKET_ROUTER + +JPEP_ROUTER = Router( + path="/jpep", + route_handlers=[FTN_MACKET_ROUTER], +) diff --git a/backend/api/v1/jpep/ftn_macket.py b/backend/api/v1/jpep/ftn_macket.py new file mode 100644 index 0000000..158fe79 --- /dev/null +++ b/backend/api/v1/jpep/ftn_macket.py @@ -0,0 +1,437 @@ +from asyncio import gather +from datetime import datetime, timedelta +from typing import Annotated, Any, Dict, Literal, Optional + +from httpx import AsyncClient +from litestar import Response, Router, get +from litestar.params import Parameter +from msgspec import Struct, field +from sspeedup.api.litestar import ( + RESPONSE_STRUCT_CONFIG, + generate_response_spec, + success, +) +from sspeedup.time_helper import get_start_time + +from utils.db import JPEP_FTN_MACKET_COLLECTION + +RANGE_TO_TIMEDELTA: Dict[str, timedelta] = { + "24h": timedelta(hours=24), + "7d": timedelta(days=7), + "15d": timedelta(days=15), + "30d": timedelta(days=30), +} + +RESOLUTION_TO_TIME_UNIT: Dict[str, str] = { + "5m": "minute", # 目前未使用 + "1h": "hour", + "1d": "day", +} + +HTTP_CLIENT = AsyncClient(http2=True) + + +async def get_rules() -> Dict[str, Any]: + response = await HTTP_CLIENT.post( + "https://20221023.jianshubei.com/api/getList/furnish.setting/1/", + json={ + "fields": "isClose,fee,shop_fee,minimum_price,buy_minimum_price", + }, + ) + + response.raise_for_status() + return response.json()["data"] + + +async def get_data_update_time() -> datetime: + result = ( + await JPEP_FTN_MACKET_COLLECTION.find( + {}, + { + "_id": 0, + "fetch_time": 1, + }, + ) + .sort("fetch_time", -1) + .limit(1) + .next() + ) + return result["fetch_time"] + + +async def get_latest_order(type_: Literal["buy", "sell"]) -> Optional[Dict[str, Any]]: + time = await get_data_update_time() + try: + return ( + await JPEP_FTN_MACKET_COLLECTION.find( + { + "fetch_time": time, + "trade_type": type_, + "amount.tradable": {"$ne": 0}, + } + ) + .sort("price", 1 if type_ == "buy" else -1) + .limit(1) + .next() + ) + except StopAsyncIteration: # 该侧没有挂单 + return None + + +async def get_current_amount(type_: Literal["buy", "sell"]) -> Optional[int]: + time = await get_data_update_time() + + try: + result = await JPEP_FTN_MACKET_COLLECTION.aggregate( + [ + { + "$match": { + "fetch_time": time, + "trade_type": type_, + } + }, + { + "$group": { + "_id": None, + "sum": { + "$sum": "$amount.tradable", + }, + }, + }, + ] + ).next() + return result["sum"] + except StopIteration: # 该侧没有挂单 + return None + + +async def get_price_history( + type_: Literal["buy", "sell"], td: timedelta, time_unit: str +) -> Dict[datetime, float]: + result = JPEP_FTN_MACKET_COLLECTION.aggregate( + [ + { + "$match": { + "trade_type": type_, + "fetch_time": { + "$gte": get_start_time(td), + }, + }, + }, + { + "$group": { + "_id": ( + { + "$dateTrunc": { + "date": "$_id", + "unit": time_unit, + }, + } + ) + if time_unit != "minute" + else "$_id", + "price": { + "$min" if type_ == "buy" else "$max": "$price", + }, + }, + }, + { + "$sort": { + "_id": 1, + }, + }, + ] + ) + + return {item["_id"]: item["price"] async for item in result} + + +async def get_amount_history( + type_: Literal["buy", "sell"], td: timedelta, time_unit: str +) -> Dict[datetime, float]: + result = JPEP_FTN_MACKET_COLLECTION.aggregate( + [ + { + "$match": { + "trade_type": type_, + "fetch_time": { + "$gte": get_start_time(td), + }, + }, + }, + { + "$group": { + "_id": "$fetch_time", + "amount": { + "$sum": "$amount.tradable", + }, + }, + }, + { + "$group": { + "_id": ( + { + "$dateTrunc": { + "date": "$_id", + "unit": time_unit, + }, + } + ) + if time_unit != "minute" + else "$_id", + "amount": { + "$avg": "$amount", + }, + }, + }, + { + "$sort": { + "_id": 1, + }, + }, + ] + ) + + return {item["_id"]: round(item["amount"]) async for item in result} + + +async def get_current_amount_distribution( + type_: Literal["buy", "sell"], + limit: int, +) -> Dict[float, int]: + time = await get_data_update_time() + + result = JPEP_FTN_MACKET_COLLECTION.aggregate( + [ + { + "$match": { + "fetch_time": time, + "trade_type": type_, + }, + }, + { + "$group": { + "_id": "$price", + "amount": { + "$sum": "$amount.tradable", + }, + }, + }, + { + "$match": { + "amount": { + "$ne": 0, + }, + }, + }, + { + "$sort": { + "_id": 1 if type_ == "buy" else -1, + }, + }, + { + "$limit": limit, + }, + ] + ) + + return {item["_id"]: item["amount"] async for item in result} + + +class GetRulesResponse(Struct, **RESPONSE_STRUCT_CONFIG): + is_open: bool + buy_order_minimum_price: float + sell_order_minimum_price: float + FTN_order_fee: float = field(name="FTNOrderFee") + goods_order_fee: float + + +@get( + "/rules", + summary="获取贝市交易配置", + responses={ + 200: generate_response_spec(GetRulesResponse), + }, +) +async def get_rules_handler() -> Response: + rules = await get_rules() + + is_open = not bool(rules["isClose"]) + + buy_order_minimum_price = rules["buy_minimum_price"] + sell_order_minimum_price = rules["minimum_price"] + + FTN_order_fee = rules["fee"] # noqa: N806 + goods_order_fee = rules["shop_fee"] + + return success( + data=GetRulesResponse( + is_open=is_open, + buy_order_minimum_price=buy_order_minimum_price, + sell_order_minimum_price=sell_order_minimum_price, + FTN_order_fee=FTN_order_fee, + goods_order_fee=goods_order_fee, + ) + ) + + +class GetCurrentPriceResponse(Struct, **RESPONSE_STRUCT_CONFIG): + buy_price: Optional[float] + sell_price: Optional[float] + + +@get( + "/current-price", + summary="获取当前贝价", + responses={ + 200: generate_response_spec(GetCurrentPriceResponse), + }, +) +async def get_current_price_handler() -> Response: + buy_order, sell_order = await gather( + get_latest_order("buy"), get_latest_order("sell") + ) + + buy_price = buy_order["price"] if buy_order else None + sell_price = sell_order["price"] if sell_order else None + + return success( + data=GetCurrentPriceResponse( + buy_price=buy_price, + sell_price=sell_price, + ) + ) + + +class GetCurrentAmountResponse(Struct, **RESPONSE_STRUCT_CONFIG): + buy_amount: Optional[int] + sell_amount: Optional[int] + + +@get( + "/current-amount", + summary="获取当前挂单量", + responses={ + 200: generate_response_spec(GetCurrentAmountResponse), + }, +) +async def get_current_amount_handler() -> Response: + buy_amount, sell_amount = await gather( + get_current_amount("buy"), + get_current_amount("sell"), + ) + + return success( + data=GetCurrentAmountResponse( + buy_amount=buy_amount, + sell_amount=sell_amount, + ) + ) + + +class GetPriceHistoryResponse(Struct, **RESPONSE_STRUCT_CONFIG): + history: Dict[datetime, float] + + +@get( + "/price-history", + summary="获取历史价格", + responses={ + 200: generate_response_spec(GetPriceHistoryResponse), + }, +) +async def get_price_history_handler( + type_: Annotated[ + Literal["buy", "sell"], Parameter(description="交易单类型", query="type") + ], + range: Annotated[ # noqa: A002 + Literal["24h", "7d", "15d", "30d"], Parameter(description="时间范围") + ], + resolution: Annotated[Literal["5m", "1h", "1d"], Parameter(description="统计粒度")], +) -> Response: + history = await get_price_history( + type_=type_, + td=RANGE_TO_TIMEDELTA[range], + time_unit=RESOLUTION_TO_TIME_UNIT[resolution], + ) + + return success( + data=GetPriceHistoryResponse( + history=history, + ) + ) + + +class GetAmountHistoryResponse(Struct, **RESPONSE_STRUCT_CONFIG): + history: Dict[datetime, float] + + +@get( + "/amount-history", + summary="获取历史挂单量", + responses={ + 200: generate_response_spec(GetAmountHistoryResponse), + }, +) +async def get_amount_history_handler( + type_: Annotated[ + Literal["buy", "sell"], Parameter(description="交易单类型", query="type") + ], + range: Annotated[ # noqa: A002 + Literal["24h", "7d", "15d", "30d"], Parameter(description="时间范围") + ], + resolution: Annotated[Literal["5m", "1h", "1d"], Parameter(description="统计粒度")], +) -> Response: + history = await get_amount_history( + type_=type_, + td=RANGE_TO_TIMEDELTA[range], + time_unit=RESOLUTION_TO_TIME_UNIT[resolution], + ) + + return success( + data=GetAmountHistoryResponse( + history=history, + ) + ) + + +class GetCurrentAmountDistributionResponse(Struct, **RESPONSE_STRUCT_CONFIG): + amount_distribution: Dict[float, int] + + +@get( + "/current-amount-distribution", + summary="获取当前挂单分布", + responses={ + 200: generate_response_spec(GetCurrentAmountDistributionResponse), + }, +) +async def get_current_amount_distribution_handler( + type_: Annotated[ + Literal["buy", "sell"], Parameter(description="交易单类型", query="type") + ], + limit: Annotated[int, Parameter(description="结果数量", gt=0, le=100)] = 10, +) -> Response: + amount_distribution = await get_current_amount_distribution( + type_=type_, limit=limit + ) + + return success( + data=GetCurrentAmountDistributionResponse( + amount_distribution=amount_distribution, + ) + ) + + +FTN_MACKET_ROUTER = Router( + path="/ftn-macket", + route_handlers=[ + get_rules_handler, + get_current_price_handler, + get_current_amount_handler, + get_price_history_handler, + get_amount_history_handler, + get_current_amount_distribution_handler, + ], + tags=["简书积分兑换平台 - 贝市"], +) diff --git a/backend/api/v1/lottery.py b/backend/api/v1/lottery.py new file mode 100644 index 0000000..125cdb2 --- /dev/null +++ b/backend/api/v1/lottery.py @@ -0,0 +1,330 @@ +from asyncio import gather +from datetime import datetime, timedelta +from typing import Annotated, Dict, List, Literal, Optional + +from litestar import Response, Router, get +from litestar.params import Parameter +from msgspec import Struct +from sspeedup.api.litestar import ( + RESPONSE_STRUCT_CONFIG, + generate_response_spec, + success, +) +from sspeedup.time_helper import get_start_time + +from utils.db import LOTTERY_COLLECTION + +REWARD_NAMES: List[str] = [ + "收益加成卡100", + "收益加成卡1万", + "四叶草徽章", + "锦鲤头像框1年", +] + +RANGE_TO_TIMEDELTA: Dict[str, Optional[timedelta]] = { + "1d": timedelta(days=1), + "7d": timedelta(days=7), + "30d": timedelta(days=30), + "60d": timedelta(days=60), + "all": None, +} + +RESOLUTION_TO_TIME_UNIT: Dict[str, str] = { + "1h": "hour", + "1d": "day", +} + + +async def get_summary_wins_count(td: Optional[timedelta]) -> Dict[str, int]: + db_result = LOTTERY_COLLECTION.aggregate( + [ + { + "$match": { + "time": { + "$gte": get_start_time(td), + }, + }, + }, + { + "$group": { + "_id": "$reward_name", + "count": { + "$sum": 1, + }, + }, + }, + ] + ) + + result = {key: 0 for key in REWARD_NAMES} + result.update({item["_id"]: item["count"] async for item in db_result}) + return result + + +async def get_summary_winners_count(td: Optional[timedelta]) -> Dict[str, int]: + result: Dict[str, int] = {} + + for reward_name in REWARD_NAMES: + result[reward_name] = len( + await LOTTERY_COLLECTION.distinct( + "user.id", + { + "reward_name": reward_name, + "time": { + "$gte": get_start_time(td), + }, + }, + ) + ) + + return result + + +def get_summary_average_wins_count_per_winner( + wins_count: Dict[str, int], winners_count: Dict[str, int] +) -> Dict[str, float]: + result: Dict[str, float] = {} + + for reward_name in wins_count: + # 该奖项无人中奖 + if wins_count[reward_name] == 0: + result[reward_name] = 0 + continue + + result[reward_name] = round( + wins_count[reward_name] / winners_count[reward_name], 3 + ) + + return result + + +def get_summary_winning_rate(wins_count: Dict[str, int]) -> Dict[str, float]: + total_wins_count = sum(wins_count.values()) + if not total_wins_count: # 所有奖项均无人中奖 + return {key: 0 for key in wins_count} + + return { + key: round(value / total_wins_count, 5) for key, value in wins_count.items() + } + + +def get_summary_rarity(wins_count: Dict[str, int]) -> Dict[str, float]: + result = { + key: (1 / value if value != 0 else 0.0) + for key, value in get_summary_winning_rate(wins_count).items() + } + + # 如果可能,使用收益加成卡 100 的中奖率修正其它结果 + scale: float = 1 / result.get("收益加成卡 100", 1.0) + + return {key: round(value * scale, 3) for key, value in result.items()} + + +async def get_rewards_wins_history( + td: timedelta, time_unit: str +) -> Dict[datetime, int]: + result = LOTTERY_COLLECTION.aggregate( + [ + { + "$match": { + "time": { + "$gt": get_start_time(td), + }, + } + }, + { + "$group": { + "_id": { + "$dateTrunc": { + "date": "$time", + "unit": time_unit, + }, + }, + "count": { + "$sum": 1, + }, + } + }, + { + "$sort": { + "_id": 1, + }, + }, + ] + ) + + return {item["_id"]: item["count"] async for item in result} + + +class GetRewardsResponse(Struct, **RESPONSE_STRUCT_CONFIG): + rewards: List[str] + + +@get( + "/rewards", + summary="获取奖项列表", + responses={ + 200: generate_response_spec(GetRewardsResponse), + }, +) +async def get_rewards_handler() -> Response: + return success( + data=GetRewardsResponse( + rewards=REWARD_NAMES, + ) + ) + + +class GetRecordItem(Struct, **RESPONSE_STRUCT_CONFIG): + time: datetime + reward_name: str + user_name: str + user_url: str + + +class GetRecordsResponse(Struct, **RESPONSE_STRUCT_CONFIG): + records: List[GetRecordItem] + + +@get( + "/records", + summary="获取中奖记录", + responses={ + 200: generate_response_spec(GetRecordsResponse), + }, +) +async def get_records_handler( + offset: Annotated[int, Parameter(description="分页偏移", ge=0)] = 0, + limit: Annotated[int, Parameter(description="结果数量", gt=0, lt=100)] = 20, + excluded_awards: Annotated[ + Optional[List[str]], Parameter(description="排除奖项列表", max_items=10) + ] = None, +) -> Response: + result = ( + LOTTERY_COLLECTION.find( + { + "reward_name": { + "$nin": excluded_awards if excluded_awards else [], + }, + } + ) + .sort("time", -1) + .skip(offset) + .limit(limit) + ) + + records: List[GetRecordItem] = [] + async for item in result: + records.append( + GetRecordItem( + time=item["time"], + reward_name=item["reward_name"], + user_name=item["user"]["name"], + user_url=item["user"]["url"], + ) + ) + + return success( + data=GetRecordsResponse( + records=records, + ) + ) + + +class GetSummaryRewardItem(Struct, **RESPONSE_STRUCT_CONFIG): + reward_name: str + wins_count: int + winners_count: int + average_wins_count_per_winner: float + winning_rate: float + rarity: float + + +class GetSummaryResponse(Struct, **RESPONSE_STRUCT_CONFIG): + rewards: List[GetSummaryRewardItem] + + +@get( + "/summary", + summary="获取抽奖摘要", + responses={ + 200: generate_response_spec(GetSummaryResponse), + }, +) +async def get_summary_handler( + range: Annotated[ # noqa: A002 + Literal["1d", "7d", "30d", "all"], Parameter(description="时间范围") + ], +) -> Response: + td = RANGE_TO_TIMEDELTA[range] + + wins_count, winners_count = await gather( + get_summary_wins_count(td), + get_summary_winners_count(td), + ) + + average_wins_count_per_winner = get_summary_average_wins_count_per_winner( + wins_count, winners_count + ) + winning_rate = get_summary_winning_rate(wins_count) + rarity = get_summary_rarity(wins_count) + + rewards: List[GetSummaryRewardItem] = [] + for reward_name in REWARD_NAMES: + rewards.append( + GetSummaryRewardItem( + reward_name=reward_name, + wins_count=wins_count[reward_name], + winners_count=winners_count[reward_name], + average_wins_count_per_winner=average_wins_count_per_winner[ + reward_name + ], + winning_rate=winning_rate[reward_name], + rarity=rarity[reward_name], + ) + ) + + return success( + data=GetSummaryResponse( + rewards=rewards, + ) + ) + + +class GetRewardWinsHistoryResponse(Struct, **RESPONSE_STRUCT_CONFIG): + history: Dict[datetime, int] + + +@get( + "/reward-wins-history", + summary="获取历史中奖数", + responses={ + 200: generate_response_spec(GetRewardWinsHistoryResponse), + }, +) +async def get_reward_wins_history_handler( + range: Annotated[Literal["1d", "30d", "60d"], Parameter(description="时间范围")], # noqa: A002 + resolution: Annotated[Literal["1h", "1d"], Parameter(description="统计粒度")], +) -> Response: + history = await get_rewards_wins_history( + td=RANGE_TO_TIMEDELTA[range], # type: ignore + time_unit=RESOLUTION_TO_TIME_UNIT[resolution], + ) + + return success( + data=GetRewardWinsHistoryResponse( + history=history, + ) + ) + + +LOTTERY_ROUTER = Router( + path="/lottery", + route_handlers=[ + get_rewards_handler, + get_records_handler, + get_summary_handler, + get_reward_wins_history_handler, + ], + tags=["抽奖"], +) diff --git a/backend/api/v1/status.py b/backend/api/v1/status.py new file mode 100644 index 0000000..9b55788 --- /dev/null +++ b/backend/api/v1/status.py @@ -0,0 +1,167 @@ +from datetime import datetime +from typing import Annotated, Dict, List, Literal, Optional + +from litestar import Response, Router, get +from litestar.params import Parameter +from litestar.status_codes import HTTP_400_BAD_REQUEST +from motor.core import AgnosticCollection +from msgspec import Struct +from sspeedup.api.code import Code +from sspeedup.api.litestar import ( + RESPONSE_STRUCT_CONFIG, + fail, + generate_response_spec, + success, +) + +from utils.config import config +from utils.db import ( + ARTICLE_FP_RANK_COLLECTION, + JPEP_FTN_MACKET_COLLECTION, + LOTTERY_COLLECTION, + LP_COLLECTIONS_COLLECTION, +) +from utils.tools_config import TOOLS_CONFIG, ToolStatus + +COLLECTION_STRING_TO_OBJ: Dict[str, AgnosticCollection] = { + "article_FP_rank": ARTICLE_FP_RANK_COLLECTION, + "lottery": LOTTERY_COLLECTION, + "LP_collections": LP_COLLECTIONS_COLLECTION, + "JPEP_FTN_market": JPEP_FTN_MACKET_COLLECTION, +} + + +async def get_last_update_time( + collection: AgnosticCollection, + sort_key: str, + sort_direction: Literal["asc", "desc"], +) -> Optional[datetime]: + try: + db_result = ( + await collection.find() + .sort(sort_key, 1 if sort_direction == "asc" else -1) + .limit(1) + .next() + ) + return db_result[sort_key] + except StopAsyncIteration: + return None + + +async def get_data_count( + collection: AgnosticCollection, mode: Literal["accurate", "estimated"] +) -> int: + if mode == "accurate": + return await collection.count_documents({}) + + return await collection.estimated_document_count() + + +class GetResponse(Struct, **RESPONSE_STRUCT_CONFIG): + version: str + downgraded_tools: List[str] + unavaliable_tools: List[str] + + +@get( + "/", + summary="获取服务状态", + responses={ + 200: generate_response_spec(GetResponse), + }, +) +async def get_handler() -> Response: + version = config.deploy.version + + downgraded_tools = [ + name + for name, config in TOOLS_CONFIG.items() + if config.status == ToolStatus.DOWNGRADED + ] + unavaliable_tools = [ + name + for name, config in TOOLS_CONFIG.items() + if config.status == ToolStatus.UNAVALIABLE + ] + + return success( + data=GetResponse( + version=version, + downgraded_tools=downgraded_tools, + unavaliable_tools=unavaliable_tools, + ) + ) + + +class GetToolStatusResponse(Struct, **RESPONSE_STRUCT_CONFIG): + status: ToolStatus + reason: Optional[str] + last_update_time: Optional[datetime] + data_update_freq: Optional[str] + data_count: Optional[int] + data_source: Optional[Dict[str, str]] + + +@get( + "/{tool_name: str}", + summary="获取小工具服务状态", + responses={ + 200: generate_response_spec(GetToolStatusResponse), + 400: generate_response_spec(), + }, +) +async def get_tool_status_handler( + tool_name: Annotated[str, Parameter(description="小工具名称", max_length=100)] +) -> Response: + tool_config = TOOLS_CONFIG.get(tool_name) + if not tool_config: + return fail( + http_code=HTTP_400_BAD_REQUEST, + api_code=Code.BAD_ARGUMENTS, + msg="小工具不存在", + ) + + status = tool_config.status + reason = tool_config.reason + last_update_time = ( + await get_last_update_time( + collection=COLLECTION_STRING_TO_OBJ[ + tool_config.last_update_time.collection + ], + sort_key=tool_config.last_update_time.sort_key, + sort_direction=tool_config.last_update_time.sort_direction, + ) + if tool_config.last_update_time + else None + ) + data_update_freq = tool_config.data_update_freq + data_count = ( + await get_data_count( + collection=COLLECTION_STRING_TO_OBJ[tool_config.data_count.collection], + mode=tool_config.data_count.mode, + ) + if tool_config.data_count + else None + ) + data_source = tool_config.data_source + + return success( + data=GetToolStatusResponse( + status=status, + reason=reason, + last_update_time=last_update_time, + data_update_freq=data_update_freq, + data_count=data_count, + data_source=data_source, + ) + ) + + +STATUS_ROUTER = Router( + path="/status", + route_handlers=[ + get_handler, + get_tool_status_handler, + ], + tags=["服务状态"], +) diff --git a/backend/api/v1/users.py b/backend/api/v1/users.py new file mode 100644 index 0000000..93fc794 --- /dev/null +++ b/backend/api/v1/users.py @@ -0,0 +1,463 @@ +from asyncio import gather +from datetime import datetime +from typing import Annotated, Dict, List, Literal, Optional + +from JianshuResearchTools.convert import UserSlugToUserUrl +from JianshuResearchTools.exceptions import InputError, ResourceError +from JianshuResearchTools.user import GetUserName, GetUserVIPInfo +from litestar import Response, Router, get +from litestar.params import Parameter +from litestar.status_codes import HTTP_400_BAD_REQUEST +from msgspec import Struct, field +from sspeedup.api.code import Code +from sspeedup.api.litestar import ( + RESPONSE_STRUCT_CONFIG, + fail, + generate_response_spec, + success, +) +from sspeedup.sync_to_async import sync_to_async + +from utils.db import ARTICLE_FP_RANK_COLLECTION, LOTTERY_COLLECTION + + +class GetVipInfoResponse(Struct, **RESPONSE_STRUCT_CONFIG): + user_name: str + is_vip: bool = field(name="isVIP") + type: Optional[Literal["bronze", "sliver", "gold", "platina"]] # noqa: A003 + expire_date: Optional[datetime] + + +@get( + "/{user_slug: str}/vip-info", + summary="获取会员信息", + responses={ + 200: generate_response_spec(GetVipInfoResponse), + 400: generate_response_spec(), + }, +) +async def get_vip_info_handler( + user_slug: Annotated[ + str, Parameter(description="用户 slug", min_length=6, max_length=12) + ], +) -> Response: + try: + user_url = UserSlugToUserUrl(user_slug) + user_name, vip_info = await gather( + sync_to_async(GetUserName, user_url), + sync_to_async(GetUserVIPInfo, user_url), + ) + except InputError: + return fail( + http_code=HTTP_400_BAD_REQUEST, + api_code=Code.BAD_ARGUMENTS, + msg="输入的简书个人主页链接无效", + ) + except ResourceError: + return fail( + http_code=HTTP_400_BAD_REQUEST, + api_code=Code.BAD_ARGUMENTS, + msg="用户已注销或被封禁", + ) + + is_vip = vip_info["vip_type"] is not None + type_ = vip_info["vip_type"] + expire_date = vip_info["expire_date"] + + return success( + data=GetVipInfoResponse( + user_name=user_name, + is_vip=is_vip, + type=type_, + expire_date=expire_date, + ) + ) + + +class GetLotteryWinRecordItem(Struct, **RESPONSE_STRUCT_CONFIG): + time: datetime + reward_name: str + + +class GetLotteryWinRecordsResponse(Struct, **RESPONSE_STRUCT_CONFIG): + records: List[GetLotteryWinRecordItem] + + +@get( + "/{user_slug: str}/lottery-win-records", + summary="获取用户中奖记录", + responses={ + 200: generate_response_spec(GetLotteryWinRecordsResponse), + 400: generate_response_spec(), + }, +) +async def get_lottery_win_records( + user_slug: Annotated[ + str, Parameter(description="用户 slug", min_length=6, max_length=12) + ], + offset: Annotated[int, Parameter(description="分页偏移", ge=0)] = 0, + limit: Annotated[int, Parameter(description="结果数量", gt=0, lt=100)] = 20, + excluded_awards: Annotated[ + Optional[List[str]], Parameter(description="排除奖项列表", max_items=10) + ] = None, +) -> Response: + try: + user_url = UserSlugToUserUrl(user_slug) + except InputError: + return fail( + http_code=HTTP_400_BAD_REQUEST, + api_code=Code.BAD_ARGUMENTS, + msg="输入的简书个人主页链接无效", + ) + + result = ( + LOTTERY_COLLECTION.find( + { + "user.url": user_url, + "reward_name": { + "$nin": excluded_awards if excluded_awards else [], + }, + } + ) + .skip(offset) + .limit(limit) + ) + + records: List[GetLotteryWinRecordItem] = [] + async for item in result: + records.append( + GetLotteryWinRecordItem( + time=item["time"], + reward_name=item["reward_name"], + ) + ) + + return success( + data=GetLotteryWinRecordsResponse( + records=records, + ) + ) + + +class GetOnArticleRankRecordItem(Struct, **RESPONSE_STRUCT_CONFIG): + date: datetime + ranking: int + article_title: str + article_url: str + FP_reward: float = field(name="FPReward") + + +class GetOnArticleRankRecordsResponse(Struct, **RESPONSE_STRUCT_CONFIG): + records: List[GetOnArticleRankRecordItem] + + +@get( + "/{user_slug: str}/on-article-rank-records", + summary="获取用户上榜记录", + responses={ + 200: generate_response_spec(GetOnArticleRankRecordsResponse), + 400: generate_response_spec(), + }, +) +async def get_on_article_rank_records_handler( + user_slug: Annotated[ + str, Parameter(description="用户 slug", min_length=6, max_length=12) + ], + order_by: Annotated[ + Literal["date", "ranking"], Parameter(description="排序依据") + ] = "date", + order_direction: Annotated[ + Literal["asc", "desc"], Parameter(description="排序方向") + ] = "desc", + offset: Annotated[int, Parameter(description="分页偏移", ge=0)] = 0, + limit: Annotated[int, Parameter(description="结果数量", gt=0, lt=100)] = 20, +) -> Response: + try: + user_url = UserSlugToUserUrl(user_slug) + except InputError: + return fail( + http_code=HTTP_400_BAD_REQUEST, + api_code=Code.BAD_ARGUMENTS, + msg="输入的简书个人主页链接无效", + ) + + result = ( + ARTICLE_FP_RANK_COLLECTION.find({"author.url": user_url}) + .sort(order_by, 1 if order_direction == "asc" else -1) + .skip(offset) + .limit(limit) + ) + + records: List[GetOnArticleRankRecordItem] = [] + async for item in result: + records.append( + GetOnArticleRankRecordItem( + date=item["date"], + ranking=item["ranking"], + article_title=item["article"]["title"], + article_url=item["article"]["url"], + FP_reward=item["reward"]["to_author"], + ) + ) + + return success( + data=GetOnArticleRankRecordsResponse( + records=records, + ) + ) + + +@get( + "/name/{user_name: str}/on-article-rank-records", + summary="通过昵称获取用户上榜记录", + responses={ + 200: generate_response_spec(GetOnArticleRankRecordsResponse), + 400: generate_response_spec(), + }, +) +async def get_on_article_rank_records_by_user_name_handler( + user_name: Annotated[str, Parameter(description="用户昵称", max_length=50)], + order_by: Annotated[ + Literal["date", "ranking"], Parameter(description="排序依据") + ] = "date", + order_direction: Annotated[ + Literal["asc", "desc"], Parameter(description="排序方向") + ] = "desc", + offset: Annotated[int, Parameter(description="分页偏移", ge=0)] = 0, + limit: Annotated[int, Parameter(description="结果数量", gt=0, lt=100)] = 20, +) -> Response: + result = ( + ARTICLE_FP_RANK_COLLECTION.find({"author.name": user_name}) + .sort(order_by, 1 if order_direction == "asc" else -1) + .skip(offset) + .limit(limit) + ) + + records: List[GetOnArticleRankRecordItem] = [] + async for item in result: + records.append( + GetOnArticleRankRecordItem( + date=item["date"], + ranking=item["ranking"], + article_title=item["article"]["title"], + article_url=item["article"]["url"], + FP_reward=item["reward"]["to_author"], + ) + ) + + return success( + data=GetOnArticleRankRecordsResponse( + records=records, + ) + ) + + +class GetOnArticleRankSummaryResponse(Struct, **RESPONSE_STRUCT_CONFIG): + top10: int + top30: int + top50: int + total: int + + +@get( + "/{user_slug: str}/on-article-rank-summary", + summary="获取用户上榜摘要", + responses={ + 200: generate_response_spec(GetOnArticleRankSummaryResponse), + 400: generate_response_spec(), + }, +) +async def get_on_article_rank_summary_handler( + user_slug: Annotated[ + str, Parameter(description="用户 slug", min_length=6, max_length=12) + ], +) -> Response: + try: + user_url = UserSlugToUserUrl(user_slug) + except InputError: + return fail( + http_code=HTTP_400_BAD_REQUEST, + api_code=Code.BAD_ARGUMENTS, + msg="输入的简书个人主页链接无效", + ) + + records = ARTICLE_FP_RANK_COLLECTION.find( + {"author.url": user_url}, + {"_id": False, "ranking": True}, + ) + + top10 = 0 + top30 = 0 + top50 = 0 + total = 0 + async for item in records: + ranking = item["ranking"] + if ranking <= 10: + top10 += 1 + if ranking <= 30: + top30 += 1 + if ranking <= 50: + top50 += 1 + + total += 1 + + return success( + data=GetOnArticleRankSummaryResponse( + top10=top10, + top30=top30, + top50=top50, + total=total, + ) + ) + + +@get( + "/name/{user_name: str}/on-article-rank-summary", + summary="根据昵称获取用户上榜摘要", + responses={ + 200: generate_response_spec(GetOnArticleRankSummaryResponse), + 400: generate_response_spec(), + }, +) +async def get_on_article_rank_summary_by_user_name_handler( + user_name: Annotated[str, Parameter(description="用户昵称", max_length=50)], +) -> Response: + records = ARTICLE_FP_RANK_COLLECTION.find( + {"author.name": user_name}, + {"_id": False, "ranking": True}, + ) + + top10 = 0 + top30 = 0 + top50 = 0 + total = 0 + async for item in records: + ranking = item["ranking"] + if ranking <= 10: + top10 += 1 + if ranking <= 30: + top30 += 1 + if ranking <= 50: + top50 += 1 + + total += 1 + + return success( + data=GetOnArticleRankSummaryResponse( + top10=top10, + top30=top30, + top50=top50, + total=total, + ) + ) + + +class GetNameAutocompleteResponse(Struct, **RESPONSE_STRUCT_CONFIG): + names: List[str] + + +@get( + "/name-autocomplete", + summary="获取用户昵称自动补全", + responses={ + 200: generate_response_spec(GetNameAutocompleteResponse), + }, +) +async def get_name_autocomplete_handler( + name_part: Annotated[str, Parameter(description="用户昵称片段", max_length=50)], + limit: Annotated[int, Parameter(description="结果数量", gt=0, le=100)] = 5, +) -> Response: + result = await ARTICLE_FP_RANK_COLLECTION.distinct( + "author.name", + { + "author.name": { + "$regex": f"^{name_part}", + }, + }, + ) + result = result[:limit] + + return success( + data=GetNameAutocompleteResponse( + names=result, + ) + ) + + +class GetHistoryNamesOnArticleRankSummaryResponse(Struct, **RESPONSE_STRUCT_CONFIG): + history_names_onrank_summary: Dict[str, int] + user_url: Optional[str] = None + + +@get( + "/name/{user_name: str}/history-names-on-article-rank-summary", + summary="获取用户曾用昵称上榜摘要", + responses={ + 200: generate_response_spec(GetHistoryNamesOnArticleRankSummaryResponse), + }, +) +async def get_history_names_on_article_rank_summary_handler( + user_name: Annotated[ + str, Parameter(description="用户昵称", max_length=50) + ], +) -> Response: + url_query = await ARTICLE_FP_RANK_COLLECTION.find_one({"author.name": user_name}) + if not url_query: + return success( + data=GetHistoryNamesOnArticleRankSummaryResponse( + history_names_onrank_summary={}, + ) + ) + + user_url = url_query["author"]["url"] + + result = ARTICLE_FP_RANK_COLLECTION.aggregate( + [ + { + "$match": { + "author.url": user_url, + }, + }, + { + "$group": { + "_id": "$author.name", + "count": {"$sum": 1}, + } + }, + # 排除当前昵称 + { + "$match": { + "_id": { + "$ne": user_name, + }, + }, + }, + ] + ) + + history_names_onrank_summary: Dict[str, int] = {} + async for item in result: + history_names_onrank_summary[item["_id"]] = item["count"] + + return success( + data=GetHistoryNamesOnArticleRankSummaryResponse( + user_url=user_url, + history_names_onrank_summary=history_names_onrank_summary, + ) + ) + + +USERS_ROUTER = Router( + path="/users", + route_handlers=[ + get_vip_info_handler, + get_lottery_win_records, + get_on_article_rank_records_handler, + get_on_article_rank_records_by_user_name_handler, + get_on_article_rank_summary_handler, + get_on_article_rank_summary_by_user_name_handler, + get_name_autocomplete_handler, + get_history_names_on_article_rank_summary_handler, + ], + tags=["用户"], +) diff --git a/backend/app.py b/backend/app.py new file mode 100644 index 0000000..16baf2b --- /dev/null +++ b/backend/app.py @@ -0,0 +1,34 @@ +from litestar import Litestar +from litestar.openapi import OpenAPIConfig, OpenAPIController +from litestar.openapi.spec import Server +from sspeedup.api.litestar import EXCEPTION_HANDLERS + +from api import API_ROUTER + + +class CustomOpenAPIController(OpenAPIController): + path = "/docs" + swagger_ui_version = "5.10.3" + swagger_css_url = ( + "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.10.3/swagger-ui.css" + ) + swagger_ui_bundle_js_url = ( + "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.10.3/swagger-ui-bundle.js" + ) + swagger_ui_standalone_preset_js_url = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.10.3/swagger-ui-standalone-preset.js" + favicon_url = "https://tools.sscreator.com/favicon-vector.svg" + + +app = Litestar( + route_handlers=[API_ROUTER], + exception_handlers=EXCEPTION_HANDLERS, + openapi_config=OpenAPIConfig( + openapi_controller=CustomOpenAPIController, + title="JTools API", + version="v1.0.0", + servers=[Server(description="主端点", url="/api")], + use_handler_docstrings=True, + root_schema_site="swagger", + enabled_endpoints={"swagger", "openapi.json"}, + ), +) diff --git a/backend/main.py b/backend/main.py index 8bfa437..812e51f 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,12 +1,22 @@ -from sanic import Sanic +import logging +import logging.config + +from uvicorn import run as uvicorn_run -from api import api_blueprint from utils.config import config -from utils.log import run_logger +from utils.log import logger -app = Sanic(__name__) -app.blueprint(api_blueprint) +logging.getLogger("httpx").setLevel(logging.CRITICAL) +logging.getLogger("httpcore").setLevel(logging.CRITICAL) if __name__ == "__main__": - run_logger.info("启动 API 服务...") - app.run(host="0.0.0.0", port=config.deploy.port, single_process=True) + logger.info("启动 API 服务") + uvicorn_run( + app="app:app", + host=config.deploy.host, + port=config.deploy.port, + log_level=config.deploy.uvicorn_log_level, + workers=config.deploy.workers, + reload=config.deploy.reload, + access_log=config.deploy.access_log, + ) diff --git a/backend/poetry.lock b/backend/poetry.lock index d88bdba..e7e144f 100644 --- a/backend/poetry.lock +++ b/backend/poetry.lock @@ -1,117 +1,46 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. - -[[package]] -name = "aiofiles" -version = "23.1.0" -description = "File support for asyncio." -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "aiofiles-23.1.0-py3-none-any.whl", hash = "sha256:9312414ae06472eb6f1d163f555e466a23aed1c8f60c30cccf7121dba2e53eb2"}, - {file = "aiofiles-23.1.0.tar.gz", hash = "sha256:edd247df9a19e0db16534d4baaf536d6609a43e1de5401d7a4c1c148753a1635"}, -] - -[[package]] -name = "annotated-types" -version = "0.5.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.7" -files = [ - {file = "annotated_types-0.5.0-py3-none-any.whl", hash = "sha256:58da39888f92c276ad970249761ebea80ba544b77acddaa1a4d6cf78287d45fd"}, - {file = "annotated_types-0.5.0.tar.gz", hash = "sha256:47cdc3490d9ac1506ce92c7aaa76c579dc3509ff11e098fc867e5130ab7be802"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "anyio" -version = "3.7.1" +version = "4.1.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, + {file = "anyio-4.1.0-py3-none-any.whl", hash = "sha256:56a415fbc462291813a94528a779597226619c8e78af7de0507333f700011e5f"}, + {file = "anyio-4.1.0.tar.gz", hash = "sha256:5a0bec7085176715be77df87fc66d6c9d70626bd752fcc85f57cdbee5b3760da"}, ] [package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] - -[[package]] -name = "black" -version = "23.7.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, - {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, - {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, - {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, - {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, - {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, - {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, - {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, - {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, - {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, - {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2023.11.17" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -130,13 +59,13 @@ files = [ [[package]] name = "dnspython" -version = "2.4.1" +version = "2.4.2" description = "DNS toolkit" optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "dnspython-2.4.1-py3-none-any.whl", hash = "sha256:5b7488477388b8c0b70a8ce93b227c5603bc7b77f1565afe8e729c36c51447d7"}, - {file = "dnspython-2.4.1.tar.gz", hash = "sha256:c33971c79af5be968bb897e95c2448e11a645ee84d93b265ce0b7aabe5dfdca8"}, + {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"}, + {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"}, ] [package.extras] @@ -149,18 +78,33 @@ wmi = ["wmi (>=1.5.1,<2.0.0)"] [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.2.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "faker" +version = "20.1.0" +description = "Faker is a Python package that generates fake data for you." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Faker-20.1.0-py3-none-any.whl", hash = "sha256:aeb3e26742863d1e387f9d156f1c36e14af63bf5e6f36fb39b8c27f6a903be38"}, + {file = "Faker-20.1.0.tar.gz", hash = "sha256:562a3a09c3ed3a1a7b20e13d79f904dfdfc5e740f72813ecf95e4cf71e5a2f52"}, +] + +[package.dependencies] +python-dateutil = ">=2.4" +typing-extensions = {version = ">=3.10.0.1", markers = "python_version <= \"3.8\""} + [[package]] name = "h11" version = "0.14.0" @@ -198,17 +142,6 @@ files = [ {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, ] -[[package]] -name = "html5tagger" -version = "1.3.0" -description = "Pythonic HTML generation/templating (no template files)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "html5tagger-1.3.0-py3-none-any.whl", hash = "sha256:ce14313515edffec8ed8a36c5890d023922641171b4e6e5774ad1a74998f5351"}, - {file = "html5tagger-1.3.0.tar.gz", hash = "sha256:84fa3dfb49e5c83b79bbd856ab7b1de8e2311c3bb46a8be925f119e3880a8da9"}, -] - [[package]] name = "httpcore" version = "0.17.3" @@ -232,46 +165,47 @@ socks = ["socksio (==1.*)"] [[package]] name = "httptools" -version = "0.6.0" +version = "0.6.1" description = "A collection of framework independent HTTP protocol utils." optional = false -python-versions = ">=3.5.0" +python-versions = ">=3.8.0" files = [ - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339"}, - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c"}, - {file = "httptools-0.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38"}, - {file = "httptools-0.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2"}, - {file = "httptools-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4"}, - {file = "httptools-0.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201"}, - {file = "httptools-0.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d"}, - {file = "httptools-0.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd"}, - {file = "httptools-0.6.0.tar.gz", hash = "sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, + {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, + {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, + {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, + {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, + {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, + {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, ] [package.extras] @@ -314,15 +248,52 @@ files = [ [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] +[[package]] +name = "importlib-metadata" +version = "6.9.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.9.0-py3-none-any.whl", hash = "sha256:1c8dc6839ddc9771412596926f24cb5a553bbd40624ee2c7e55e531542bed3b8"}, + {file = "importlib_metadata-6.9.0.tar.gz", hash = "sha256:e8acb523c335a91822674e149b46c0399ec4d328c4d1f6e49c273da5ff0201b9"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "importlib-resources" +version = "6.1.1" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, + {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] + [[package]] name = "jianshuresearchtools" version = "2.11.0" @@ -343,6 +314,52 @@ full = ["tomd (>=0.1.3,<0.2.0)", "ujson (>=5.7.0,<6.0.0)"] high-perf = ["ujson (>=5.7.0,<6.0.0)"] md-convert = ["tomd (>=0.1.3,<0.2.0)"] +[[package]] +name = "litestar" +version = "2.4.2" +description = "Litestar - A production-ready, highly performant, extensible ASGI API Framework" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "litestar-2.4.2-py3-none-any.whl", hash = "sha256:562ef5075297694a428e5c162f8ec4073676ef3a4dd82279f85ede7cd88aa5b4"}, + {file = "litestar-2.4.2.tar.gz", hash = "sha256:a630ebe6575429d06b8af87dd20f2c27e91f14bcb73b6a9e5dd963e517b4891e"}, +] + +[package.dependencies] +anyio = ">=3" +click = "*" +httpx = ">=0.22" +importlib-metadata = {version = "*", markers = "python_version < \"3.10\""} +importlib-resources = {version = ">=5.12.0", markers = "python_version < \"3.9\""} +msgspec = ">=0.18.2" +multidict = ">=6.0.2" +polyfactory = ">=2.6.3" +pyyaml = "*" +rich = ">=13.0.0" +rich-click = "*" +typing-extensions = "*" + +[package.extras] +annotated-types = ["annotated-types"] +attrs = ["attrs"] +brotli = ["brotli"] +cli = ["jsbeautifier", "uvicorn[standard]", "uvloop (>=0.18.0)"] +cryptography = ["cryptography"] +full = ["litestar[annotated-types,attrs,brotli,cli,cryptography,jinja,jwt,mako,minijinja,opentelemetry,piccolo,picologging,prometheus,pydantic,redis,sqlalchemy,standard,structlog]"] +jinja = ["jinja2 (>=3.1.2)"] +jwt = ["cryptography", "python-jose"] +mako = ["mako (>=1.2.4)"] +minijinja = ["minijinja (>=1.0.0)"] +opentelemetry = ["opentelemetry-instrumentation-asgi"] +piccolo = ["piccolo"] +picologging = ["picologging"] +prometheus = ["prometheus-client"] +pydantic = ["email-validator", "pydantic", "pydantic-extra-types"] +redis = ["redis[hiredis] (>=4.4.4)"] +sqlalchemy = ["advanced-alchemy (>=0.2.2,<1.0.0)"] +standard = ["fast-query-parsers (>=1.0.2)", "jinja2", "jsbeautifier", "uvicorn[standard]", "uvloop (>=0.18.0)"] +structlog = ["structlog"] + [[package]] name = "lxml" version = "4.9.3" @@ -450,6 +467,117 @@ html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] source = ["Cython (>=0.29.35)"] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "motor" +version = "3.3.2" +description = "Non-blocking MongoDB driver for Tornado or asyncio" +optional = false +python-versions = ">=3.7" +files = [ + {file = "motor-3.3.2-py3-none-any.whl", hash = "sha256:6fe7e6f0c4f430b9e030b9d22549b732f7c2226af3ab71ecc309e4a1b7d19953"}, + {file = "motor-3.3.2.tar.gz", hash = "sha256:d2fc38de15f1c8058f389c1a44a4d4105c0405c48c061cd492a654496f7bc26a"}, +] + +[package.dependencies] +pymongo = ">=4.5,<5" + +[package.extras] +aws = ["pymongo[aws] (>=4.5,<5)"] +encryption = ["pymongo[encryption] (>=4.5,<5)"] +gssapi = ["pymongo[gssapi] (>=4.5,<5)"] +ocsp = ["pymongo[ocsp] (>=4.5,<5)"] +snappy = ["pymongo[snappy] (>=4.5,<5)"] +srv = ["pymongo[srv] (>=4.5,<5)"] +test = ["aiohttp (<3.8.6)", "mockupdb", "motor[encryption]", "pytest (>=7)", "tornado (>=5)"] +zstd = ["pymongo[zstd] (>=4.5,<5)"] + +[[package]] +name = "msgspec" +version = "0.18.4" +description = "A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML." +optional = false +python-versions = ">=3.8" +files = [ + {file = "msgspec-0.18.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4d24a291a3c94a7f5e26e8f5ef93e72bf26c10dfeed4d6ae8fc87ead02f4e265"}, + {file = "msgspec-0.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9714b78965047638c01c818b4b418133d77e849017de17b0655ee37b714b47a6"}, + {file = "msgspec-0.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:241277eed9fd91037372519fca62aecf823f7229c1d351030d0be5e3302580c1"}, + {file = "msgspec-0.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d08175cbb55c1a87dd258645dce6cd00705d6088bf88e7cf510a9d5c24b0720b"}, + {file = "msgspec-0.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:da13a06e77d683204eee3b134b08ecd5e4759a79014027b1bcd7a12c614b466d"}, + {file = "msgspec-0.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73e70217ff5e4ac244c8f1b0769215cbc81e1c904e135597a5b71162857e6c27"}, + {file = "msgspec-0.18.4-cp310-cp310-win_amd64.whl", hash = "sha256:dc25e6100026f5e1ecb5120150f4e78beb909cbeb0eb724b9982361b75c86c6b"}, + {file = "msgspec-0.18.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e14287c3405093645b3812e3436598edd383b9ed724c686852e65d569f39f953"}, + {file = "msgspec-0.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:acdcef2fccfff02f80ac8673dbeab205c288b680d81e05bfb5ae0be6b1502a7e"}, + {file = "msgspec-0.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b052fd7d25a8aa2ffde10126ee1d97b4c6f3d81f3f3ab1258ff759a2bd794874"}, + {file = "msgspec-0.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:826dcb0dfaac0abbcf3a3ae991749900671796eb688b017a69a82bde1e624662"}, + {file = "msgspec-0.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:86800265f87f192a0daefe668e0a9634c35bf8af94b1f297e1352ac62d2e26da"}, + {file = "msgspec-0.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:227fee75a25080a8b3677cdd95b9c0c3652e27869004a084886c65eb558b3dd6"}, + {file = "msgspec-0.18.4-cp311-cp311-win_amd64.whl", hash = "sha256:828ef92f6654915c36ef6c7d8fec92404a13be48f9ff85f060e73b30299bafe1"}, + {file = "msgspec-0.18.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8476848f4937da8faec53700891694df2e412453cb7445991f0664cdd1e2dd16"}, + {file = "msgspec-0.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f668102958841c5bbd3ba7cf569a65d17aa3bdcf22124f394dfcfcf53cc5a9b9"}, + {file = "msgspec-0.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc2405dba5af6478dedd3512bb92197b6f9d1bc0095655afbe9b54d7a426f19f"}, + {file = "msgspec-0.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99f3c13569a5add0980b0d8c6e0bd94a656f6363b26107435b3091df979d228"}, + {file = "msgspec-0.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a198409f672f93534c9c36bdc9eea9fb536827bd63ea846882365516a961356"}, + {file = "msgspec-0.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e21bc5aae6b80dfe4eb75dc1bb29af65483f967d5522e9e3812115a0ba285cac"}, + {file = "msgspec-0.18.4-cp312-cp312-win_amd64.whl", hash = "sha256:44d551aee1ec8aa2d7b64762557c266bcbf7d5109f2246955718d05becc509d6"}, + {file = "msgspec-0.18.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bbbc08d59f74de5791bda63569f26a35ae1dd6bd20c55c3ceba5567b0e5a8ef1"}, + {file = "msgspec-0.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:87bc01949a35970398f5267df8ed4189c340727bb6feec99efdb9969dd05cf30"}, + {file = "msgspec-0.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96ccaef83adc0ce96d95328a03289cd5aead4fe400aac21fbe2008855a124a01"}, + {file = "msgspec-0.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6229dd49438d81ed7a3470e3cbc9646b1cc1b120d415a1786df880dabb1d1c4"}, + {file = "msgspec-0.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:55e578fd921c88de0d3a209fe5fd392bb66623924c6525b42cea37c72bf8d558"}, + {file = "msgspec-0.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e95bd0a946b5b7206f27c0f654f490231c9ad5e5a4ff65af8c986f5114dfaf0e"}, + {file = "msgspec-0.18.4-cp38-cp38-win_amd64.whl", hash = "sha256:7e95817021db96c43fd81244228e185b13b085cca3d5169af4e2dfe3ff412954"}, + {file = "msgspec-0.18.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:847d79f6f0b698671ff390aa5a66e207108f2c23b077ef9314ca4fe7819fa4ec"}, + {file = "msgspec-0.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e4294158c233884f3b3220f0e96a30d3e916a4781f9502ae6d477bd57bbc80ad"}, + {file = "msgspec-0.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb11ba2709019192636042df5c8db8738e45946735627021b7e7934714526e4"}, + {file = "msgspec-0.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b01efbf80a987a99e9079257c893c026dc661d4cd05caa1f7eabf4accc7f1fbc"}, + {file = "msgspec-0.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:991aa3c76d1b1ec84e840d0b3c96692af834e1f8a1e1a3974cbd189eaf0f2276"}, + {file = "msgspec-0.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8064908ddb3d95d3261aaca48fd38abb16ccf59dc3f2d01eb4e04591fc1e9bd4"}, + {file = "msgspec-0.18.4-cp39-cp39-win_amd64.whl", hash = "sha256:5f446f16ea57d70cceec29b7cb85ec0b3bea032e3dec316806e38575ea3a69b4"}, + {file = "msgspec-0.18.4.tar.gz", hash = "sha256:cb62030bd6b1a00b01a2fcb09735016011696304e6b1d3321e58022548268d3e"}, +] + +[package.extras] +dev = ["attrs", "coverage", "furo", "gcovr", "ipython", "msgpack", "mypy", "pre-commit", "pyright", "pytest", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "tomli", "tomli-w"] +doc = ["furo", "ipython", "sphinx", "sphinx-copybutton", "sphinx-design"] +test = ["attrs", "msgpack", "mypy", "pyright", "pytest", "pyyaml", "tomli", "tomli-w"] +toml = ["tomli", "tomli-w"] +yaml = ["pyyaml"] + [[package]] name = "multidict" version = "6.0.4" @@ -533,17 +661,6 @@ files = [ {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, ] -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - [[package]] name = "nodeenv" version = "1.8.0" @@ -559,255 +676,132 @@ files = [ setuptools = "*" [[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." +name = "polyfactory" +version = "2.12.0" +description = "Mock data generation factories" optional = false -python-versions = ">=3.7" +python-versions = "<4.0,>=3.8" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, -] - -[[package]] -name = "platformdirs" -version = "3.10.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "pydantic" -version = "2.1.1" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-2.1.1-py3-none-any.whl", hash = "sha256:43bdbf359d6304c57afda15c2b95797295b702948082d4c23851ce752f21da70"}, - {file = "pydantic-2.1.1.tar.gz", hash = "sha256:22d63db5ce4831afd16e7c58b3192d3faf8f79154980d9397d9867254310ba4b"}, + {file = "polyfactory-2.12.0-py3-none-any.whl", hash = "sha256:35c170f62763ec7e64d38b0981e4a95e3dd32870f10e1251c5f97dda0525bd64"}, + {file = "polyfactory-2.12.0.tar.gz", hash = "sha256:26dc3a52baae1ebd6386708d9a99f8ea4ef57c9d45e556815ee5e44a1cd27fc0"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.4.0" -typing-extensions = ">=4.6.1" +faker = "*" +typing-extensions = "*" [package.extras] -email = ["email-validator (>=2.0.0)"] +attrs = ["attrs (>=22.2.0)"] +beanie = ["beanie", "pydantic[email]"] +full = ["attrs", "beanie", "msgspec", "odmantic", "pydantic", "sqlalchemy"] +msgspec = ["msgspec"] +odmantic = ["odmantic", "pydantic[email]"] +pydantic = ["pydantic[email]"] +sqlalchemy = ["sqlalchemy (>=1.4.29)"] [[package]] -name = "pydantic-core" -version = "2.4.0" -description = "" +name = "pygments" +version = "2.17.2" +description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "pydantic_core-2.4.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:2ca4687dd996bde7f3c420def450797feeb20dcee2b9687023e3323c73fc14a2"}, - {file = "pydantic_core-2.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:782fced7d61469fd1231b184a80e4f2fa7ad54cd7173834651a453f96f29d673"}, - {file = "pydantic_core-2.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6213b471b68146af97b8551294e59e7392c2117e28ffad9c557c65087f4baee3"}, - {file = "pydantic_core-2.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63797499a219d8e81eb4e0c42222d0a4c8ec896f5c76751d4258af95de41fdf1"}, - {file = "pydantic_core-2.4.0-cp310-cp310-manylinux_2_24_armv7l.whl", hash = "sha256:0455876d575a35defc4da7e0a199596d6c773e20d3d42fa1fc29f6aa640369ed"}, - {file = "pydantic_core-2.4.0-cp310-cp310-manylinux_2_24_ppc64le.whl", hash = "sha256:8c938c96294d983dcf419b54dba2d21056959c22911d41788efbf949a29ae30d"}, - {file = "pydantic_core-2.4.0-cp310-cp310-manylinux_2_24_s390x.whl", hash = "sha256:878a5017d93e776c379af4e7b20f173c82594d94fa073059bcc546789ad50bf8"}, - {file = "pydantic_core-2.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:69159afc2f2dc43285725f16143bc5df3c853bc1cb7df6021fce7ef1c69e8171"}, - {file = "pydantic_core-2.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54df7df399b777c1fd144f541c95d351b3aa110535a6810a6a569905d106b6f3"}, - {file = "pydantic_core-2.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e412607ca89a0ced10758dfb8f9adcc365ce4c1c377e637c01989a75e9a9ec8a"}, - {file = "pydantic_core-2.4.0-cp310-none-win32.whl", hash = "sha256:853f103e2b9a58832fdd08a587a51de8b552ae90e1a5d167f316b7eabf8d7dde"}, - {file = "pydantic_core-2.4.0-cp310-none-win_amd64.whl", hash = "sha256:3ba2c9c94a9176f6321a879c8b864d7c5b12d34f549a4c216c72ce213d7d953c"}, - {file = "pydantic_core-2.4.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:a8b7acd04896e8f161e1500dc5f218017db05c1d322f054e89cbd089ce5d0071"}, - {file = "pydantic_core-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:16468bd074fa4567592d3255bf25528ed41e6b616d69bf07096bdb5b66f947d1"}, - {file = "pydantic_core-2.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cba5ad5eef02c86a1f3da00544cbc59a510d596b27566479a7cd4d91c6187a11"}, - {file = "pydantic_core-2.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7206e41e04b443016e930e01685bab7a308113c0b251b3f906942c8d4b48fcb"}, - {file = "pydantic_core-2.4.0-cp311-cp311-manylinux_2_24_armv7l.whl", hash = "sha256:c1375025f0bfc9155286ebae8eecc65e33e494c90025cda69e247c3ccd2bab00"}, - {file = "pydantic_core-2.4.0-cp311-cp311-manylinux_2_24_ppc64le.whl", hash = "sha256:3534118289e33130ed3f1cc487002e8d09b9f359be48b02e9cd3de58ce58fba9"}, - {file = "pydantic_core-2.4.0-cp311-cp311-manylinux_2_24_s390x.whl", hash = "sha256:94d2b36a74623caab262bf95f0e365c2c058396082bd9d6a9e825657d0c1e7fa"}, - {file = "pydantic_core-2.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af24ad4fbaa5e4a2000beae0c3b7fd1c78d7819ab90f9370a1cfd8998e3f8a3c"}, - {file = "pydantic_core-2.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bf10963d8aed8bbe0165b41797c9463d4c5c8788ae6a77c68427569be6bead41"}, - {file = "pydantic_core-2.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68199ada7c310ddb8c76efbb606a0de656b40899388a7498954f423e03fc38be"}, - {file = "pydantic_core-2.4.0-cp311-none-win32.whl", hash = "sha256:6f855bcc96ed3dd56da7373cfcc9dcbabbc2073cac7f65c185772d08884790ce"}, - {file = "pydantic_core-2.4.0-cp311-none-win_amd64.whl", hash = "sha256:de39eb3bab93a99ddda1ac1b9aa331b944d8bcc4aa9141148f7fd8ee0299dafc"}, - {file = "pydantic_core-2.4.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:f773b39780323a0499b53ebd91a28ad11cde6705605d98d999dfa08624caf064"}, - {file = "pydantic_core-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a297c0d6c61963c5c3726840677b798ca5b7dfc71bc9c02b9a4af11d23236008"}, - {file = "pydantic_core-2.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:546064c55264156b973b5e65e5fafbe5e62390902ce3cf6b4005765505e8ff56"}, - {file = "pydantic_core-2.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36ba9e728588588f0196deaf6751b9222492331b5552f865a8ff120869d372e0"}, - {file = "pydantic_core-2.4.0-cp312-cp312-manylinux_2_24_armv7l.whl", hash = "sha256:57a53a75010c635b3ad6499e7721eaa3b450e03f6862afe2dbef9c8f66e46ec8"}, - {file = "pydantic_core-2.4.0-cp312-cp312-manylinux_2_24_ppc64le.whl", hash = "sha256:4b262bbc13022f2097c48a21adcc360a81d83dc1d854c11b94953cd46d7d3c07"}, - {file = "pydantic_core-2.4.0-cp312-cp312-manylinux_2_24_s390x.whl", hash = "sha256:01947ad728f426fa07fcb26457ebf90ce29320259938414bc0edd1476e75addb"}, - {file = "pydantic_core-2.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b2799c2eaf182769889761d4fb4d78b82bc47dae833799fedbf69fc7de306faa"}, - {file = "pydantic_core-2.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a08fd490ba36d1fbb2cd5dcdcfb9f3892deb93bd53456724389135712b5fc735"}, - {file = "pydantic_core-2.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1e8a7c62d15a5c4b307271e4252d76ebb981d6251c6ecea4daf203ef0179ea4f"}, - {file = "pydantic_core-2.4.0-cp312-none-win32.whl", hash = "sha256:9206c14a67c38de7b916e486ae280017cf394fa4b1aa95cfe88621a4e1d79725"}, - {file = "pydantic_core-2.4.0-cp312-none-win_amd64.whl", hash = "sha256:884235507549a6b2d3c4113fb1877ae263109e787d9e0eb25c35982ab28d0399"}, - {file = "pydantic_core-2.4.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:4cbe929efa77a806e8f1a97793f2dc3ea3475ae21a9ed0f37c21320fe93f6f50"}, - {file = "pydantic_core-2.4.0-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:9137289de8fe845c246a8c3482dd0cb40338846ba683756d8f489a4bd8fddcae"}, - {file = "pydantic_core-2.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5d8e764b5646623e57575f624f8ebb8f7a9f7fd1fae682ef87869ca5fec8dcf"}, - {file = "pydantic_core-2.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fba0aff4c407d0274e43697e785bcac155ad962be57518d1c711f45e72da70f"}, - {file = "pydantic_core-2.4.0-cp37-cp37m-manylinux_2_24_armv7l.whl", hash = "sha256:30527d173e826f2f7651f91c821e337073df1555e3b5a0b7b1e2c39e26e50678"}, - {file = "pydantic_core-2.4.0-cp37-cp37m-manylinux_2_24_ppc64le.whl", hash = "sha256:bd7d1dde70ff3e09e4bc7a1cbb91a7a538add291bfd5b3e70ef1e7b45192440f"}, - {file = "pydantic_core-2.4.0-cp37-cp37m-manylinux_2_24_s390x.whl", hash = "sha256:72f1216ca8cef7b8adacd4c4c6b89c3b0c4f97503197f5284c80f36d6e4edd30"}, - {file = "pydantic_core-2.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b013c7861a7c7bfcec48fd709513fea6f9f31727e7a0a93ca0dd12e056740717"}, - {file = "pydantic_core-2.4.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:478f5f6d7e32bd4a04d102160efb2d389432ecf095fe87c555c0a6fc4adfc1a4"}, - {file = "pydantic_core-2.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d9610b47b5fe4aacbbba6a9cb5f12cbe864eec99dbfed5710bd32ef5dd8a5d5b"}, - {file = "pydantic_core-2.4.0-cp37-none-win32.whl", hash = "sha256:ff246c0111076c8022f9ba325c294f2cb5983403506989253e04dbae565e019b"}, - {file = "pydantic_core-2.4.0-cp37-none-win_amd64.whl", hash = "sha256:d0c2b713464a8e263a243ae7980d81ce2de5ac59a9f798a282e44350b42dc516"}, - {file = "pydantic_core-2.4.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:12ef6838245569fd60a179fade81ca4b90ae2fa0ef355d616f519f7bb27582db"}, - {file = "pydantic_core-2.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:49db206eb8fdc4b4f30e6e3e410584146d813c151928f94ec0db06c4f2595538"}, - {file = "pydantic_core-2.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a507d7fa44688bbac76af6521e488b3da93de155b9cba6f2c9b7833ce243d59"}, - {file = "pydantic_core-2.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffe18407a4d000c568182ce5388bbbedeb099896904e43fc14eee76cfae6dec5"}, - {file = "pydantic_core-2.4.0-cp38-cp38-manylinux_2_24_armv7l.whl", hash = "sha256:fa8e48001b39d54d97d7b380a0669fa99fc0feeb972e35a2d677ba59164a9a22"}, - {file = "pydantic_core-2.4.0-cp38-cp38-manylinux_2_24_ppc64le.whl", hash = "sha256:394f12a2671ff8c4dfa2e85be6c08be0651ad85bc1e6aa9c77c21671baaf28cd"}, - {file = "pydantic_core-2.4.0-cp38-cp38-manylinux_2_24_s390x.whl", hash = "sha256:2f9ea0355f90db2a76af530245fa42f04d98f752a1236ed7c6809ec484560d5b"}, - {file = "pydantic_core-2.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:61d4e713f467abcdd59b47665d488bb898ad3dd47ce7446522a50e0cbd8e8279"}, - {file = "pydantic_core-2.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:453862ab268f6326b01f067ed89cb3a527d34dc46f6f4eeec46a15bbc706d0da"}, - {file = "pydantic_core-2.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:56a85fa0dab1567bd0cac10f0c3837b03e8a0d939e6a8061a3a420acd97e9421"}, - {file = "pydantic_core-2.4.0-cp38-none-win32.whl", hash = "sha256:0d726108c1c0380b88b6dd4db559f0280e0ceda9e077f46ff90bc85cd4d03e77"}, - {file = "pydantic_core-2.4.0-cp38-none-win_amd64.whl", hash = "sha256:047580388644c473b934d27849f8ed8dbe45df0adb72104e78b543e13bf69762"}, - {file = "pydantic_core-2.4.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:867d3eea954bea807cabba83cfc939c889a18576d66d197c60025b15269d7cc0"}, - {file = "pydantic_core-2.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:664402ef0c238a7f8a46efb101789d5f2275600fb18114446efec83cfadb5b66"}, - {file = "pydantic_core-2.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64e8012ad60a5f0da09ed48725e6e923d1be25f2f091a640af6079f874663813"}, - {file = "pydantic_core-2.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac2b680de398f293b68183317432b3d67ab3faeba216aec18de0c395cb5e3060"}, - {file = "pydantic_core-2.4.0-cp39-cp39-manylinux_2_24_armv7l.whl", hash = "sha256:8efc1be43b036c2b6bcfb1451df24ee0ddcf69c31351003daf2699ed93f5687b"}, - {file = "pydantic_core-2.4.0-cp39-cp39-manylinux_2_24_ppc64le.whl", hash = "sha256:d93aedbc4614cc21b9ab0d0c4ccd7143354c1f7cffbbe96ae5216ad21d1b21b5"}, - {file = "pydantic_core-2.4.0-cp39-cp39-manylinux_2_24_s390x.whl", hash = "sha256:af788b64e13d52fc3600a68b16d31fa8d8573e3ff2fc9a38f8a60b8d94d1f012"}, - {file = "pydantic_core-2.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97c6349c81cee2e69ef59eba6e6c08c5936e6b01c2d50b9e4ac152217845ae09"}, - {file = "pydantic_core-2.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cc086ddb6dc654a15deeed1d1f2bcb1cb924ebd70df9dca738af19f64229b06c"}, - {file = "pydantic_core-2.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e953353180bec330c3b830891d260b6f8e576e2d18db3c78d314e56bb2276066"}, - {file = "pydantic_core-2.4.0-cp39-none-win32.whl", hash = "sha256:6feb4b64d11d5420e517910d60a907d08d846cacaf4e029668725cd21d16743c"}, - {file = "pydantic_core-2.4.0-cp39-none-win_amd64.whl", hash = "sha256:153a61ac4030fa019b70b31fb7986461119230d3ba0ab661c757cfea652f4332"}, - {file = "pydantic_core-2.4.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:3fcf529382b282a30b466bd7af05be28e22aa620e016135ac414f14e1ee6b9e1"}, - {file = "pydantic_core-2.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2edef05b63d82568b877002dc4cb5cc18f8929b59077120192df1e03e0c633f8"}, - {file = "pydantic_core-2.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da055a1b0bfa8041bb2ff586b2cb0353ed03944a3472186a02cc44a557a0e661"}, - {file = "pydantic_core-2.4.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:77dadc764cf7c5405e04866181c5bd94a447372a9763e473abb63d1dfe9b7387"}, - {file = "pydantic_core-2.4.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a4ea23b07f29487a7bef2a869f68c7ee0e05424d81375ce3d3de829314c6b5ec"}, - {file = "pydantic_core-2.4.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:382f0baa044d674ad59455a5eff83d7965572b745cc72df35c52c2ce8c731d37"}, - {file = "pydantic_core-2.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:08f89697625e453421401c7f661b9d1eb4c9e4c0a12fd256eeb55b06994ac6af"}, - {file = "pydantic_core-2.4.0-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:43a405ce520b45941df9ff55d0cd09762017756a7b413bbad3a6e8178e64a2c2"}, - {file = "pydantic_core-2.4.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:584a7a818c84767af16ce8bda5d4f7fedb37d3d231fc89928a192f567e4ef685"}, - {file = "pydantic_core-2.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04922fea7b13cd480586fa106345fe06e43220b8327358873c22d8dfa7a711c7"}, - {file = "pydantic_core-2.4.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17156abac20a9feed10feec867fddd91a80819a485b0107fe61f09f2117fe5f3"}, - {file = "pydantic_core-2.4.0-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4e562cc63b04636cde361fd47569162f1daa94c759220ff202a8129902229114"}, - {file = "pydantic_core-2.4.0-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:90f3785146f701e053bb6b9e8f53acce2c919aca91df88bd4975be0cb926eb41"}, - {file = "pydantic_core-2.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e40b1e97edd3dc127aa53d8a5e539a3d0c227d71574d3f9ac1af02d58218a122"}, - {file = "pydantic_core-2.4.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:b27f3e67f6e031f6620655741b7d0d6bebea8b25d415924b3e8bfef2dd7bd841"}, - {file = "pydantic_core-2.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86c2eb12fb0f846262ace9d8f032dc6978b8cb26a058920ecb723dbcb87d05"}, - {file = "pydantic_core-2.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4665f7ed345012a8d2eddf4203ef145f5f56a291d010382d235b94e91813f88a"}, - {file = "pydantic_core-2.4.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:79262be5a292d1df060f29b9a7cdd66934801f987a817632d7552534a172709a"}, - {file = "pydantic_core-2.4.0-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5fd905a69ac74eaba5041e21a1e8b1a479dab2b41c93bdcc4c1cede3c12a8d86"}, - {file = "pydantic_core-2.4.0-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:2ad538b7e07343001934417cdc8584623b4d8823c5b8b258e75ec8d327cec969"}, - {file = "pydantic_core-2.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:dd2429f7635ad4857b5881503f9c310be7761dc681c467a9d27787b674d1250a"}, - {file = "pydantic_core-2.4.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:efff8b6761a1f6e45cebd1b7a6406eb2723d2d5710ff0d1b624fe11313693989"}, - {file = "pydantic_core-2.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32a1e0352558cd7ccc014ffe818c7d87b15ec6145875e2cc5fa4bb7351a1033d"}, - {file = "pydantic_core-2.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a027f41c5008571314861744d83aff75a34cf3a07022e0be32b214a5bc93f7f1"}, - {file = "pydantic_core-2.4.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1927f0e15d190f11f0b8344373731e28fd774c6d676d8a6cfadc95c77214a48b"}, - {file = "pydantic_core-2.4.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7aa82d483d5fb867d4fb10a138ffd57b0f1644e99f2f4f336e48790ada9ada5e"}, - {file = "pydantic_core-2.4.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b85778308bf945e9b33ac604e6793df9b07933108d20bdf53811bc7c2798a4af"}, - {file = "pydantic_core-2.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3ded19dcaefe2f6706d81e0db787b59095f4ad0fbadce1edffdf092294c8a23f"}, - {file = "pydantic_core-2.4.0.tar.gz", hash = "sha256:ec3473c9789cc00c7260d840c3db2c16dbfc816ca70ec87a00cddfa3e1a1cdd5"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" +[package.extras] +plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymongo" -version = "4.4.1" +version = "4.6.1" description = "Python driver for MongoDB " optional = false python-versions = ">=3.7" files = [ - {file = "pymongo-4.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bbdd6c719cc2ea440d7245ba71ecdda507275071753c6ffe9c8232647246f575"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux1_i686.whl", hash = "sha256:a438508dd8007a4a724601c3790db46fe0edc3d7d172acafc5f148ceb4a07815"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:3a350d03959f9d5b7f2ea0621f5bb2eb3927b8fc1c4031d12cfd3949839d4f66"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux2014_i686.whl", hash = "sha256:e6d5d2c97c35f83dc65ccd5d64c7ed16eba6d9403e3744e847aee648c432f0bb"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux2014_ppc64le.whl", hash = "sha256:1944b16ffef3573ae064196460de43eb1c865a64fed23551b5eac1951d80acca"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux2014_s390x.whl", hash = "sha256:912b0fdc16500125dc1837be8b13c99d6782d93d6cd099d0e090e2aca0b6d100"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:d1b1c8eb21de4cb5e296614e8b775d5ecf9c56b7d3c6000f4bfdb17f9e244e72"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3b508e0de613b906267f2c484cb5e9afd3a64680e1af23386ca8f99a29c6145"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f41feb8cf429799ac43ed34504839954aa7d907f8bd9ecb52ed5ff0d2ea84245"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1897123c4bede1af0c264a3bc389a2505bae50d85e4f211288d352928c02d017"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c4bcd285bf0f5272d50628e4ea3989738e3af1251b2dd7bf50da2d593f3a56"}, - {file = "pymongo-4.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:995b868ccc9df8d36cb28142363e3911846fe9f43348d942951f60cdd7f62224"}, - {file = "pymongo-4.4.1-cp310-cp310-win32.whl", hash = "sha256:a5198beca36778f19a98b56f541a0529502046bc867b352dda5b6322e1ddc4fd"}, - {file = "pymongo-4.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:a86d20210c9805a032cda14225087ec483613aff0955327c7871a3c980562c5b"}, - {file = "pymongo-4.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5a2a1da505ea78787b0382c92dc21a45d19918014394b220c4734857e9c73694"}, - {file = "pymongo-4.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35545583396684ea70a0b005034a469bf3f447732396e5b3d50bec94890b8d5c"}, - {file = "pymongo-4.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5248fdf7244a5e976279fe154d116c73f6206e0be71074ea9d9b1e73b5893dd5"}, - {file = "pymongo-4.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44381b817eeb47a41bbfbd279594a7fb21017e0e3e15550eb0fd3758333097f3"}, - {file = "pymongo-4.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f0bd25de90b804cc95e548f55f430df2b47f242a4d7bbce486db62f3b3c981f"}, - {file = "pymongo-4.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d67f4029c57b36a0278aeae044ce382752c078c7625cef71b5e2cf3e576961f9"}, - {file = "pymongo-4.4.1-cp311-cp311-win32.whl", hash = "sha256:8082eef0d8c711c9c272906fa469965e52b44dbdb8a589b54857b1351dc2e511"}, - {file = "pymongo-4.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:980da627edc1275896d7d4670596433ec66e1f452ec244e07bbb2f91c955b581"}, - {file = "pymongo-4.4.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:6cf08997d3ecf9a1eabe12c35aa82a5c588f53fac054ed46fe5c16a0a20ea43d"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a6750449759f0a83adc9df3a469483a8c3eef077490b76f30c03dc8f7a4b1d66"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:efa67f46c1678df541e8f41247d22430905f80a3296d9c914aaa793f2c9fa1db"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9a5e16a32fb1000c72a8734ddd8ae291974deb5d38d40d1bdd01dbe4024eeb0"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:36b0b06c6e830d190215fced82872e5fd8239771063afa206f9adc09574018a3"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4ec9c6d4547c93cf39787c249969f7348ef6c4d36439af10d57b5ee65f3dfbf9"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:5368801ca6b66aacc5cc013258f11899cd6a4c3bb28cec435dd67f835905e9d2"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:91848d555155ad4594de5e575b6452adc471bc7bc4b4d2b1f4f15a78a8af7843"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0f08a2dba1469252462c414b66cb416c7f7295f2c85e50f735122a251fcb131"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2fe4bbf2b2c91e4690b5658b0fbb98ca6e0a8fba9ececd65b4e7d2d1df3e9b01"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e307d67641d0e2f7e7d6ee3dad880d090dace96cc1d95c99d15bd9f545a1168"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d43634594f2486cc9bb604a1dc0914234878c4faf6604574a25260cb2faaa06"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef0e3279e72cccc3dc7be75b12b1e54cc938d7ce13f5f22bea844b9d9d5fecd4"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05935f5a4bbae0a99482147588351b7b17999f4a4e6e55abfb74367ac58c0634"}, - {file = "pymongo-4.4.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:854d92d2437e3496742e17342496e1f3d9efb22455501fd6010aa3658138e457"}, - {file = "pymongo-4.4.1-cp37-cp37m-win32.whl", hash = "sha256:ddffc0c6d0e92cf43dc6c47639d1ef9ab3c280db2998a33dbb9953bd864841e1"}, - {file = "pymongo-4.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2259302d8ab51cd56c3d9d5cca325977e35a0bb3a15a297ec124d2da56c214f7"}, - {file = "pymongo-4.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:262a4073d2ee0654f0314ef4d9aab1d8c13dc8dae5c102312e152c02bfa7bdb7"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:022c91e2a41eefbcddc844c534520a13c6f613666c37b9fb9ed039eff47bd2e4"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a0d326c3ba989091026fbc4827638dc169abdbb0c0bbe593716921543f530af6"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:5a1e5b931bf729b2eacd720a0e40201c2d5ed0e2bada60863f19b069bb5016c4"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:54d0b8b6f2548e15b09232827d9ba8e03a599c9a30534f7f2c7bae79df2d1f91"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:e426e213ab07a73f8759ab8d69e87d05d7a60b3ecbf7673965948dcf8ebc1c9f"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:53831effe4dc0243231a944dfbd87896e42b1cf081776930de5cc74371405e3b"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:977c34b5b0b50bd169fbca1a4dd06fbfdfd8ac47734fdc3473532c10098e16ce"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab52db4d3aa3b73bcf920fb375dbea63bf0df0cb4bdb38c5a0a69e16568cc21"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bb935789276422d8875f051837356edfccdb886e673444d91e4941a8142bd48"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9d45243ff4800320c842c45e01c91037e281840e8c6ed2949ed82a70f55c0e6a"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32d6d2b7e14bb6bc052f6cba0c1cf4d47a2b49c56ea1ed0f960a02bc9afaefb2"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:85b92b3828b2c923ed448f820c147ee51fa4566e35c9bf88415586eb0192ced2"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3f345380f6d6d6d1dc6db9fa5c8480c439ea79553b71a2cbe3030a1f20676595"}, - {file = "pymongo-4.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0dcc64747b628a96bcfc6405c42acae3762c85d8ae8c1ce18834b8151cad7486"}, - {file = "pymongo-4.4.1-cp38-cp38-win32.whl", hash = "sha256:ebe1683ec85d8bca389183d01ecf4640c797d6f22e6dac3453a6c492920d5ec3"}, - {file = "pymongo-4.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:58c492e28057838792bed67875f982ffbd3c9ceb67341cc03811859fddb8efbf"}, - {file = "pymongo-4.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aed21b3142311ad139629c4e101b54f25447ec40d6f42c72ad5c1a6f4f851f3a"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:98764ae13de0ab80ba824ca0b84177006dec51f48dfb7c944d8fa78ab645c67f"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7b7127bb35f10d974ec1bd5573389e99054c558b821c9f23bb8ff94e7ae6e612"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:48409bac0f6a62825c306c9a124698df920afdc396132908a8e88b466925a248"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:55b6ebeeabe32a9d2e38eeb90f07c020cb91098b34b5fca42ff3991cb6e6e621"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:4e6a70c9d437b043fb07eef1796060f476359e5b7d8e23baa49f1a70379d6543"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:0bdbbcc1ef3a56347630c57eda5cd9536bdbdb82754b3108c66cbc51b5233dfb"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:04ec1c5451ad358fdbff28ddc6e8a3d1b5f62178d38cd08007a251bc3f59445a"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a7739bcebdbeb5648edb15af00fd38f2ab5de20851a1341d229494a638284cc"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02dba4ea2a6f22de4b50864d3957a0110b75d3eeb40aeab0b0ff64bcb5a063e6"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:884a35c0740744a48f67210692841581ab83a4608d3a031e7125022989ef65f8"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2aab6d1cff00d68212eca75d2260980202b14038d9298fed7d5c455fe3285c7c"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae1f85223193f249320f695eec4242cdcc311357f5f5064c2e72cfd18017e8ee"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b25d2ccdb2901655cc56c0fc978c5ddb35029c46bfd30d182d0e23fffd55b14b"}, - {file = "pymongo-4.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:334d41649f157c56a47fb289bae3b647a867c1a74f5f3a8a371fb361580bd9d3"}, - {file = "pymongo-4.4.1-cp39-cp39-win32.whl", hash = "sha256:c409e5888a94a3ff99783fffd9477128ffab8416e3f8b2c633993eecdcd5c267"}, - {file = "pymongo-4.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:3681caf37edbe05f72f0d351e4a6cb5874ec7ab5eeb99df3a277dbf110093739"}, - {file = "pymongo-4.4.1.tar.gz", hash = "sha256:a4df87dbbd03ac6372d24f2a8054b4dc33de497d5227b50ec649f436ad574284"}, + {file = "pymongo-4.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4344c30025210b9fa80ec257b0e0aab5aa1d5cca91daa70d82ab97b482cc038e"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux1_i686.whl", hash = "sha256:1c5654bb8bb2bdb10e7a0bc3c193dd8b49a960b9eebc4381ff5a2043f4c3c441"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:eaf2f65190c506def2581219572b9c70b8250615dc918b3b7c218361a51ec42e"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_i686.whl", hash = "sha256:262356ea5fcb13d35fb2ab6009d3927bafb9504ef02339338634fffd8a9f1ae4"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_ppc64le.whl", hash = "sha256:2dd2f6960ee3c9360bed7fb3c678be0ca2d00f877068556785ec2eb6b73d2414"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_s390x.whl", hash = "sha256:ff925f1cca42e933376d09ddc254598f8c5fcd36efc5cac0118bb36c36217c41"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:3cadf7f4c8e94d8a77874b54a63c80af01f4d48c4b669c8b6867f86a07ba994f"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55dac73316e7e8c2616ba2e6f62b750918e9e0ae0b2053699d66ca27a7790105"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:154b361dcb358ad377d5d40df41ee35f1cc14c8691b50511547c12404f89b5cb"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2940aa20e9cc328e8ddeacea8b9a6f5ddafe0b087fedad928912e787c65b4909"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:010bc9aa90fd06e5cc52c8fac2c2fd4ef1b5f990d9638548dde178005770a5e8"}, + {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e470fa4bace5f50076c32f4b3cc182b31303b4fefb9b87f990144515d572820b"}, + {file = "pymongo-4.6.1-cp310-cp310-win32.whl", hash = "sha256:da08ea09eefa6b960c2dd9a68ec47949235485c623621eb1d6c02b46765322ac"}, + {file = "pymongo-4.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:13d613c866f9f07d51180f9a7da54ef491d130f169e999c27e7633abe8619ec9"}, + {file = "pymongo-4.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6a0ae7a48a6ef82ceb98a366948874834b86c84e288dbd55600c1abfc3ac1d88"}, + {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bd94c503271e79917b27c6e77f7c5474da6930b3fb9e70a12e68c2dff386b9a"}, + {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d4ccac3053b84a09251da8f5350bb684cbbf8c8c01eda6b5418417d0a8ab198"}, + {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:349093675a2d3759e4fb42b596afffa2b2518c890492563d7905fac503b20daa"}, + {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88beb444fb438385e53dc9110852910ec2a22f0eab7dd489e827038fdc19ed8d"}, + {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8e62d06e90f60ea2a3d463ae51401475568b995bafaffd81767d208d84d7bb1"}, + {file = "pymongo-4.6.1-cp311-cp311-win32.whl", hash = "sha256:5556e306713e2522e460287615d26c0af0fe5ed9d4f431dad35c6624c5d277e9"}, + {file = "pymongo-4.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:b10d8cda9fc2fcdcfa4a000aa10413a2bf8b575852cd07cb8a595ed09689ca98"}, + {file = "pymongo-4.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b435b13bb8e36be11b75f7384a34eefe487fe87a6267172964628e2b14ecf0a7"}, + {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e438417ce1dc5b758742e12661d800482200b042d03512a8f31f6aaa9137ad40"}, + {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b47ebd89e69fbf33d1c2df79759d7162fc80c7652dacfec136dae1c9b3afac7"}, + {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbed8cccebe1169d45cedf00461b2842652d476d2897fd1c42cf41b635d88746"}, + {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30a9e06041fbd7a7590693ec5e407aa8737ad91912a1e70176aff92e5c99d20"}, + {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8729dbf25eb32ad0dc0b9bd5e6a0d0b7e5c2dc8ec06ad171088e1896b522a74"}, + {file = "pymongo-4.6.1-cp312-cp312-win32.whl", hash = "sha256:3177f783ae7e08aaf7b2802e0df4e4b13903520e8380915e6337cdc7a6ff01d8"}, + {file = "pymongo-4.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:00c199e1c593e2c8b033136d7a08f0c376452bac8a896c923fcd6f419e07bdd2"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:13552ca505366df74e3e2f0a4f27c363928f3dff0eef9f281eb81af7f29bc3c5"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:77e0df59b1a4994ad30c6d746992ae887f9756a43fc25dec2db515d94cf0222d"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3a7f02a58a0c2912734105e05dedbee4f7507e6f1bd132ebad520be0b11d46fd"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:026a24a36394dc8930cbcb1d19d5eb35205ef3c838a7e619e04bd170713972e7"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:3b287e814a01deddb59b88549c1e0c87cefacd798d4afc0c8bd6042d1c3d48aa"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:9a710c184ba845afb05a6f876edac8f27783ba70e52d5eaf939f121fc13b2f59"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:30b2c9caf3e55c2e323565d1f3b7e7881ab87db16997dc0cbca7c52885ed2347"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff62ba8ff70f01ab4fe0ae36b2cb0b5d1f42e73dfc81ddf0758cd9f77331ad25"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:547dc5d7f834b1deefda51aedb11a7af9c51c45e689e44e14aa85d44147c7657"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1de3c6faf948f3edd4e738abdb4b76572b4f4fdfc1fed4dad02427e70c5a6219"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2831e05ce0a4df10c4ac5399ef50b9a621f90894c2a4d2945dc5658765514ed"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:144a31391a39a390efce0c5ebcaf4bf112114af4384c90163f402cec5ede476b"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33bb16a07d3cc4e0aea37b242097cd5f7a156312012455c2fa8ca396953b11c4"}, + {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b7b1a83ce514700276a46af3d9e481ec381f05b64939effc9065afe18456a6b9"}, + {file = "pymongo-4.6.1-cp37-cp37m-win32.whl", hash = "sha256:3071ec998cc3d7b4944377e5f1217c2c44b811fae16f9a495c7a1ce9b42fb038"}, + {file = "pymongo-4.6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2346450a075625c4d6166b40a013b605a38b6b6168ce2232b192a37fb200d588"}, + {file = "pymongo-4.6.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:061598cbc6abe2f382ab64c9caa83faa2f4c51256f732cdd890bcc6e63bfb67e"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:d483793a384c550c2d12cb794ede294d303b42beff75f3b3081f57196660edaf"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:f9756f1d25454ba6a3c2f1ef8b7ddec23e5cdeae3dc3c3377243ae37a383db00"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:1ed23b0e2dac6f84f44c8494fbceefe6eb5c35db5c1099f56ab78fc0d94ab3af"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:3d18a9b9b858ee140c15c5bfcb3e66e47e2a70a03272c2e72adda2482f76a6ad"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:c258dbacfff1224f13576147df16ce3c02024a0d792fd0323ac01bed5d3c545d"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:f7acc03a4f1154ba2643edeb13658d08598fe6e490c3dd96a241b94f09801626"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:76013fef1c9cd1cd00d55efde516c154aa169f2bf059b197c263a255ba8a9ddf"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0e6a6c807fa887a0c51cc24fe7ea51bb9e496fe88f00d7930063372c3664c3"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd1fa413f8b9ba30140de198e4f408ffbba6396864c7554e0867aa7363eb58b2"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d219b4508f71d762368caec1fc180960569766049bbc4d38174f05e8ef2fe5b"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b81ecf18031998ad7db53b960d1347f8f29e8b7cb5ea7b4394726468e4295e"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56816e43c92c2fa8c11dc2a686f0ca248bea7902f4a067fa6cbc77853b0f041e"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef801027629c5b511cf2ba13b9be29bfee36ae834b2d95d9877818479cdc99ea"}, + {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d4c2be9760b112b1caf649b4977b81b69893d75aa86caf4f0f398447be871f3c"}, + {file = "pymongo-4.6.1-cp38-cp38-win32.whl", hash = "sha256:39d77d8bbb392fa443831e6d4ae534237b1f4eee6aa186f0cdb4e334ba89536e"}, + {file = "pymongo-4.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:4497d49d785482cc1a44a0ddf8830b036a468c088e72a05217f5b60a9e025012"}, + {file = "pymongo-4.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:69247f7a2835fc0984bbf0892e6022e9a36aec70e187fcfe6cae6a373eb8c4de"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:7bb0e9049e81def6829d09558ad12d16d0454c26cabe6efc3658e544460688d9"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6a1810c2cbde714decf40f811d1edc0dae45506eb37298fd9d4247b8801509fe"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:e2aced6fb2f5261b47d267cb40060b73b6527e64afe54f6497844c9affed5fd0"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d0355cff58a4ed6d5e5f6b9c3693f52de0784aa0c17119394e2a8e376ce489d4"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:3c74f4725485f0a7a3862cfd374cc1b740cebe4c133e0c1425984bcdcce0f4bb"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:9c79d597fb3a7c93d7c26924db7497eba06d58f88f58e586aa69b2ad89fee0f8"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:8ec75f35f62571a43e31e7bd11749d974c1b5cd5ea4a8388725d579263c0fdf6"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e641f931c5cd95b376fd3c59db52770e17bec2bf86ef16cc83b3906c054845"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9aafd036f6f2e5ad109aec92f8dbfcbe76cff16bad683eb6dd18013739c0b3ae"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f2b856518bfcfa316c8dae3d7b412aecacf2e8ba30b149f5eb3b63128d703b9"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec31adc2e988fd7db3ab509954791bbc5a452a03c85e45b804b4bfc31fa221d"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9167e735379ec43d8eafa3fd675bfbb12e2c0464f98960586e9447d2cf2c7a83"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1461199b07903fc1424709efafe379205bf5f738144b1a50a08b0396357b5abf"}, + {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3094c7d2f820eecabadae76bfec02669567bbdd1730eabce10a5764778564f7b"}, + {file = "pymongo-4.6.1-cp39-cp39-win32.whl", hash = "sha256:c91ea3915425bd4111cb1b74511cdc56d1d16a683a48bf2a5a96b6a6c0f297f7"}, + {file = "pymongo-4.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:ef102a67ede70e1721fe27f75073b5314911dbb9bc27cde0a1c402a11531e7bd"}, + {file = "pymongo-4.6.1.tar.gz", hash = "sha256:31dab1f3e1d0cdd57e8df01b645f52d43cc1b653ed3afd535d2891f4fc4f9712"}, ] [package.dependencies] @@ -815,21 +809,22 @@ dnspython = ">=1.16.0,<3.0.0" [package.extras] aws = ["pymongo-auth-aws (<2.0.0)"] -encryption = ["pymongo-auth-aws (<2.0.0)", "pymongocrypt (>=1.6.0,<2.0.0)"] -gssapi = ["pykerberos"] -ocsp = ["certifi", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"] +encryption = ["certifi", "pymongo[aws]", "pymongocrypt (>=1.6.0,<2.0.0)"] +gssapi = ["pykerberos", "winkerberos (>=0.5.0)"] +ocsp = ["certifi", "cryptography (>=2.5)", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"] snappy = ["python-snappy"] +test = ["pytest (>=7)"] zstd = ["zstandard"] [[package]] name = "pyright" -version = "1.1.320" +version = "1.1.338" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.320-py3-none-any.whl", hash = "sha256:cdf739f7827374575cefb134311457d08c189793c3da3097c023debec9acaedb"}, - {file = "pyright-1.1.320.tar.gz", hash = "sha256:94223e3b82d0b4c99c5125bab4d628ec749ce0b5b2ae0471fd4921dd4eff460d"}, + {file = "pyright-1.1.338-py3-none-any.whl", hash = "sha256:28231a3c81ec738b3e1b02489eea5b67fb425a9be0717a32b2e075984623b3ff"}, + {file = "pyright-1.1.338.tar.gz", hash = "sha256:132aa74d2d58d4d27a5b922672b5b4d2be7f3931e7276a2b231d15af6e45daad"}, ] [package.dependencies] @@ -839,6 +834,20 @@ nodeenv = ">=1.6.0" all = ["twine (>=3.4.1)"] dev = ["twine (>=3.4.1)"] +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + [[package]] name = "pyyaml" version = "6.0.1" @@ -851,6 +860,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -858,8 +868,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -876,6 +893,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -883,94 +901,102 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] -name = "ruff" -version = "0.0.283" -description = "An extremely fast Python linter, written in Rust." +name = "rich" +version = "13.7.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false -python-versions = ">=3.7" +python-versions = ">=3.7.0" files = [ - {file = "ruff-0.0.283-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:d59615628b43c40b8335af0fafd544b3a09e9891829461fa2eb0d67f00570df5"}, - {file = "ruff-0.0.283-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:742d3c09bb4272d92fcd0a01a203d837488060280c28a42461e166226651a12a"}, - {file = "ruff-0.0.283-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03622378270a37c61bb0f430c29f41bdf0699e8791d0d7548ad5745c737723fb"}, - {file = "ruff-0.0.283-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4d36f0b3beecc01b50933795da718347ee442afa14cced5a60afe20e8335d24"}, - {file = "ruff-0.0.283-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d21b29dc63d8ec246207dd7115ec39814ca74ee0f0f7b261aa82fb9c1cd8dfcf"}, - {file = "ruff-0.0.283-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:fe095f2c3e8e557f2709945d611efd476b3eb39bdec5b258b2f88cfb8b5d136d"}, - {file = "ruff-0.0.283-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b773f1dc57e642f707ee0e8bd68a0bc5ec95441367166a276e5dfdf88b21e1bf"}, - {file = "ruff-0.0.283-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d539c73e207a13a915bde6c52ae8b2beb0b00c3b975e9e5d808fe288ea354a72"}, - {file = "ruff-0.0.283-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e43d3ab5c0bdb7b7a045411773b18ed115f0590a30c8d267c484393c6b0486ba"}, - {file = "ruff-0.0.283-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c5d72c97daa72f8914bf1b0c0ae4dbffc999e1945c291fa2d37c02ee4fa7f398"}, - {file = "ruff-0.0.283-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:c32eb49ecf190a7bec0305270c864f796b362027b39a7d49c6fb120ea75e7b52"}, - {file = "ruff-0.0.283-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b1eae6990b078883c0cae60f1df0c31d2071f20afcec285baa363b9b6f7321cf"}, - {file = "ruff-0.0.283-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ad5a3042cbae1b82c3c953be77181a0934a6b02ba476fec4f177eb9c297e19ed"}, - {file = "ruff-0.0.283-py3-none-win32.whl", hash = "sha256:bd64f9775d96f35a236980ac98ed50fb5c755b227845612a873ad4f247c0cf8d"}, - {file = "ruff-0.0.283-py3-none-win_amd64.whl", hash = "sha256:28e3545ff24ae44e13da2b8fc706dd62a374cc74e4f5c1fbc8bc071ab0cc309f"}, - {file = "ruff-0.0.283-py3-none-win_arm64.whl", hash = "sha256:28732d956171f493b45c096d27f015e34fde065414330b68d59efcd0f3f67d5d"}, - {file = "ruff-0.0.283.tar.gz", hash = "sha256:6ee6928ad7b6b2b103d3b41517ff252cb81506dacbef01bab31fcfd0de39c5bb"}, + {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, + {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, ] +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + [[package]] -name = "sanic" -version = "23.6.0" -description = "A web server and web framework that's written to go fast. Build fast. Run fast." +name = "rich-click" +version = "1.7.1" +description = "Format click help output nicely with rich" optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "sanic-23.6.0-py3-none-any.whl", hash = "sha256:35136e9cbac1250636f6523326506c4867cbc8635bd15087d3b38fcdbd0bd855"}, - {file = "sanic-23.6.0.tar.gz", hash = "sha256:ccb1e9fea9c868a67fe5a213ca4a64d92c410caca3bfefa0947f6d838f2bcf60"}, + {file = "rich-click-1.7.1.tar.gz", hash = "sha256:660c8ea345343f47c5de88f62afa34a19d9f4c7accdd9c6e39dc17eece6affcd"}, + {file = "rich_click-1.7.1-py3-none-any.whl", hash = "sha256:c37d19af85c86b9a256c18e9d23637ae89478300ec8dc5e220c6ca213675f2f9"}, ] [package.dependencies] -aiofiles = ">=0.6.0" -html5tagger = ">=1.2.1" -httptools = ">=0.0.10" -multidict = ">=5.0,<7.0" -sanic-routing = ">=23.6.0" -tracerite = ">=1.0.0" -typing-extensions = ">=4.4.0" -ujson = {version = ">=1.35", markers = "sys_platform != \"win32\" and implementation_name == \"cpython\""} -uvloop = {version = ">=0.15.0", markers = "sys_platform != \"win32\" and implementation_name == \"cpython\""} -websockets = ">=10.0" +click = ">=7" +rich = ">=10.7.0" +typing-extensions = "*" [package.extras] -all = ["bandit", "beautifulsoup4", "black", "chardet (==3.*)", "coverage", "cryptography", "docutils", "enum-tools[sphinx]", "flake8", "isort (>=5.0.0)", "m2r2", "mistune (<2.0.0)", "mypy", "pygments", "pytest (==7.1.*)", "pytest-benchmark", "pytest-sanic", "sanic-testing (>=23.6.0)", "slotscheck (>=0.8.0,<1)", "sphinx (>=2.1.2)", "sphinx-rtd-theme (>=0.4.3)", "towncrier", "tox", "types-ujson", "uvicorn (<0.15.0)"] -dev = ["bandit", "beautifulsoup4", "black", "chardet (==3.*)", "coverage", "cryptography", "docutils", "flake8", "isort (>=5.0.0)", "mypy", "pygments", "pytest (==7.1.*)", "pytest-benchmark", "pytest-sanic", "sanic-testing (>=23.6.0)", "slotscheck (>=0.8.0,<1)", "towncrier", "tox", "types-ujson", "uvicorn (<0.15.0)"] -docs = ["docutils", "enum-tools[sphinx]", "m2r2", "mistune (<2.0.0)", "pygments", "sphinx (>=2.1.2)", "sphinx-rtd-theme (>=0.4.3)"] -ext = ["sanic-ext"] -http3 = ["aioquic"] -test = ["bandit", "beautifulsoup4", "black", "chardet (==3.*)", "coverage", "docutils", "flake8", "isort (>=5.0.0)", "mypy", "pygments", "pytest (==7.1.*)", "pytest-benchmark", "pytest-sanic", "sanic-testing (>=23.6.0)", "slotscheck (>=0.8.0,<1)", "types-ujson", "uvicorn (<0.15.0)"] +dev = ["flake8", "flake8-docstrings", "mypy", "packaging", "pre-commit", "pytest", "pytest-cov", "types-setuptools"] [[package]] -name = "sanic-routing" -version = "23.6.0" -description = "Core routing component for Sanic" +name = "ruff" +version = "0.1.6" +description = "An extremely fast Python linter and code formatter, written in Rust." optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "sanic-routing-23.6.0.tar.gz", hash = "sha256:e3aa97a51af9ccc580e773e351ee2333a7c3f69f75cecbfd06a3a8ddca6e04e6"}, - {file = "sanic_routing-23.6.0-py3-none-any.whl", hash = "sha256:49f8d0c2aa3f99d2aa16f942e71a5056fe28241a42d29f4c369c04646ad3f737"}, + {file = "ruff-0.1.6-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:88b8cdf6abf98130991cbc9f6438f35f6e8d41a02622cc5ee130a02a0ed28703"}, + {file = "ruff-0.1.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c549ed437680b6105a1299d2cd30e4964211606eeb48a0ff7a93ef70b902248"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cf5f701062e294f2167e66d11b092bba7af6a057668ed618a9253e1e90cfd76"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:05991ee20d4ac4bb78385360c684e4b417edd971030ab12a4fbd075ff535050e"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87455a0c1f739b3c069e2f4c43b66479a54dea0276dd5d4d67b091265f6fd1dc"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:683aa5bdda5a48cb8266fcde8eea2a6af4e5700a392c56ea5fb5f0d4bfdc0240"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:137852105586dcbf80c1717facb6781555c4e99f520c9c827bd414fac67ddfb6"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd98138a98d48a1c36c394fd6b84cd943ac92a08278aa8ac8c0fdefcf7138f35"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0cd909d25f227ac5c36d4e7e681577275fb74ba3b11d288aff7ec47e3ae745"}, + {file = "ruff-0.1.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8fd1c62a47aa88a02707b5dd20c5ff20d035d634aa74826b42a1da77861b5ff"}, + {file = "ruff-0.1.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fd89b45d374935829134a082617954120d7a1470a9f0ec0e7f3ead983edc48cc"}, + {file = "ruff-0.1.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:491262006e92f825b145cd1e52948073c56560243b55fb3b4ecb142f6f0e9543"}, + {file = "ruff-0.1.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ea284789861b8b5ca9d5443591a92a397ac183d4351882ab52f6296b4fdd5462"}, + {file = "ruff-0.1.6-py3-none-win32.whl", hash = "sha256:1610e14750826dfc207ccbcdd7331b6bd285607d4181df9c1c6ae26646d6848a"}, + {file = "ruff-0.1.6-py3-none-win_amd64.whl", hash = "sha256:4558b3e178145491e9bc3b2ee3c4b42f19d19384eaa5c59d10acf6e8f8b57e33"}, + {file = "ruff-0.1.6-py3-none-win_arm64.whl", hash = "sha256:03910e81df0d8db0e30050725a5802441c2022ea3ae4fe0609b76081731accbc"}, + {file = "ruff-0.1.6.tar.gz", hash = "sha256:1b09f29b16c6ead5ea6b097ef2764b42372aebe363722f1605ecbcd2b9207184"}, ] [[package]] name = "setuptools" -version = "68.0.0" +version = "69.0.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, + {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "sniffio" @@ -985,271 +1011,209 @@ files = [ [[package]] name = "sspeedup" -version = "0.12.0" +version = "0.24.0" description = "开发工具箱" optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "sspeedup-0.12.0-py3-none-any.whl", hash = "sha256:97b9e0cd6d08b253602328eed222b0753e90e5fb9b9eabff43bd2c1ecadf7cd6"}, - {file = "sspeedup-0.12.0.tar.gz", hash = "sha256:848e87ce953d98c724a766c35c8351fff22bcd262bfa28557e5f51583f2a3a9c"}, + {file = "sspeedup-0.24.0-py3-none-any.whl", hash = "sha256:8dc530c86a31e80f7391418a453abd3cb0ccd4df87f749e7a86a128f75ee98c0"}, + {file = "sspeedup-0.24.0.tar.gz", hash = "sha256:6bdd4ca9d57dc44fe8fe3693d9ac88219fca73f5b8328a6ecb02054f60f047be"}, ] [package.dependencies] -httpx = {version = ">=0.24.1,<0.25.0", optional = true, markers = "extra == \"ability-word-split\""} -pydantic = {version = ">=2.0.2,<3.0.0", optional = true, markers = "extra == \"data-validation\""} -pymongo = {version = ">=4.3.3,<5.0.0", optional = true, markers = "extra == \"logging\""} -sanic = {version = ">=23.3.0,<24.0.0", optional = true, markers = "extra == \"api-response-sanic\""} -ujson = {version = ">=5.8.0,<6.0.0", optional = true, markers = "extra == \"api-response-sanic\""} +litestar = {version = ">=2.3.0,<3.0.0", optional = true, markers = "extra == \"api-litestar\""} +motor = ">=3.3.1,<4.0.0" +msgspec = {version = ">=0.18.2,<0.19.0", optional = true, markers = "extra == \"config\" or extra == \"feishu-bitable\" or extra == \"api-litestar\""} +pymongo = ">=4.3.3,<5.0.0" [package.extras] -ability-word-split = ["httpx (>=0.24.1,<0.25.0)"] -api-response-sanic = ["sanic (>=23.3.0,<24.0.0)", "ujson (>=5.8.0,<6.0.0)"] -data-validation = ["pydantic (>=2.0.2,<3.0.0)"] -logging = ["pymongo (>=4.3.3,<5.0.0)"] +ability-word-split = ["httpx (>=0.25.1,<0.26.0)"] +api-litestar = ["litestar (>=2.3.0,<3.0.0)", "msgspec (>=0.18.2,<0.19.0)"] +api-sanic = ["pydantic (>=2.0.2,<3.0.0)", "sanic (>=23.3.0,<24.0.0)", "ujson (>=5.8.0,<6.0.0)"] +config = ["msgspec (>=0.18.2,<0.19.0)"] +feishu-auth = ["httpx (>=0.25.1,<0.26.0)"] +feishu-bitable = ["httpx (>=0.25.1,<0.26.0)", "msgspec (>=0.18.2,<0.19.0)"] pywebio = ["pywebio (>=1.8.2,<2.0.0)"] qrcode = ["qrcode (>=7.4.2,<8.0.0)"] word-split-jieba = ["jieba (>=0.42.1,<0.43.0)"] [[package]] -name = "tomd" -version = "0.1.3" -description = "Convert HTML to Markdown." -optional = false -python-versions = "*" -files = [ - {file = "tomd-0.1.3.tar.gz", hash = "sha256:23f21ae853157be49d163159bc7c6bc007dd5e87b69769ec5ba3e17f5de7a6d4"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [[package]] -name = "tracerite" -version = "1.1.0" -description = "Human-readable HTML tracebacks for Python exceptions" +name = "uvicorn" +version = "0.23.2" +description = "The lightning-fast ASGI server." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "tracerite-1.1.0-py3-none-any.whl", hash = "sha256:4cccac04db05eeeabda45e72b57199e147fa2f73cf64d89cfd625df321bd2ab6"}, - {file = "tracerite-1.1.0.tar.gz", hash = "sha256:041dab8fd4bb405f73506293ac7438a2d311e5f9044378ba7d9a6540392f9e4b"}, + {file = "uvicorn-0.23.2-py3-none-any.whl", hash = "sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53"}, + {file = "uvicorn-0.23.2.tar.gz", hash = "sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a"}, ] [package.dependencies] -html5tagger = ">=1.2.1" +click = ">=7.0" +h11 = ">=0.8" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] [[package]] -name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +name = "uvloop" +version = "0.19.0" +description = "Fast implementation of asyncio event loop on top of libuv" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8.0" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, + {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, ] +[package.extras] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + [[package]] -name = "ujson" -version = "5.8.0" -description = "Ultra fast JSON encoder and decoder for Python" +name = "watchfiles" +version = "0.21.0" +description = "Simple, modern and high performance file watching and code reload in python." optional = false python-versions = ">=3.8" files = [ - {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"}, - {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf"}, - {file = "ujson-5.8.0-cp310-cp310-win32.whl", hash = "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a"}, - {file = "ujson-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0"}, - {file = "ujson-5.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f"}, - {file = "ujson-5.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa"}, - {file = "ujson-5.8.0-cp311-cp311-win32.whl", hash = "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879"}, - {file = "ujson-5.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721"}, - {file = "ujson-5.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c"}, - {file = "ujson-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30"}, - {file = "ujson-5.8.0-cp312-cp312-win32.whl", hash = "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916"}, - {file = "ujson-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6"}, - {file = "ujson-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb"}, - {file = "ujson-5.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07"}, - {file = "ujson-5.8.0-cp38-cp38-win32.whl", hash = "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564"}, - {file = "ujson-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5"}, - {file = "ujson-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c"}, - {file = "ujson-5.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc"}, - {file = "ujson-5.8.0-cp39-cp39-win32.whl", hash = "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903"}, - {file = "ujson-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"}, - {file = "ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, + {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, + {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, + {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, + {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, + {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, + {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, + {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, + {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, + {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, + {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, + {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, + {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, + {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, ] +[package.dependencies] +anyio = ">=3.0.0" + [[package]] -name = "uvloop" -version = "0.17.0" -description = "Fast implementation of asyncio event loop on top of libuv" +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718"}, - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376"}, - {file = "uvloop-0.17.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded"}, - {file = "uvloop-0.17.0.tar.gz", hash = "sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -dev = ["Cython (>=0.29.32,<0.30.0)", "Sphinx (>=4.1.2,<4.2.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)", "pytest (>=3.6.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)"] - -[[package]] -name = "websockets" -version = "11.0.3" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, - {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, - {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, - {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, - {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, - {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, - {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, - {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, - {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, - {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, - {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, - {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, - {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, - {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, -] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "0038ad94d5ade9093383ac8d8554cede4dc2abf7c5aa110e0506e60c839ed874" +content-hash = "de1a846413648a360a22238cbb3c81179f901745ffbdb649b21e71a668d968e0" diff --git a/backend/pyproject.toml b/backend/pyproject.toml index b03a509..d8223b6 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "jtools" -version = "3.6.1" +version = "3.7.0" description = "探索未知" authors = ["yezi "] license = "MIT" @@ -8,18 +8,17 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.8" -jianshuresearchtools = "2.11.0" -pyyaml = "^6.0" -tomd = "^0.1.3" -pymongo = "^4.2.0" -sspeedup = {version = "^0.12.0", extras = ["logging", "api-response-sanic", "ability-word-split", "data-validation"]} -sanic = "^23.3.0" -pydantic = "^2.0.2" +motor = "^3.3.0" +jianshuresearchtools = "^2.11.0" +sspeedup = {version = "^0.24.0", extras = ["logging", "config", "api-litestar"]} +uvicorn = "^0.23.0" +httptools = "^0.6.0" +uvloop = "^0.19.0" [tool.poetry.group.dev.dependencies] -ruff = "^0.0.283" -pyright = "^1.1.309" -black = "^23.3.0" +ruff = "^0.1.0" +pyright = "^1.1.0" +watchfiles = "^0.21.0" [build-system] requires = ["poetry-core"] @@ -27,8 +26,14 @@ build-backend = "poetry.core.masonry.api" [tool.ruff] -select = ["A", "ANN", "B", "C", "E", "F", "I", "N", "RET", "S", "SIM", "UP", "W"] +select = [ + "A", "ANN", "ASYNC", "B", "BLE", + "C4", "E", "F", "FBT", "I", + "ICN", "ISC", "N", "PIE", "Q", + "RET", "RSE", "RUF", "S", "SIM", + "SLF", "TCH", "UP", "W" +] -ignore = ["ANN101", "ANN102", "ANN401", "C901", "E501", "S104"] +ignore = ["RUF001", "RUF002", "RUF003"] target-version = "py38" \ No newline at end of file diff --git a/backend/requirements-dev.txt b/backend/requirements-dev.txt index 3f00e9a..8e04168 100644 --- a/backend/requirements-dev.txt +++ b/backend/requirements-dev.txt @@ -1,45 +1,45 @@ -aiofiles==23.1.0 ; python_version >= "3.8" and python_version < "4.0" -annotated-types==0.5.0 ; python_version >= "3.8" and python_version < "4.0" -anyio==3.7.1 ; python_version >= "3.8" and python_version < "4.0" -black==23.7.0 ; python_version >= "3.8" and python_version < "4.0" -certifi==2023.7.22 ; python_version >= "3.8" and python_version < "4.0" -click==8.1.6 ; python_version >= "3.8" and python_version < "4.0" +anyio==4.1.0 ; python_version >= "3.8" and python_version < "4.0" +certifi==2023.11.17 ; python_version >= "3.8" and python_version < "4.0" +click==8.1.7 ; python_version >= "3.8" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0" and platform_system == "Windows" -dnspython==2.4.1 ; python_version >= "3.8" and python_version < "4.0" -exceptiongroup==1.1.2 ; python_version >= "3.8" and python_version < "3.11" +dnspython==2.4.2 ; python_version >= "3.8" and python_version < "4.0" +exceptiongroup==1.2.0 ; python_version >= "3.8" and python_version < "3.11" +faker==20.1.0 ; python_version >= "3.8" and python_version < "4.0" h11==0.14.0 ; python_version >= "3.8" and python_version < "4.0" h2==4.1.0 ; python_version >= "3.8" and python_version < "4.0" hpack==4.0.0 ; python_version >= "3.8" and python_version < "4.0" -html5tagger==1.3.0 ; python_version >= "3.8" and python_version < "4.0" httpcore==0.17.3 ; python_version >= "3.8" and python_version < "4.0" -httptools==0.6.0 ; python_version >= "3.8" and python_version < "4.0" +httptools==0.6.1 ; python_version >= "3.8" and python_version < "4.0" httpx==0.24.1 ; python_version >= "3.8" and python_version < "4.0" httpx[http2]==0.24.1 ; python_version >= "3.8" and python_version < "4.0" hyperframe==6.0.1 ; python_version >= "3.8" and python_version < "4.0" -idna==3.4 ; python_version >= "3.8" and python_version < "4.0" +idna==3.6 ; python_version >= "3.8" and python_version < "4.0" +importlib-metadata==6.9.0 ; python_version >= "3.8" and python_version < "3.10" +importlib-resources==6.1.1 ; python_version >= "3.8" and python_version < "3.9" jianshuresearchtools==2.11.0 ; python_version >= "3.8" and python_version < "4.0" +litestar==2.4.2 ; python_version >= "3.8" and python_version < "4.0" lxml==4.9.3 ; python_version >= "3.8" and python_version < "4.0" +markdown-it-py==3.0.0 ; python_version >= "3.8" and python_version < "4.0" +mdurl==0.1.2 ; python_version >= "3.8" and python_version < "4.0" +motor==3.3.2 ; python_version >= "3.8" and python_version < "4.0" +msgspec==0.18.4 ; python_version >= "3.8" and python_version < "4.0" multidict==6.0.4 ; python_version >= "3.8" and python_version < "4.0" -mypy-extensions==1.0.0 ; python_version >= "3.8" and python_version < "4.0" nodeenv==1.8.0 ; python_version >= "3.8" and python_version < "4.0" -packaging==23.1 ; python_version >= "3.8" and python_version < "4.0" -pathspec==0.11.2 ; python_version >= "3.8" and python_version < "4.0" -platformdirs==3.10.0 ; python_version >= "3.8" and python_version < "4.0" -pydantic-core==2.4.0 ; python_version >= "3.8" and python_version < "4.0" -pydantic==2.1.1 ; python_version >= "3.8" and python_version < "4.0" -pymongo==4.4.1 ; python_version >= "3.8" and python_version < "4.0" -pyright==1.1.320 ; python_version >= "3.8" and python_version < "4.0" +polyfactory==2.12.0 ; python_version >= "3.8" and python_version < "4.0" +pygments==2.17.2 ; python_version >= "3.8" and python_version < "4.0" +pymongo==4.6.1 ; python_version >= "3.8" and python_version < "4.0" +pyright==1.1.338 ; python_version >= "3.8" and python_version < "4.0" +python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.8" and python_version < "4.0" -ruff==0.0.283 ; python_version >= "3.8" and python_version < "4.0" -sanic-routing==23.6.0 ; python_version >= "3.8" and python_version < "4.0" -sanic==23.6.0 ; python_version >= "3.8" and python_version < "4.0" -setuptools==68.0.0 ; python_version >= "3.8" and python_version < "4.0" +rich-click==1.7.1 ; python_version >= "3.8" and python_version < "4.0" +rich==13.7.0 ; python_version >= "3.8" and python_version < "4.0" +ruff==0.1.6 ; python_version >= "3.8" and python_version < "4.0" +setuptools==69.0.2 ; python_version >= "3.8" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.8" and python_version < "4.0" sniffio==1.3.0 ; python_version >= "3.8" and python_version < "4.0" -sspeedup[ability-word-split,api-response-sanic,data-validation,logging]==0.12.0 ; python_version >= "3.8" and python_version < "4.0" -tomd==0.1.3 ; python_version >= "3.8" and python_version < "4.0" -tomli==2.0.1 ; python_version >= "3.8" and python_version < "3.11" -tracerite==1.1.0 ; python_version >= "3.8" and python_version < "4.0" -typing-extensions==4.7.1 ; python_version >= "3.8" and python_version < "4.0" -ujson==5.8.0 ; python_version >= "3.8" and python_version < "4.0" and sys_platform != "win32" and implementation_name == "cpython" -uvloop==0.17.0 ; sys_platform != "win32" and implementation_name == "cpython" and python_version >= "3.8" and python_version < "4.0" -websockets==11.0.3 ; python_version >= "3.8" and python_version < "4.0" +sspeedup[api-litestar,config,logging]==0.24.0 ; python_version >= "3.8" and python_version < "4.0" +typing-extensions==4.8.0 ; python_version >= "3.8" and python_version < "4.0" +uvicorn==0.23.2 ; python_version >= "3.8" and python_version < "4.0" +uvloop==0.19.0 ; python_version >= "3.8" and python_version < "4.0" +watchfiles==0.21.0 ; python_version >= "3.8" and python_version < "4.0" +zipp==3.17.0 ; python_version >= "3.8" and python_version < "3.10" diff --git a/backend/requirements.txt b/backend/requirements.txt index 8bb247d..392ee33 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,33 +1,40 @@ -aiofiles==23.1.0 ; python_version >= "3.8" and python_version < "4.0" -annotated-types==0.5.0 ; python_version >= "3.8" and python_version < "4.0" -anyio==3.7.1 ; python_version >= "3.8" and python_version < "4.0" -certifi==2023.7.22 ; python_version >= "3.8" and python_version < "4.0" -dnspython==2.4.1 ; python_version >= "3.8" and python_version < "4.0" -exceptiongroup==1.1.2 ; python_version >= "3.8" and python_version < "3.11" +anyio==4.1.0 ; python_version >= "3.8" and python_version < "4.0" +certifi==2023.11.17 ; python_version >= "3.8" and python_version < "4.0" +click==8.1.7 ; python_version >= "3.8" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0" and platform_system == "Windows" +dnspython==2.4.2 ; python_version >= "3.8" and python_version < "4.0" +exceptiongroup==1.2.0 ; python_version >= "3.8" and python_version < "3.11" +faker==20.1.0 ; python_version >= "3.8" and python_version < "4.0" h11==0.14.0 ; python_version >= "3.8" and python_version < "4.0" h2==4.1.0 ; python_version >= "3.8" and python_version < "4.0" hpack==4.0.0 ; python_version >= "3.8" and python_version < "4.0" -html5tagger==1.3.0 ; python_version >= "3.8" and python_version < "4.0" httpcore==0.17.3 ; python_version >= "3.8" and python_version < "4.0" -httptools==0.6.0 ; python_version >= "3.8" and python_version < "4.0" +httptools==0.6.1 ; python_version >= "3.8" and python_version < "4.0" httpx==0.24.1 ; python_version >= "3.8" and python_version < "4.0" httpx[http2]==0.24.1 ; python_version >= "3.8" and python_version < "4.0" hyperframe==6.0.1 ; python_version >= "3.8" and python_version < "4.0" -idna==3.4 ; python_version >= "3.8" and python_version < "4.0" +idna==3.6 ; python_version >= "3.8" and python_version < "4.0" +importlib-metadata==6.9.0 ; python_version >= "3.8" and python_version < "3.10" +importlib-resources==6.1.1 ; python_version >= "3.8" and python_version < "3.9" jianshuresearchtools==2.11.0 ; python_version >= "3.8" and python_version < "4.0" +litestar==2.4.2 ; python_version >= "3.8" and python_version < "4.0" lxml==4.9.3 ; python_version >= "3.8" and python_version < "4.0" +markdown-it-py==3.0.0 ; python_version >= "3.8" and python_version < "4.0" +mdurl==0.1.2 ; python_version >= "3.8" and python_version < "4.0" +motor==3.3.2 ; python_version >= "3.8" and python_version < "4.0" +msgspec==0.18.4 ; python_version >= "3.8" and python_version < "4.0" multidict==6.0.4 ; python_version >= "3.8" and python_version < "4.0" -pydantic-core==2.4.0 ; python_version >= "3.8" and python_version < "4.0" -pydantic==2.1.1 ; python_version >= "3.8" and python_version < "4.0" -pymongo==4.4.1 ; python_version >= "3.8" and python_version < "4.0" +polyfactory==2.12.0 ; python_version >= "3.8" and python_version < "4.0" +pygments==2.17.2 ; python_version >= "3.8" and python_version < "4.0" +pymongo==4.6.1 ; python_version >= "3.8" and python_version < "4.0" +python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.8" and python_version < "4.0" -sanic-routing==23.6.0 ; python_version >= "3.8" and python_version < "4.0" -sanic==23.6.0 ; python_version >= "3.8" and python_version < "4.0" +rich-click==1.7.1 ; python_version >= "3.8" and python_version < "4.0" +rich==13.7.0 ; python_version >= "3.8" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.8" and python_version < "4.0" sniffio==1.3.0 ; python_version >= "3.8" and python_version < "4.0" -sspeedup[ability-word-split,api-response-sanic,data-validation,logging]==0.12.0 ; python_version >= "3.8" and python_version < "4.0" -tomd==0.1.3 ; python_version >= "3.8" and python_version < "4.0" -tracerite==1.1.0 ; python_version >= "3.8" and python_version < "4.0" -typing-extensions==4.7.1 ; python_version >= "3.8" and python_version < "4.0" -ujson==5.8.0 ; python_version >= "3.8" and python_version < "4.0" and sys_platform != "win32" and implementation_name == "cpython" -uvloop==0.17.0 ; sys_platform != "win32" and implementation_name == "cpython" and python_version >= "3.8" and python_version < "4.0" -websockets==11.0.3 ; python_version >= "3.8" and python_version < "4.0" +sspeedup[api-litestar,config,logging]==0.24.0 ; python_version >= "3.8" and python_version < "4.0" +typing-extensions==4.8.0 ; python_version >= "3.8" and python_version < "4.0" +uvicorn==0.23.2 ; python_version >= "3.8" and python_version < "4.0" +uvloop==0.19.0 ; python_version >= "3.8" and python_version < "4.0" +zipp==3.17.0 ; python_version >= "3.8" and python_version < "3.10" diff --git a/backend/tools_config.yaml b/backend/tools_config.yaml new file mode 100644 index 0000000..7cb8521 --- /dev/null +++ b/backend/tools_config.yaml @@ -0,0 +1,89 @@ +article-wordcloud-generator: + status: NORMAL + reason: null + last_update_time: null + data_update_freq: null + data_count: null + data_source: null +JPEP-FTN-market-analyzer: + status: NORMAL + reason: null + last_update_time: + collection: JPEP_FTN_market + sort_key: fetch_time + sort_direction: desc + data_update_freq: 十分钟一次 + data_count: + collection: JPEP_FTN_market + mode: estimated + data_source: + 简书积分兑换平台 - 贝市: https://www.jianshubei.com/bei +lottery-analyzer: + status: NORMAL + reason: null + last_update_time: + collection: lottery + sort_key: time + sort_direction: desc + data_update_freq: 每天 2:00、9:00、14:00、21:00 + data_count: + collection: lottery + mode: estimated + data_source: + 简书 - 天天抽奖: https://www.jianshu.com/mobile/lottery +lottery-reward-record-viewer: + status: NORMAL + reason: null + last_update_time: + collection: lottery + sort_key: time + sort_direction: desc + data_update_freq: 每天 2:00、9:00、14:00、21:00 + data_count: + collection: lottery + mode: estimated + data_source: + 简书 - 天天抽奖: https://www.jianshu.com/mobile/lottery +LP-recommend-checker: + status: NORMAL + reason: null + last_update_time: null + data_update_freq: null + data_count: null + data_source: + 简书 - 专题 - 理事会点赞汇总: https://www.jianshu.com/c/f61832508891 +on-rank-article-viewer: + status: NORMAL + reason: null + last_update_time: + collection: article_FP_rank + sort_key: date + sort_direction: desc + data_update_freq: 每天凌晨 1:00 + data_count: + collection: article_FP_rank + mode: estimated + data_source: + 简书 - 简书钻每日发放总榜: https://www.jianshu.com/fp/notice/now +URL-scheme-convertor: + status: NORMAL + reason: null + last_update_time: null + data_update_freq: null + data_count: null + data_source: null +VIP-info-viewer: + status: NORMAL + reason: null + last_update_time: null + data_update_freq: null + data_count: null + data_source: null +VIP-profit-compute: + status: NORMAL + reason: null + last_update_time: null + data_update_freq: null + data_count: null + data_source: + 简书 - 简书会员大使: https://www.jianshu.com/mobile/club/ambassador \ No newline at end of file diff --git a/backend/tools_info.yaml b/backend/tools_info.yaml deleted file mode 100644 index eca2eb2..0000000 --- a/backend/tools_info.yaml +++ /dev/null @@ -1,73 +0,0 @@ -article-wordcloud-generator: - status: 0 - reason: "" - enable_data_update_time: false - enable_data_count: false -JPEP-FTN-market-analyzer: - status: 0 - reason: "" - enable_data_update_time: true - enable_data_count: true - db: JPEP_FTN_market - data_update_time_key: fetch_time - data_update_time_sort_direction: desc - data_update_freq_desc: 十分钟更新一次 - data_source: - 简书积分兑换平台 - 贝市: https://www.jianshubei.com/bei -lottery-analyzer: - status: 0 - reason: "" - enable_data_update_time: true - enable_data_count: true - db: lottery - data_update_time_key: time - data_update_time_sort_direction: desc - data_update_freq_desc: 每天 2:00、9:00、14:00、21:00 更新 - data_source: - 简书 - 天天抽奖: https://www.jianshu.com/mobile/lottery -lottery-reward-record-viewer: - status: 0 - reason: "" - enable_data_update_time: true - enable_data_count: true - db: lottery - data_update_time_key: time - data_update_time_sort_direction: desc - data_update_freq_desc: 每天 2:00、9:00、14:00、21:00 更新 - data_source: - 简书 - 天天抽奖: https://www.jianshu.com/mobile/lottery -LP-recommend-checker: - status: 0 - reason: "" - enable_data_update_time: false - enable_data_count: false - data_source: - 简书 - 专题 - 理事会点赞汇总: https://www.jianshu.com/c/f61832508891 -on-rank-article-viewer: - status: 0 - reason: "" - enable_data_update_time: true - enable_data_count: true - db: article_FP_rank - data_update_time_key: date - data_update_time_sort_direction: desc - data_update_freq_desc: 每天凌晨 1:00 更新 - data_source: - 简书 - 简书钻每日发放总榜: https://www.jianshu.com/fp/notice/now -URL-scheme-convertor: - status: 0 - reason: "" - enable_data_update_time: false - enable_data_count: false -VIP-info-viewer: - status: 0 - reason: "" - enable_data_update_time: false - enable_data_count: false -VIP-profit-compute: - status: 0 - reason: "" - enable_data_update_time: false - enable_data_count: false - data_source: - 简书 - 简书会员大使: https://www.jianshu.com/mobile/club/ambassador \ No newline at end of file diff --git a/backend/utils/config.py b/backend/utils/config.py index 57fafd4..ab8477f 100644 --- a/backend/utils/config.py +++ b/backend/utils/config.py @@ -1,68 +1,41 @@ -from os import path as os_path -from typing import Any, Dict +from msgspec import Struct +from sspeedup.config import load_or_save_default_config, set_reload_on_sighup +from sspeedup.config.blocks import ( + CONFIG_STRUCT_CONFIG, + AbilityWordSplitConfig, + DeployConfig, + LoggingConfig, + MongoDBConfig, +) -from yaml import SafeLoader -from yaml import dump as yaml_dump -from yaml import load as yaml_load -_DEFAULT_CONFIG = { - "version": "v0.1.0", - "deploy": { - "port": 8602, - }, - "db": { - "host": "localhost", - "port": 27017, - "main_database": "JMFData", - }, - "log": { - "minimum_save_level": "DEBUG", - "minimum_print_level": "INFO", - }, - "word_split_ability": { - "host": "localhost", - "port": 6001, - }, -} +class _Config(Struct, **CONFIG_STRUCT_CONFIG): + version: str = "v3.0.0" + deploy: DeployConfig = DeployConfig() + db: MongoDBConfig = MongoDBConfig() + log: LoggingConfig = LoggingConfig() + ability_word_split: AbilityWordSplitConfig = AbilityWordSplitConfig() -class Config: - def __new__(cls) -> "Config": - # 单例模式 - if not hasattr(cls, "_instance"): - cls._instance = object.__new__(cls) - return cls._instance +config = load_or_save_default_config(_Config) - def __init__(self) -> None: - if not os_path.exists("config.yaml"): # 没有配置文件 - with open("config.yaml", "w", encoding="utf-8") as f: - yaml_dump(_DEFAULT_CONFIG, f, allow_unicode=True, indent=4) - self._data = _DEFAULT_CONFIG - else: # 有配置文件 - with open("config.yaml", encoding="utf-8") as f: - self._data = yaml_load(f, Loader=SafeLoader) - def __getattr__(self, name: str) -> Any: - result: Any = self._data[name] - if isinstance(result, dict): - return ConfigNode(result) +def on_reload_success(new_config: _Config) -> None: + from utils.log import logger - return result + global config + config = new_config + logger.info("配置文件已重载...") - def refresh(self) -> None: - self.__init__() +def on_reload_failed(e: Exception) -> None: + from utils.log import logger -class ConfigNode: - def __init__(self, data: Dict[str, Any]) -> None: - self._data: Dict[str, Any] = data + logger.error(f"配置文件重载失败:{e}", exception=e) - def __getattr__(self, name: str) -> Any: - return self._data[name] - -def init_config() -> Config: - return Config() # 初始化日志文件 - - -config = init_config() +set_reload_on_sighup( + _Config, + success_callback=on_reload_success, + failed_callback=on_reload_failed, +) diff --git a/backend/utils/db.py b/backend/utils/db.py index 08d6484..8e27146 100644 --- a/backend/utils/db.py +++ b/backend/utils/db.py @@ -1,52 +1,15 @@ -from pymongo import IndexModel, MongoClient -from pymongo.collection import Collection -from pymongo.database import Database +from motor.motor_asyncio import ( + AsyncIOMotorClient, +) from utils.config import config +_DB_CLIENT = AsyncIOMotorClient(config.db.host, config.db.port) +_MAIN_DB = _DB_CLIENT[config.db.database] +_JFETCHER_DB = _DB_CLIENT["JFetcherData"] -def init_db(db_name: str) -> Database: - connection: MongoClient = MongoClient(config.db.host, config.db.port) - return connection[db_name] - - -db = init_db(config.db.main_database) - - -def get_collection(collection_name: str) -> Collection: - return db[collection_name] - - -run_log_db = db.run_log - -_jfetcher_data_db = init_db("JFetcherData") -article_FP_rank_db = _jfetcher_data_db.article_FP_rank # noqa: N816 -lottery_db = _jfetcher_data_db.lottery_data -LP_collections_db = _jfetcher_data_db.LP_collections -JPEP_FTN_market_db = _jfetcher_data_db.JPEP_FTN_macket - -# 创建索引 - -article_FP_rank_db.create_indexes( - [ - IndexModel([("date", 1)]), - IndexModel([("ranking", 1)]), - ] -) -lottery_db.create_indexes( - [ - IndexModel([("time", 1)]), - IndexModel([("reward_name", 1)]), - ] -) -LP_collections_db.create_indexes( - [ - IndexModel([("fetch_date", 1)]), - IndexModel([("article.id", 1)]), - ] -) -JPEP_FTN_market_db.create_indexes( - [ - IndexModel([("fetch_time", 1)]), - ] -) +RUN_LOG_COLLECTION = _MAIN_DB["run_log"] +ARTICLE_FP_RANK_COLLECTION = _JFETCHER_DB["article_FP_rank"] +LOTTERY_COLLECTION = _JFETCHER_DB["lottery_data"] +LP_COLLECTIONS_COLLECTION = _JFETCHER_DB["LP_collections"] +JPEP_FTN_MACKET_COLLECTION = _JFETCHER_DB["JPEP_FTN_macket"] diff --git a/backend/utils/log.py b/backend/utils/log.py index 40c65d1..a3d72f5 100644 --- a/backend/utils/log.py +++ b/backend/utils/log.py @@ -1,10 +1,10 @@ -from sspeedup.logging.run_logger import LogLevel, RunLogger +from sspeedup.logging.run_logger import RunLogger from utils.config import config -from utils.db import run_log_db +from utils.db import RUN_LOG_COLLECTION -run_logger: RunLogger = RunLogger( - mongo_collection=run_log_db, - save_level=LogLevel[config.log.minimum_save_level], - print_level=LogLevel[config.log.minimum_print_level], +logger = RunLogger( + save_level=config.log.save_level, + print_level=config.log.print_level, + mongo_collection=RUN_LOG_COLLECTION, ) diff --git a/backend/utils/text_filter.py b/backend/utils/text_filter.py deleted file mode 100644 index 2bc8a7b..0000000 --- a/backend/utils/text_filter.py +++ /dev/null @@ -1,19 +0,0 @@ -from typing import Set - -BANNED_CHARS: Set[str] = { - " ", - "\\", - ";", - "^", - "$", -} - - -def has_banned_chars(text: str) -> bool: - return any(char in BANNED_CHARS for char in text) - - -def input_filter(text: str) -> str: - for char in BANNED_CHARS: - text = text.replace(char, "") - return text diff --git a/backend/utils/tools_config.py b/backend/utils/tools_config.py new file mode 100644 index 0000000..4a3c058 --- /dev/null +++ b/backend/utils/tools_config.py @@ -0,0 +1,41 @@ +from enum import Enum +from typing import Any, Dict, Literal, Optional + +from msgspec import Struct +from msgspec.yaml import decode + +_TOOLS_CONFIG_STRUCT_CONFIG: Dict[str, Any] = { + "frozen": True, + "kw_only": True, + "forbid_unknown_fields": True, +} + + +class ToolStatus(Enum): + NORMAL = "NORMAL" + UNAVALIABLE = "UNAVALIABLE" + DOWNGRADED = "DOWNGRADED" + + +class _DataUpdateTimeItem(Struct, **_TOOLS_CONFIG_STRUCT_CONFIG): + collection: str + sort_key: str + sort_direction: Literal["asc", "desc"] + + +class _DataCountItem(Struct, **_TOOLS_CONFIG_STRUCT_CONFIG): + collection: str + mode: Literal["accurate", "estimated"] + + +class _ToolConfig(Struct, **_TOOLS_CONFIG_STRUCT_CONFIG): + status: ToolStatus + reason: Optional[str] + last_update_time: Optional[_DataUpdateTimeItem] + data_update_freq: Optional[str] + data_count: Optional[_DataCountItem] + data_source: Optional[Dict[str, str]] + + +with open("tools_config.yaml", "rb") as f: + TOOLS_CONFIG = decode(f.read(), type=Dict[str, _ToolConfig]) diff --git a/backend/wordcloud_assets/allowed_word_types.txt b/backend/wordcloud_assets/allowed_word_types.txt deleted file mode 100644 index f615fc0..0000000 --- a/backend/wordcloud_assets/allowed_word_types.txt +++ /dev/null @@ -1,21 +0,0 @@ -Ag -a -ad -an -dg -g -i -j -l -Ng -n -nr -ns -nt -nz -tg -vg -v -vd -vn -un \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 52a2268..7acf8d9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,7 @@ networks: services: web: - image: jtools-web:3.6.1 + image: jtools-web:3.7.0 build: dockerfile: Dockerfile.web ports: @@ -29,7 +29,7 @@ services: max_attempts: 3 stop_grace_period: 5s api: - image: jtools-api:3.6.1 + image: jtools-api:3.7.0 build: dockerfile: Dockerfile.api volumes: diff --git a/frontend/index.css b/frontend/index.css index 400fbd9..225a865 100644 --- a/frontend/index.css +++ b/frontend/index.css @@ -5,9 +5,6 @@ body ::selection { --at-apply: bg-zinc-300 dark:bg-zinc-700 } -.text-primary { - --at-apply: text-zinc-900 dark:text-zinc-300; -} .gray-border { --at-apply: border border-zinc-200 dark:border-zinc-600; } diff --git a/frontend/package.json b/frontend/package.json index a49bd5d..6c17787 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "jtools", "private": true, - "version": "3.6.1", + "version": "3.7.0", "type": "module", "scripts": { "dev": "vite", @@ -9,38 +9,39 @@ "preview": "vite preview" }, "dependencies": { - "@mantine/hooks": "^6.0.18", - "@preact/preset-vite": "^2.5.0", - "@preact/signals": "^1.2.0", - "@unocss/preset-rem-to-px": "^0.54.2", - "@unocss/reset": "^0.54.2", + "@mantine/hooks": "^7.2.2", + "@preact/preset-vite": "^2.7.0", + "@preact/signals": "^1.2.2", + "@sscreator/ui": "^0.11.0", + "@unocss/preset-rem-to-px": "^0.57.7", + "@unocss/reset": "^0.57.7", "clsx": "^2.0.0", - "dayjs": "^1.11.9", + "dayjs": "^1.11.10", "echarts": "^5.4.3", - "preact": "^10.16.0", + "preact": "^10.19.2", "react-d3-cloud": "^1.0.6", - "react-error-boundary": "^4.0.10", + "react-error-boundary": "^4.0.11", "react-hot-toast": "^2.4.1", - "react-icons": "^4.10.1", - "react-qr-code": "^2.0.11", + "react-icons": "^4.12.0", + "react-qr-code": "^2.0.12", "resize-observer": "^1.0.4", - "unocss": "^0.54.2", - "vite": "^4.4.9", + "unocss": "^0.57.7", + "vite": "^5.0.4", "vite-plugin-compression": "^0.5.1", - "vite-plugin-pwa": "^0.16.4", + "vite-plugin-pwa": "^0.17.2", "workbox-window": "^7.0.0", - "wouter-preact": "^2.11.0" + "wouter-preact": "^2.12.2" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^6.3.0", - "@typescript-eslint/parser": "^6.3.0", - "@unocss/eslint-config": "^0.54.2", - "eslint": "^8.46.0", + "@typescript-eslint/eslint-plugin": "^6.13.1", + "@typescript-eslint/parser": "^6.13.1", + "@unocss/eslint-config": "^0.57.7", + "eslint": "^8.55.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^17.1.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^5.0.0", - "prettier": "^3.0.1", - "rollup-plugin-visualizer": "^5.9.2" + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.0.1", + "prettier": "^3.1.0", + "rollup-plugin-visualizer": "^5.9.3" } } diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 0a5dfe8..c140825 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -1,150 +1,139 @@ -lockfileVersion: "6.0" +lockfileVersion: '6.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false dependencies: - "@mantine/hooks": - specifier: ^6.0.18 - version: 6.0.18(react@18.2.0) - "@preact/preset-vite": - specifier: ^2.5.0 - version: 2.5.0(@babel/core@7.22.10)(preact@10.16.0)(vite@4.4.9) - "@preact/signals": - specifier: ^1.2.0 - version: 1.2.0(preact@10.16.0) - "@unocss/preset-rem-to-px": - specifier: ^0.54.2 - version: 0.54.2 - "@unocss/reset": - specifier: ^0.54.2 - version: 0.54.2 + '@mantine/hooks': + specifier: ^7.2.2 + version: 7.2.2(react@18.2.0) + '@preact/preset-vite': + specifier: ^2.7.0 + version: 2.7.0(@babel/core@7.23.5)(preact@10.19.2)(vite@5.0.4) + '@preact/signals': + specifier: ^1.2.2 + version: 1.2.2(preact@10.19.2) + '@sscreator/ui': + specifier: ^0.11.0 + version: 0.11.0(@preact/signals@1.2.2)(clsx@2.0.0)(preact@10.19.2)(react-icons@4.12.0)(unocss@0.57.7)(wouter-preact@2.12.2) + '@unocss/preset-rem-to-px': + specifier: ^0.57.7 + version: 0.57.7 + '@unocss/reset': + specifier: ^0.57.7 + version: 0.57.7 clsx: specifier: ^2.0.0 version: 2.0.0 dayjs: - specifier: ^1.11.9 - version: 1.11.9 + specifier: ^1.11.10 + version: 1.11.10 echarts: specifier: ^5.4.3 version: 5.4.3 preact: - specifier: ^10.16.0 - version: 10.16.0 + specifier: ^10.19.2 + version: 10.19.2 react-d3-cloud: specifier: ^1.0.6 version: 1.0.6(react-dom@18.2.0)(react@18.2.0) react-error-boundary: - specifier: ^4.0.10 - version: 4.0.10(react@18.2.0) + specifier: ^4.0.11 + version: 4.0.11(react@18.2.0) react-hot-toast: specifier: ^2.4.1 version: 2.4.1(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0) react-icons: - specifier: ^4.10.1 - version: 4.10.1(react@18.2.0) + specifier: ^4.12.0 + version: 4.12.0(react@18.2.0) react-qr-code: - specifier: ^2.0.11 - version: 2.0.11(react@18.2.0) + specifier: ^2.0.12 + version: 2.0.12(react@18.2.0) resize-observer: specifier: ^1.0.4 version: 1.0.4 unocss: - specifier: ^0.54.2 - version: 0.54.2(postcss@8.4.27)(rollup@2.79.1)(vite@4.4.9) + specifier: ^0.57.7 + version: 0.57.7(postcss@8.4.32)(rollup@2.79.1)(vite@5.0.4) vite: - specifier: ^4.4.9 - version: 4.4.9 + specifier: ^5.0.4 + version: 5.0.4 vite-plugin-compression: specifier: ^0.5.1 - version: 0.5.1(vite@4.4.9) + version: 0.5.1(vite@5.0.4) vite-plugin-pwa: - specifier: ^0.16.4 - version: 0.16.4(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0) + specifier: ^0.17.2 + version: 0.17.2(vite@5.0.4)(workbox-build@7.0.0)(workbox-window@7.0.0) workbox-window: specifier: ^7.0.0 version: 7.0.0 wouter-preact: - specifier: ^2.11.0 - version: 2.11.0(preact@10.16.0) + specifier: ^2.12.2 + version: 2.12.2(preact@10.19.2) devDependencies: - "@typescript-eslint/eslint-plugin": - specifier: ^6.3.0 - version: 6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0)(typescript@5.1.6) - "@typescript-eslint/parser": - specifier: ^6.3.0 - version: 6.3.0(eslint@8.46.0)(typescript@5.1.6) - "@unocss/eslint-config": - specifier: ^0.54.2 - version: 0.54.2(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/eslint-plugin': + specifier: ^6.13.1 + version: 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/parser': + specifier: ^6.13.1 + version: 6.13.1(eslint@8.55.0)(typescript@5.3.2) + '@unocss/eslint-config': + specifier: ^0.57.7 + version: 0.57.7(eslint@8.55.0)(typescript@5.3.2) eslint: - specifier: ^8.46.0 - version: 8.46.0 + specifier: ^8.55.0 + version: 8.55.0 eslint-config-airbnb: specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.28.0)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.1)(eslint@8.46.0) + version: 19.0.4(eslint-plugin-import@2.29.0)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.55.0) eslint-config-airbnb-typescript: specifier: ^17.1.0 - version: 17.1.0(@typescript-eslint/eslint-plugin@6.3.0)(@typescript-eslint/parser@6.3.0)(eslint-plugin-import@2.28.0)(eslint@8.46.0) + version: 17.1.0(@typescript-eslint/eslint-plugin@6.13.1)(@typescript-eslint/parser@6.13.1)(eslint-plugin-import@2.29.0)(eslint@8.55.0) eslint-config-prettier: - specifier: ^9.0.0 - version: 9.0.0(eslint@8.46.0) + specifier: ^9.1.0 + version: 9.1.0(eslint@8.55.0) eslint-plugin-prettier: - specifier: ^5.0.0 - version: 5.0.0(eslint-config-prettier@9.0.0)(eslint@8.46.0)(prettier@3.0.1) + specifier: ^5.0.1 + version: 5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.0) prettier: - specifier: ^3.0.1 - version: 3.0.1 + specifier: ^3.1.0 + version: 3.1.0 rollup-plugin-visualizer: - specifier: ^5.9.2 - version: 5.9.2(rollup@2.79.1) + specifier: ^5.9.3 + version: 5.9.3(rollup@2.79.1) packages: + /@aashutoshrathi/word-wrap@1.2.6: - resolution: - { - integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} dev: true /@ampproject/remapping@2.2.1: - resolution: - { - integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} dependencies: - "@jridgewell/gen-mapping": 0.3.3 - "@jridgewell/trace-mapping": 0.3.19 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 dev: false /@antfu/install-pkg@0.1.1: - resolution: - { - integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==, - } + resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} dependencies: execa: 5.1.1 find-up: 5.0.0 dev: false - /@antfu/utils@0.7.5: - resolution: - { - integrity: sha512-dlR6LdS+0SzOAPx/TPRhnoi7hE251OVeT2Snw0RguNbBSbjUHdWr0l3vcUUDg26rEysT89kCbtw1lVorBXLLCg==, - } + /@antfu/utils@0.7.6: + resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==} /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): - resolution: - { - integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} peerDependencies: - ajv: ">=8" + ajv: '>=8' dependencies: ajv: 8.12.0 json-schema: 0.4.0 @@ -152,43 +141,34 @@ packages: leven: 3.1.0 dev: false - /@babel/code-frame@7.22.10: - resolution: - { - integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==, - } - engines: { node: ">=6.9.0" } + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/highlight": 7.22.10 + '@babel/highlight': 7.23.4 chalk: 2.4.2 dev: false - /@babel/compat-data@7.22.9: - resolution: - { - integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==, - } - engines: { node: ">=6.9.0" } - dev: false - - /@babel/core@7.22.10: - resolution: - { - integrity: sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@ampproject/remapping": 2.2.1 - "@babel/code-frame": 7.22.10 - "@babel/generator": 7.22.10 - "@babel/helper-compilation-targets": 7.22.10 - "@babel/helper-module-transforms": 7.22.9(@babel/core@7.22.10) - "@babel/helpers": 7.22.10 - "@babel/parser": 7.22.10 - "@babel/template": 7.22.5 - "@babel/traverse": 7.22.10 - "@babel/types": 7.22.10 - convert-source-map: 1.9.0 + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/core@7.23.5: + resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helpers': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 + convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 @@ -197,1772 +177,1427 @@ packages: - supports-color dev: false - /@babel/generator@7.22.10: - resolution: - { - integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==, - } - engines: { node: ">=6.9.0" } + /@babel/generator@7.23.5: + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.22.10 - "@jridgewell/gen-mapping": 0.3.3 - "@jridgewell/trace-mapping": 0.3.19 + '@babel/types': 7.23.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 dev: false /@babel/helper-annotate-as-pure@7.22.5: - resolution: - { - integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.22.10 + '@babel/types': 7.23.5 dev: false - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.10: - resolution: - { - integrity: sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.22.10 + '@babel/types': 7.23.5 dev: false - /@babel/helper-compilation-targets@7.22.10: - resolution: - { - integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/compat-data": 7.22.9 - "@babel/helper-validator-option": 7.22.5 - browserslist: 4.21.10 + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 dev: false - /@babel/helper-create-class-features-plugin@7.22.10(@babel/core@7.22.10): - resolution: - { - integrity: sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==, - } - engines: { node: ">=6.9.0" } - peerDependencies: - "@babel/core": ^7.0.0 - dependencies: - "@babel/core": 7.22.10 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-environment-visitor": 7.22.5 - "@babel/helper-function-name": 7.22.5 - "@babel/helper-member-expression-to-functions": 7.22.5 - "@babel/helper-optimise-call-expression": 7.22.5 - "@babel/helper-replace-supers": 7.22.9(@babel/core@7.22.10) - "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 - "@babel/helper-split-export-declaration": 7.22.6 + /@babel/helper-create-class-features-plugin@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: false - /@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.22.10): - resolution: - { - integrity: sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.5): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-annotate-as-pure": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: false - /@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.22.10): - resolution: - { - integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==, - } + /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.5): + resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-compilation-targets": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 lodash.debounce: 4.0.8 - resolve: 1.22.4 + resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: false - /@babel/helper-environment-visitor@7.22.5: - resolution: - { - integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} dev: false - /@babel/helper-function-name@7.22.5: - resolution: - { - integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/template": 7.22.5 - "@babel/types": 7.22.10 + '@babel/template': 7.22.15 + '@babel/types': 7.23.5 dev: false /@babel/helper-hoist-variables@7.22.5: - resolution: - { - integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.22.10 + '@babel/types': 7.23.5 dev: false - /@babel/helper-member-expression-to-functions@7.22.5: - resolution: - { - integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.22.10 + '@babel/types': 7.23.5 dev: false - /@babel/helper-module-imports@7.22.5: - resolution: - { - integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.22.10 + '@babel/types': 7.23.5 dev: false - /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.10): - resolution: - { - integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-environment-visitor": 7.22.5 - "@babel/helper-module-imports": 7.22.5 - "@babel/helper-simple-access": 7.22.5 - "@babel/helper-split-export-declaration": 7.22.6 - "@babel/helper-validator-identifier": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 dev: false /@babel/helper-optimise-call-expression@7.22.5: - resolution: - { - integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.22.10 + '@babel/types': 7.23.5 dev: false /@babel/helper-plugin-utils@7.22.5: - resolution: - { - integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} dev: false - /@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.22.10): - resolution: - { - integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.5): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-environment-visitor": 7.22.5 - "@babel/helper-wrap-function": 7.22.10 + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 dev: false - /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.10): - resolution: - { - integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-environment-visitor": 7.22.5 - "@babel/helper-member-expression-to-functions": 7.22.5 - "@babel/helper-optimise-call-expression": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 dev: false /@babel/helper-simple-access@7.22.5: - resolution: - { - integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.22.10 + '@babel/types': 7.23.5 dev: false /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: - { - integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.22.10 + '@babel/types': 7.23.5 dev: false /@babel/helper-split-export-declaration@7.22.6: - resolution: - { - integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.22.10 + '@babel/types': 7.23.5 dev: false - /@babel/helper-string-parser@7.22.5: - resolution: - { - integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} dev: false - /@babel/helper-validator-identifier@7.22.5: - resolution: - { - integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} dev: false - /@babel/helper-validator-option@7.22.5: - resolution: - { - integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} dev: false - /@babel/helper-wrap-function@7.22.10: - resolution: - { - integrity: sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==, - } - engines: { node: ">=6.9.0" } + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/helper-function-name": 7.22.5 - "@babel/template": 7.22.5 - "@babel/types": 7.22.10 + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.5 dev: false - /@babel/helpers@7.22.10: - resolution: - { - integrity: sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==, - } - engines: { node: ">=6.9.0" } + /@babel/helpers@7.23.5: + resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/template": 7.22.5 - "@babel/traverse": 7.22.10 - "@babel/types": 7.22.10 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 transitivePeerDependencies: - supports-color dev: false - /@babel/highlight@7.22.10: - resolution: - { - integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==, - } - engines: { node: ">=6.9.0" } + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/helper-validator-identifier": 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 dev: false - /@babel/parser@7.22.10: - resolution: - { - integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==, - } - engines: { node: ">=6.0.0" } + /@babel/parser@7.23.5: + resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} + engines: {node: '>=6.0.0'} hasBin: true dependencies: - "@babel/types": 7.22.10 + '@babel/types': 7.23.5 dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.13.0 + '@babel/core': ^7.13.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 - "@babel/plugin-transform-optional-chaining": 7.22.10(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) dev: false - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.10): - resolution: - { - integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.22.10 + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.10): - resolution: - { - integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, - } + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 dev: false - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.10): - resolution: - { - integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, - } + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.10): - resolution: - { - integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, - } + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.5): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.10): - resolution: - { - integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==, - } + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.10): - resolution: - { - integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, - } + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.10): - resolution: - { - integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, - } + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.10): - resolution: - { - integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, - } + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.10): - resolution: - { - integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, - } + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.10): - resolution: - { - integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, - } + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.10): - resolution: - { - integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, - } + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.10): - resolution: - { - integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, - } + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.10): - resolution: - { - integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, - } + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.5): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.10): - resolution: - { - integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-create-regexp-features-plugin": 7.22.9(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-async-generator-functions@7.22.10(@babel/core@7.22.10): - resolution: - { - integrity: sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.5): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-environment-visitor": 7.22.5 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-remap-async-to-generator": 7.22.9(@babel/core@7.22.10) - "@babel/plugin-syntax-async-generators": 7.8.4(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-module-imports": 7.22.5 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-remap-async-to-generator": 7.22.9(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-block-scoping@7.22.10(@babel/core@7.22.10): - resolution: - { - integrity: sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-create-class-features-plugin": 7.22.10(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.12.0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-create-class-features-plugin": 7.22.10(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-class-static-block": 7.14.5(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-classes@7.22.6(@babel/core@7.22.10): - resolution: - { - integrity: sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-compilation-targets": 7.22.10 - "@babel/helper-environment-visitor": 7.22.5 - "@babel/helper-function-name": 7.22.5 - "@babel/helper-optimise-call-expression": 7.22.5 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-replace-supers": 7.22.9(@babel/core@7.22.10) - "@babel/helper-split-export-declaration": 7.22.6 + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: false - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/template": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 dev: false - /@babel/plugin-transform-destructuring@7.22.10(@babel/core@7.22.10): - resolution: - { - integrity: sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-create-regexp-features-plugin": 7.22.9(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-dynamic-import": 7.8.3(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-builder-binary-assignment-operator-visitor": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-export-namespace-from": 7.8.3(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-compilation-targets": 7.22.10 - "@babel/helper-function-name": 7.22.5 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-json-strings": 7.8.3(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-logical-assignment-operators": 7.10.4(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-module-transforms": 7.22.9(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-module-transforms": 7.22.9(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-simple-access": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 dev: false - /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-hoist-variables": 7.22.5 - "@babel/helper-module-transforms": 7.22.9(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-validator-identifier": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 dev: false - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-module-transforms": 7.22.9(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.5): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-create-regexp-features-plugin": 7.22.9(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-nullish-coalescing-operator": 7.8.3(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-numeric-separator": 7.10.4(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/compat-data": 7.22.9 - "@babel/core": 7.22.10 - "@babel/helper-compilation-targets": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-object-rest-spread": 7.8.3(@babel/core@7.22.10) - "@babel/plugin-transform-parameters": 7.22.5(@babel/core@7.22.10) + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-replace-supers": 7.22.9(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-optional-catch-binding": 7.8.3(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-optional-chaining@7.22.10(@babel/core@7.22.10): - resolution: - { - integrity: sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 - "@babel/plugin-syntax-optional-chaining": 7.8.3(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-create-class-features-plugin": 7.22.10(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-create-class-features-plugin": 7.22.10(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-private-property-in-object": 7.14.5(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.5): + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/plugin-transform-react-jsx": 7.22.5(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-module-imports": 7.22.5 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-jsx": 7.22.5(@babel/core@7.22.10) - "@babel/types": 7.22.10 + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/types': 7.23.5 dev: false - /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.22.10): - resolution: - { - integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 dev: false - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-typescript@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) dev: false - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==, - } - engines: { node: ">=6.9.0" } + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - dev: false - - /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.22.10): - resolution: - { - integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==, - } - engines: { node: ">=6.9.0" } - peerDependencies: - "@babel/core": ^7.0.0-0 - dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - dev: false - - /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==, - } - engines: { node: ">=6.9.0" } - peerDependencies: - "@babel/core": ^7.0.0-0 - dependencies: - "@babel/core": 7.22.10 - "@babel/helper-create-regexp-features-plugin": 7.22.9(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 - dev: false - - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==, - } - engines: { node: ">=6.9.0" } - peerDependencies: - "@babel/core": ^7.0.0-0 - dependencies: - "@babel/core": 7.22.10 - "@babel/helper-create-regexp-features-plugin": 7.22.9(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 - dev: false - - /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==, - } - engines: { node: ">=6.9.0" } - peerDependencies: - "@babel/core": ^7.0.0 - dependencies: - "@babel/core": 7.22.10 - "@babel/helper-create-regexp-features-plugin": 7.22.9(@babel/core@7.22.10) - "@babel/helper-plugin-utils": 7.22.5 - dev: false - - /@babel/preset-env@7.22.10(@babel/core@7.22.10): - resolution: - { - integrity: sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==, - } - engines: { node: ">=6.9.0" } - peerDependencies: - "@babel/core": ^7.0.0-0 - dependencies: - "@babel/compat-data": 7.22.9 - "@babel/core": 7.22.10 - "@babel/helper-compilation-targets": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-validator-option": 7.22.5 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.10) - "@babel/plugin-syntax-async-generators": 7.8.4(@babel/core@7.22.10) - "@babel/plugin-syntax-class-properties": 7.12.13(@babel/core@7.22.10) - "@babel/plugin-syntax-class-static-block": 7.14.5(@babel/core@7.22.10) - "@babel/plugin-syntax-dynamic-import": 7.8.3(@babel/core@7.22.10) - "@babel/plugin-syntax-export-namespace-from": 7.8.3(@babel/core@7.22.10) - "@babel/plugin-syntax-import-assertions": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-syntax-import-attributes": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-syntax-import-meta": 7.10.4(@babel/core@7.22.10) - "@babel/plugin-syntax-json-strings": 7.8.3(@babel/core@7.22.10) - "@babel/plugin-syntax-logical-assignment-operators": 7.10.4(@babel/core@7.22.10) - "@babel/plugin-syntax-nullish-coalescing-operator": 7.8.3(@babel/core@7.22.10) - "@babel/plugin-syntax-numeric-separator": 7.10.4(@babel/core@7.22.10) - "@babel/plugin-syntax-object-rest-spread": 7.8.3(@babel/core@7.22.10) - "@babel/plugin-syntax-optional-catch-binding": 7.8.3(@babel/core@7.22.10) - "@babel/plugin-syntax-optional-chaining": 7.8.3(@babel/core@7.22.10) - "@babel/plugin-syntax-private-property-in-object": 7.14.5(@babel/core@7.22.10) - "@babel/plugin-syntax-top-level-await": 7.14.5(@babel/core@7.22.10) - "@babel/plugin-syntax-unicode-sets-regex": 7.18.6(@babel/core@7.22.10) - "@babel/plugin-transform-arrow-functions": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-async-generator-functions": 7.22.10(@babel/core@7.22.10) - "@babel/plugin-transform-async-to-generator": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-block-scoped-functions": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-block-scoping": 7.22.10(@babel/core@7.22.10) - "@babel/plugin-transform-class-properties": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-class-static-block": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-classes": 7.22.6(@babel/core@7.22.10) - "@babel/plugin-transform-computed-properties": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-destructuring": 7.22.10(@babel/core@7.22.10) - "@babel/plugin-transform-dotall-regex": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-duplicate-keys": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-dynamic-import": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-exponentiation-operator": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-export-namespace-from": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-for-of": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-function-name": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-json-strings": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-literals": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-logical-assignment-operators": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-member-expression-literals": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-modules-amd": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-modules-commonjs": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-modules-systemjs": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-modules-umd": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-named-capturing-groups-regex": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-new-target": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-nullish-coalescing-operator": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-numeric-separator": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-object-rest-spread": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-object-super": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-optional-catch-binding": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-optional-chaining": 7.22.10(@babel/core@7.22.10) - "@babel/plugin-transform-parameters": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-private-methods": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-private-property-in-object": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-property-literals": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-regenerator": 7.22.10(@babel/core@7.22.10) - "@babel/plugin-transform-reserved-words": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-shorthand-properties": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-spread": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-sticky-regex": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-template-literals": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-typeof-symbol": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-unicode-escapes": 7.22.10(@babel/core@7.22.10) - "@babel/plugin-transform-unicode-property-regex": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-unicode-regex": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-unicode-sets-regex": 7.22.5(@babel/core@7.22.10) - "@babel/preset-modules": 0.1.6-no-external-plugins(@babel/core@7.22.10) - "@babel/types": 7.22.10 - babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.10) - babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.10) - babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.10) - core-js-compat: 3.32.0 + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/preset-env@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.5) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.5) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.5) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.5) + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.5) + babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.5) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.5) + core-js-compat: 3.33.3 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.22.10): - resolution: - { - integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, - } + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.5): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: - "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/types": 7.22.10 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.5 esutils: 2.0.3 dev: false + /@babel/preset-typescript@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5) + dev: false + /@babel/regjsgen@0.8.0: - resolution: - { - integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==, - } + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: false - /@babel/runtime@7.22.10: - resolution: - { - integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==, - } - engines: { node: ">=6.9.0" } + /@babel/runtime@7.23.5: + resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} + engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 - /@babel/template@7.22.5: - resolution: - { - integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/code-frame": 7.22.10 - "@babel/parser": 7.22.10 - "@babel/types": 7.22.10 - dev: false - - /@babel/traverse@7.22.10: - resolution: - { - integrity: sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/code-frame": 7.22.10 - "@babel/generator": 7.22.10 - "@babel/helper-environment-visitor": 7.22.5 - "@babel/helper-function-name": 7.22.5 - "@babel/helper-hoist-variables": 7.22.5 - "@babel/helper-split-export-declaration": 7.22.6 - "@babel/parser": 7.22.10 - "@babel/types": 7.22.10 + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 + dev: false + + /@babel/traverse@7.23.5: + resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: false - /@babel/types@7.22.10: - resolution: - { - integrity: sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==, - } - engines: { node: ">=6.9.0" } + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/helper-string-parser": 7.22.5 - "@babel/helper-validator-identifier": 7.22.5 + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: false - /@esbuild/android-arm64@0.18.20: - resolution: - { - integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, - } - engines: { node: ">=12" } + /@esbuild/android-arm64@0.19.8: + resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==} + engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true dev: false optional: true - /@esbuild/android-arm@0.18.20: - resolution: - { - integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, - } - engines: { node: ">=12" } + /@esbuild/android-arm@0.19.8: + resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==} + engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true dev: false optional: true - /@esbuild/android-x64@0.18.20: - resolution: - { - integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, - } - engines: { node: ">=12" } + /@esbuild/android-x64@0.19.8: + resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==} + engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true dev: false optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: - { - integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, - } - engines: { node: ">=12" } + /@esbuild/darwin-arm64@0.19.8: + resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true dev: false optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: - { - integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, - } - engines: { node: ">=12" } + /@esbuild/darwin-x64@0.19.8: + resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true dev: false optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: - { - integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, - } - engines: { node: ">=12" } + /@esbuild/freebsd-arm64@0.19.8: + resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true dev: false optional: true - /@esbuild/freebsd-x64@0.18.20: - resolution: - { - integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, - } - engines: { node: ">=12" } + /@esbuild/freebsd-x64@0.19.8: + resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true dev: false optional: true - /@esbuild/linux-arm64@0.18.20: - resolution: - { - integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, - } - engines: { node: ">=12" } + /@esbuild/linux-arm64@0.19.8: + resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true dev: false optional: true - /@esbuild/linux-arm@0.18.20: - resolution: - { - integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, - } - engines: { node: ">=12" } + /@esbuild/linux-arm@0.19.8: + resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==} + engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true dev: false optional: true - /@esbuild/linux-ia32@0.18.20: - resolution: - { - integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, - } - engines: { node: ">=12" } + /@esbuild/linux-ia32@0.19.8: + resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true dev: false optional: true - /@esbuild/linux-loong64@0.18.20: - resolution: - { - integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, - } - engines: { node: ">=12" } + /@esbuild/linux-loong64@0.19.8: + resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true dev: false optional: true - /@esbuild/linux-mips64el@0.18.20: - resolution: - { - integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, - } - engines: { node: ">=12" } + /@esbuild/linux-mips64el@0.19.8: + resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true dev: false optional: true - /@esbuild/linux-ppc64@0.18.20: - resolution: - { - integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, - } - engines: { node: ">=12" } + /@esbuild/linux-ppc64@0.19.8: + resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true dev: false optional: true - /@esbuild/linux-riscv64@0.18.20: - resolution: - { - integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, - } - engines: { node: ">=12" } + /@esbuild/linux-riscv64@0.19.8: + resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true dev: false optional: true - /@esbuild/linux-s390x@0.18.20: - resolution: - { - integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, - } - engines: { node: ">=12" } + /@esbuild/linux-s390x@0.19.8: + resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true dev: false optional: true - /@esbuild/linux-x64@0.18.20: - resolution: - { - integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, - } - engines: { node: ">=12" } + /@esbuild/linux-x64@0.19.8: + resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==} + engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true dev: false optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: - { - integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, - } - engines: { node: ">=12" } + /@esbuild/netbsd-x64@0.19.8: + resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true dev: false optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: - { - integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, - } - engines: { node: ">=12" } + /@esbuild/openbsd-x64@0.19.8: + resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true dev: false optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: - { - integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, - } - engines: { node: ">=12" } + /@esbuild/sunos-x64@0.19.8: + resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true dev: false optional: true - /@esbuild/win32-arm64@0.18.20: - resolution: - { - integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, - } - engines: { node: ">=12" } + /@esbuild/win32-arm64@0.19.8: + resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true dev: false optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: - { - integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, - } - engines: { node: ">=12" } + /@esbuild/win32-ia32@0.19.8: + resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true dev: false optional: true - /@esbuild/win32-x64@0.18.20: - resolution: - { - integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, - } - engines: { node: ">=12" } + /@esbuild/win32-x64@0.19.8: + resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==} + engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true dev: false optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): - resolution: - { - integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.46.0 - eslint-visitor-keys: 3.4.2 + eslint: 8.55.0 + eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.6.2: - resolution: - { - integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==, - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.1: - resolution: - { - integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.20.0 - ignore: 5.2.4 + globals: 13.23.0 + ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1971,22 +1606,16 @@ packages: - supports-color dev: true - /@eslint/js@8.46.0: - resolution: - { - integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + /@eslint/js@8.55.0: + resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array@0.11.10: - resolution: - { - integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==, - } - engines: { node: ">=10.10.0" } + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} dependencies: - "@humanwhocodes/object-schema": 1.2.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1994,36 +1623,24 @@ packages: dev: true /@humanwhocodes/module-importer@1.0.1: - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, - } - engines: { node: ">=12.22" } + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: - { - integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, - } + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@iconify/types@2.0.0: - resolution: - { - integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==, - } + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} dev: false - /@iconify/utils@2.1.7: - resolution: - { - integrity: sha512-P8S3z/L1LcV4Qem9AoCfVAaTFGySEMzFEY4CHZLkfRj0Fv9LiR+AwjDgrDrzyI93U2L2mg9JHsbTJ52mF8suNw==, - } + /@iconify/utils@2.1.12: + resolution: {integrity: sha512-7vf3Uk6H7TKX4QMs2gbg5KR1X9J0NJzKSRNWhMZ+PWN92l0t6Q3tj2ZxLDG07rC3ppWBtTtA4FPmkQphuEmdsg==} dependencies: - "@antfu/install-pkg": 0.1.1 - "@antfu/utils": 0.7.5 - "@iconify/types": 2.0.0 + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.6 + '@iconify/types': 2.0.0 debug: 4.3.4 kolorist: 1.8.0 local-pkg: 0.4.3 @@ -2032,926 +1649,780 @@ packages: dev: false /@jridgewell/gen-mapping@0.3.3: - resolution: - { - integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} dependencies: - "@jridgewell/set-array": 1.1.2 - "@jridgewell/sourcemap-codec": 1.4.15 - "@jridgewell/trace-mapping": 0.3.19 + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 dev: false /@jridgewell/resolve-uri@3.1.1: - resolution: - { - integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} dev: false /@jridgewell/set-array@1.1.2: - resolution: - { - integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} dev: false /@jridgewell/source-map@0.3.5: - resolution: - { - integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==, - } + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - "@jridgewell/gen-mapping": 0.3.3 - "@jridgewell/trace-mapping": 0.3.19 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 dev: false /@jridgewell/sourcemap-codec@1.4.15: - resolution: - { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, - } + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.19: - resolution: - { - integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==, - } + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: - "@jridgewell/resolve-uri": 3.1.1 - "@jridgewell/sourcemap-codec": 1.4.15 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: false - /@mantine/hooks@6.0.18(react@18.2.0): - resolution: - { - integrity: sha512-i9RxEtC+7t5qG5Gn5SqTHkHxH9MSsGi9mQebt/GitX9+d9BVBwYLqutlDlHvb8bvDteuYphX5VWLSnJXT4Pivw==, - } + /@mantine/hooks@7.2.2(react@18.2.0): + resolution: {integrity: sha512-7CFSVP2aQHrBwLLAVf0q5dgj+6QTZmhLTNcuc3pE1du+HLFUdyVS6vvQC6kieZXxOd6UzwFGBlN4G+aDx95XeA==} peerDependencies: - react: ">=16.8.0" + react: ^18.2.0 dependencies: react: 18.2.0 dev: false /@nodelib/fs.scandir@2.1.5: - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: - "@nodelib/fs.stat": 2.0.5 + '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 /@nodelib/fs.stat@2.0.5: - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} /@nodelib/fs.walk@1.2.8: - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: - "@nodelib/fs.scandir": 2.1.5 + '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 /@pkgr/utils@2.4.2: - resolution: - { - integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==, - } - engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dependencies: cross-spawn: 7.0.3 - fast-glob: 3.3.1 + fast-glob: 3.3.2 is-glob: 4.0.3 open: 9.1.0 picocolors: 1.0.0 - tslib: 2.6.1 + tslib: 2.6.2 dev: true - /@polka/url@1.0.0-next.21: - resolution: - { - integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==, - } + /@polka/url@1.0.0-next.23: + resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} dev: false - /@preact/preset-vite@2.5.0(@babel/core@7.22.10)(preact@10.16.0)(vite@4.4.9): - resolution: - { - integrity: sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==, - } + /@preact/preset-vite@2.7.0(@babel/core@7.23.5)(preact@10.19.2)(vite@5.0.4): + resolution: {integrity: sha512-m5N0FVtxbCCDxNk55NGhsRpKJChYcupcuQHzMJc/Bll07IKZKn8amwYciyKFS9haU6AgzDAJ/ewvApr6Qg1DHw==} peerDependencies: - "@babel/core": 7.x - vite: 2.x || 3.x || 4.x + '@babel/core': 7.x + vite: 2.x || 3.x || 4.x || 5.x dependencies: - "@babel/core": 7.22.10 - "@babel/plugin-transform-react-jsx": 7.22.5(@babel/core@7.22.10) - "@babel/plugin-transform-react-jsx-development": 7.22.5(@babel/core@7.22.10) - "@prefresh/vite": 2.4.1(preact@10.16.0)(vite@4.4.9) - "@rollup/pluginutils": 4.2.1 - babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.5) + '@prefresh/vite': 2.4.4(preact@10.19.2)(vite@5.0.4) + '@rollup/pluginutils': 4.2.1 + babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.23.5) debug: 4.3.4 kolorist: 1.8.0 - resolve: 1.22.4 - vite: 4.4.9 + resolve: 1.22.8 + vite: 5.0.4 transitivePeerDependencies: - preact - supports-color dev: false - /@preact/signals-core@1.4.0: - resolution: - { - integrity: sha512-5iYoZBhELLIhUQceZI7sDTQWPb+xcVSn2qk8T/aNl/VMh+A4AiPX9YRSh4XO7fZ6pncrVxl1Iln82poVqYVbbw==, - } + /@preact/signals-core@1.5.0: + resolution: {integrity: sha512-U2diO1Z4i1n2IoFgMYmRdHWGObNrcuTRxyNEn7deSq2cru0vj0583HYQZHsAqcs7FE+hQyX3mjIV7LAfHCvy8w==} dev: false - /@preact/signals@1.2.0(preact@10.16.0): - resolution: - { - integrity: sha512-hrPOJ6L4XI/6iFJ++JitYG7W22E0+oNDkWH9W1gCutcKYCJq5tvhKcnxkLShCuctNZkwUBpu4XeIiVr5wC4NnA==, - } + /@preact/signals@1.2.2(preact@10.19.2): + resolution: {integrity: sha512-ColCqdo4cRP18bAuIR4Oik5rDpiyFtPIJIygaYPMEAwTnl4buWkBOflGBSzhYyPyJfKpkwlekrvK+1pzQ2ldWw==} peerDependencies: preact: 10.x dependencies: - "@preact/signals-core": 1.4.0 - preact: 10.16.0 + '@preact/signals-core': 1.5.0 + preact: 10.19.2 dev: false - /@prefresh/babel-plugin@0.5.0: - resolution: - { - integrity: sha512-joAwpkUDwo7ZqJnufXRGzUb+udk20RBgfA8oLPBh5aJH2LeStmV1luBfeJTztPdyCscC2j2SmZ/tVxFRMIxAEw==, - } + /@prefresh/babel-plugin@0.5.1: + resolution: {integrity: sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==} dev: false - /@prefresh/core@1.5.1(preact@10.16.0): - resolution: - { - integrity: sha512-e0mB0Oxtog6ZpKPDBYbzFniFJDIktuKMzOHp7sguntU+ot0yi6dbhJRE9Css1qf0u16wdSZjpL2W2ODWuU05Cw==, - } + /@prefresh/core@1.5.2(preact@10.19.2): + resolution: {integrity: sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==} peerDependencies: preact: ^10.0.0 dependencies: - preact: 10.16.0 + preact: 10.19.2 dev: false /@prefresh/utils@1.2.0: - resolution: - { - integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==, - } + resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==} dev: false - /@prefresh/vite@2.4.1(preact@10.16.0)(vite@4.4.9): - resolution: - { - integrity: sha512-vthWmEqu8TZFeyrBNc9YE5SiC3DVSzPgsOCp/WQ7FqdHpOIJi7Z8XvCK06rBPOtG4914S52MjG9Ls22eVAiuqQ==, - } + /@prefresh/vite@2.4.4(preact@10.19.2)(vite@5.0.4): + resolution: {integrity: sha512-7jcz3j5pXufOWTjl31n0Lc3BcU8oGoacoaWx/Ur1QJ+fd4Xu0G7g/ER1xV02x7DCiVoFi7xtSgaophOXoJvpmA==} peerDependencies: preact: ^10.4.0 - vite: ">=2.0.0" - dependencies: - "@babel/core": 7.22.10 - "@prefresh/babel-plugin": 0.5.0 - "@prefresh/core": 1.5.1(preact@10.16.0) - "@prefresh/utils": 1.2.0 - "@rollup/pluginutils": 4.2.1 - preact: 10.16.0 - vite: 4.4.9 + vite: '>=2.0.0' + dependencies: + '@babel/core': 7.23.5 + '@prefresh/babel-plugin': 0.5.1 + '@prefresh/core': 1.5.2(preact@10.19.2) + '@prefresh/utils': 1.2.0 + '@rollup/pluginutils': 4.2.1 + preact: 10.19.2 + vite: 5.0.4 transitivePeerDependencies: - supports-color dev: false - /@rollup/plugin-babel@5.3.1(@babel/core@7.22.10)(rollup@2.79.1): - resolution: - { - integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==, - } - engines: { node: ">= 10.0.0" } + /@rollup/plugin-babel@5.3.1(@babel/core@7.23.5)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} peerDependencies: - "@babel/core": ^7.0.0 - "@types/babel__core": ^7.1.9 + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 rollup: ^1.20.0||^2.0.0 peerDependenciesMeta: - "@types/babel__core": + '@types/babel__core': optional: true dependencies: - "@babel/core": 7.22.10 - "@babel/helper-module-imports": 7.22.5 - "@rollup/pluginutils": 3.1.0(rollup@2.79.1) + '@babel/core': 7.23.5 + '@babel/helper-module-imports': 7.22.15 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 dev: false /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): - resolution: - { - integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0 dependencies: - "@rollup/pluginutils": 3.1.0(rollup@2.79.1) - "@types/resolve": 1.17.1 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 builtin-modules: 3.3.0 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.4 + resolve: 1.22.8 rollup: 2.79.1 dev: false /@rollup/plugin-replace@2.4.2(rollup@2.79.1): - resolution: - { - integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==, - } + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 dependencies: - "@rollup/pluginutils": 3.1.0(rollup@2.79.1) + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) magic-string: 0.25.9 rollup: 2.79.1 dev: false /@rollup/pluginutils@3.1.0(rollup@2.79.1): - resolution: - { - integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==, - } - engines: { node: ">= 8.0.0" } + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0 dependencies: - "@types/estree": 0.0.39 + '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.1 rollup: 2.79.1 dev: false /@rollup/pluginutils@4.2.1: - resolution: - { - integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==, - } - engines: { node: ">= 8.0.0" } + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} dependencies: estree-walker: 2.0.2 picomatch: 2.3.1 dev: false - /@rollup/pluginutils@5.0.2(rollup@2.79.1): - resolution: - { - integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==, - } - engines: { node: ">=14.0.0" } + /@rollup/pluginutils@5.1.0(rollup@2.79.1): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true dependencies: - "@types/estree": 1.0.1 + '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 rollup: 2.79.1 dev: false + /@rollup/rollup-android-arm-eabi@4.6.1: + resolution: {integrity: sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-android-arm64@4.6.1: + resolution: {integrity: sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-darwin-arm64@4.6.1: + resolution: {integrity: sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-darwin-x64@4.6.1: + resolution: {integrity: sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.6.1: + resolution: {integrity: sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.6.1: + resolution: {integrity: sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-arm64-musl@4.6.1: + resolution: {integrity: sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-x64-gnu@4.6.1: + resolution: {integrity: sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-x64-musl@4.6.1: + resolution: {integrity: sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.6.1: + resolution: {integrity: sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.6.1: + resolution: {integrity: sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-win32-x64-msvc@4.6.1: + resolution: {integrity: sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@sscreator/ui@0.11.0(@preact/signals@1.2.2)(clsx@2.0.0)(preact@10.19.2)(react-icons@4.12.0)(unocss@0.57.7)(wouter-preact@2.12.2): + resolution: {integrity: sha512-29gj2+BxNgXxnEDSLCCFVhkTFyOPoqw6yksThunPOPbSfHsa1+xm2dr+4opd5jqfJa6o/kDIXc5m5aokJecR+w==} + peerDependencies: + '@preact/signals': ^1.2.0 + clsx: ^2.0.0 + preact: ^10.16.0 + react-icons: ^4.10.1 + unocss: ^0.55.2 + wouter-preact: ^2.11.0 + dependencies: + '@preact/signals': 1.2.2(preact@10.19.2) + clsx: 2.0.0 + preact: 10.19.2 + react-icons: 4.12.0(react@18.2.0) + unocss: 0.57.7(postcss@8.4.32)(rollup@2.79.1)(vite@5.0.4) + wouter-preact: 2.12.2(preact@10.19.2) + dev: false + /@surma/rollup-plugin-off-main-thread@2.2.3: - resolution: - { - integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==, - } + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} dependencies: ejs: 3.1.9 json5: 2.2.3 magic-string: 0.25.9 - string.prototype.matchall: 4.0.8 + string.prototype.matchall: 4.0.10 dev: false /@types/estree@0.0.39: - resolution: - { - integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==, - } + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: false - /@types/estree@1.0.1: - resolution: - { - integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==, - } + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: false - /@types/json-schema@7.0.12: - resolution: - { - integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==, - } + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true /@types/json5@0.0.29: - resolution: - { - integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, - } + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/node@20.4.9: - resolution: - { - integrity: sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ==, - } + /@types/node@20.10.2: + resolution: {integrity: sha512-37MXfxkb0vuIlRKHNxwCkb60PNBpR94u4efQuN4JgIAm66zfCDXGSAFCef9XUWFovX2R1ok6Z7MHhtdVXXkkIw==} + dependencies: + undici-types: 5.26.5 dev: false /@types/resolve@1.17.1: - resolution: - { - integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==, - } + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - "@types/node": 20.4.9 + '@types/node': 20.10.2 dev: false - /@types/semver@7.5.0: - resolution: - { - integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==, - } + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@types/trusted-types@2.0.3: - resolution: - { - integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==, - } + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} dev: false - /@typescript-eslint/eslint-plugin@6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0)(typescript@5.1.6): - resolution: - { - integrity: sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + /@typescript-eslint/eslint-plugin@6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2): + resolution: {integrity: sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha eslint: ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@eslint-community/regexpp": 4.6.2 - "@typescript-eslint/parser": 6.3.0(eslint@8.46.0)(typescript@5.1.6) - "@typescript-eslint/scope-manager": 6.3.0 - "@typescript-eslint/type-utils": 6.3.0(eslint@8.46.0)(typescript@5.1.6) - "@typescript-eslint/utils": 6.3.0(eslint@8.46.0)(typescript@5.1.6) - "@typescript-eslint/visitor-keys": 6.3.0 + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.13.1(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/scope-manager': 6.13.1 + '@typescript-eslint/type-utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.13.1 debug: 4.3.4 - eslint: 8.46.0 + eslint: 8.55.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 natural-compare: 1.4.0 - natural-compare-lite: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.1.6) - typescript: 5.1.6 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.3.0(eslint@8.46.0)(typescript@5.1.6): - resolution: - { - integrity: sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + /@typescript-eslint/parser@6.13.1(eslint@8.55.0)(typescript@5.3.2): + resolution: {integrity: sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/scope-manager": 6.3.0 - "@typescript-eslint/types": 6.3.0 - "@typescript-eslint/typescript-estree": 6.3.0(typescript@5.1.6) - "@typescript-eslint/visitor-keys": 6.3.0 + '@typescript-eslint/scope-manager': 6.13.1 + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.13.1 debug: 4.3.4 - eslint: 8.46.0 - typescript: 5.1.6 + eslint: 8.55.0 + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: - { - integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 - dev: true - - /@typescript-eslint/scope-manager@6.3.0: - resolution: - { - integrity: sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + /@typescript-eslint/scope-manager@6.13.1: + resolution: {integrity: sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - "@typescript-eslint/types": 6.3.0 - "@typescript-eslint/visitor-keys": 6.3.0 + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/visitor-keys': 6.13.1 dev: true - /@typescript-eslint/type-utils@6.3.0(eslint@8.46.0)(typescript@5.1.6): - resolution: - { - integrity: sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + /@typescript-eslint/type-utils@6.13.1(eslint@8.55.0)(typescript@5.3.2): + resolution: {integrity: sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/typescript-estree": 6.3.0(typescript@5.1.6) - "@typescript-eslint/utils": 6.3.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) + '@typescript-eslint/utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) debug: 4.3.4 - eslint: 8.46.0 - ts-api-utils: 1.0.1(typescript@5.1.6) - typescript: 5.1.6 + eslint: 8.55.0 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.62.0: - resolution: - { - integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - dev: true - - /@typescript-eslint/types@6.3.0: - resolution: - { - integrity: sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + /@typescript-eslint/types@6.13.1: + resolution: {integrity: sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==} + engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.6): - resolution: - { - integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + /@typescript-eslint/typescript-estree@6.13.1(typescript@5.3.2): + resolution: {integrity: sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/visitor-keys': 6.13.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.1.6) - typescript: 5.1.6 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.6): - resolution: - { - integrity: sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg==, - } - engines: { node: ^16.0.0 || >=18.0.0 } - peerDependencies: - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - dependencies: - "@typescript-eslint/types": 6.3.0 - "@typescript-eslint/visitor-keys": 6.3.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.1.6) - typescript: 5.1.6 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@5.62.0(eslint@8.46.0)(typescript@5.1.6): - resolution: - { - integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.46.0) - "@types/json-schema": 7.0.12 - "@types/semver": 7.5.0 - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0(typescript@5.1.6) - eslint: 8.46.0 - eslint-scope: 5.1.1 - semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color - - typescript dev: true - /@typescript-eslint/utils@6.3.0(eslint@8.46.0)(typescript@5.1.6): - resolution: - { - integrity: sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + /@typescript-eslint/utils@6.13.1(eslint@8.55.0)(typescript@5.3.2): + resolution: {integrity: sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.46.0) - "@types/json-schema": 7.0.12 - "@types/semver": 7.5.0 - "@typescript-eslint/scope-manager": 6.3.0 - "@typescript-eslint/types": 6.3.0 - "@typescript-eslint/typescript-estree": 6.3.0(typescript@5.1.6) - eslint: 8.46.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.13.1 + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) + eslint: 8.55.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: - { - integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + /@typescript-eslint/visitor-keys@6.13.1: + resolution: {integrity: sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - "@typescript-eslint/types": 5.62.0 - eslint-visitor-keys: 3.4.2 + '@typescript-eslint/types': 6.13.1 + eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.3.0: - resolution: - { - integrity: sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw==, - } - engines: { node: ^16.0.0 || >=18.0.0 } - dependencies: - "@typescript-eslint/types": 6.3.0 - eslint-visitor-keys: 3.4.2 + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@unocss/astro@0.54.2(rollup@2.79.1)(vite@4.4.9): - resolution: - { - integrity: sha512-g195oae1c4sT1eKhDe6Td7l0KGUXiOXu3syKwqCtiTGol9fPG4tb2V20vT9SouDTWhIpcc0+TyNEcOYAKJB28Q==, - } + /@unocss/astro@0.57.7(rollup@2.79.1)(vite@5.0.4): + resolution: {integrity: sha512-X4KSBdrAADdtS4x7xz02b016xpRDt9mD/d/oq23HyZAZ+sZc4oZs8el9MLSUJgu2okdWzAE62lRRV/oc4HWI1A==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 + peerDependenciesMeta: + vite: + optional: true dependencies: - "@unocss/core": 0.54.2 - "@unocss/reset": 0.54.2 - "@unocss/vite": 0.54.2(rollup@2.79.1)(vite@4.4.9) + '@unocss/core': 0.57.7 + '@unocss/reset': 0.57.7 + '@unocss/vite': 0.57.7(rollup@2.79.1)(vite@5.0.4) + vite: 5.0.4 transitivePeerDependencies: - rollup - - vite dev: false - /@unocss/cli@0.54.2(rollup@2.79.1): - resolution: - { - integrity: sha512-k4FUlGSEeTRE6h57PxqZ4Yfrz7LhDclJj6V4dHAvbilbRiUu94OKHgSaiRQI1D5GweJS3D5h/MF6rnKOV6Yk0A==, - } - engines: { node: ">=14" } + /@unocss/cli@0.57.7(rollup@2.79.1): + resolution: {integrity: sha512-FZHTTBYyibySpBEPbA/ilDzI4v4Uy/bROItEYogZkpXNoCLzlclX+UcuFBXXLt6VFJk4WjLNFLRSQlVcCUUOLA==} + engines: {node: '>=14'} hasBin: true dependencies: - "@ampproject/remapping": 2.2.1 - "@rollup/pluginutils": 5.0.2(rollup@2.79.1) - "@unocss/config": 0.54.2 - "@unocss/core": 0.54.2 - "@unocss/preset-uno": 0.54.2 + '@ampproject/remapping': 2.2.1 + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + '@unocss/config': 0.57.7 + '@unocss/core': 0.57.7 + '@unocss/preset-uno': 0.57.7 cac: 6.7.14 chokidar: 3.5.3 colorette: 2.0.20 consola: 3.2.3 - fast-glob: 3.3.1 - magic-string: 0.30.2 + fast-glob: 3.3.2 + magic-string: 0.30.5 pathe: 1.1.1 perfect-debounce: 1.0.0 transitivePeerDependencies: - rollup dev: false - /@unocss/config@0.54.2: - resolution: - { - integrity: sha512-C5ktHfNCJMOZWhjHgK3e8qF5XJVN10jsRGzfiSZRCcO4q8uMoLhqJwJUpGlxKTwX5n/CRREL9555r3wiKt5f0w==, - } - engines: { node: ">=14" } + /@unocss/config@0.57.7: + resolution: {integrity: sha512-UG8G9orWEdk/vyDvGUToXYn/RZy/Qjpx66pLsaf5wQK37hkYsBoReAU5v8Ia/6PL1ueJlkcNXLaNpN6/yVoJvg==} + engines: {node: '>=14'} dependencies: - "@unocss/core": 0.54.2 - unconfig: 0.3.10 + '@unocss/core': 0.57.7 + unconfig: 0.3.11 - /@unocss/core@0.54.2: - resolution: - { - integrity: sha512-PyyJOJtZ2K0BVSawAA/5X46w3Vgj/39jy+2EGKrT0KD4pbYid8oQo84OkXEEms5gAnIAAZHayGqs43zi/FRp0A==, - } + /@unocss/core@0.57.7: + resolution: {integrity: sha512-1d36M0CV3yC80J0pqOa5rH1BX6g2iZdtKmIb3oSBN4AWnMCSrrJEPBrUikyMq2TEQTrYWJIVDzv5A9hBUat3TA==} - /@unocss/eslint-config@0.54.2(eslint@8.46.0)(typescript@5.1.6): - resolution: - { - integrity: sha512-qetc72HPXDWEc3BcNXl747c2WIKMF93XtfoVpf/BEm34L3V7YNx83OWLrZZzZlG8RGOERRHaKilEACEbiQCXGg==, - } - engines: { node: ">=14" } + /@unocss/eslint-config@0.57.7(eslint@8.55.0)(typescript@5.3.2): + resolution: {integrity: sha512-EJlI6rV0ZfDCphIiddHSWZVeoHdYDTVohVXGo+NfNOuRuvYWGna3n4hY3VEAiT3mWLK0/0anzHF7X0PNzCR5lQ==} + engines: {node: '>=14'} dependencies: - "@unocss/eslint-plugin": 0.54.2(eslint@8.46.0)(typescript@5.1.6) + '@unocss/eslint-plugin': 0.57.7(eslint@8.55.0)(typescript@5.3.2) transitivePeerDependencies: - eslint - supports-color - typescript dev: true - /@unocss/eslint-plugin@0.54.2(eslint@8.46.0)(typescript@5.1.6): - resolution: - { - integrity: sha512-Zmwt2uoSQ0bDmZx/aJxmtBSsu0RymaNydyHYGC3WTjyhxteb4XSfVGjkCLenBU4nVNPOxLVdZRcVuM23H/GVhA==, - } - engines: { node: ">=14" } + /@unocss/eslint-plugin@0.57.7(eslint@8.55.0)(typescript@5.3.2): + resolution: {integrity: sha512-nwj7UJF7wCfPVl5B7cUB0xrSk6yuVMdMgABnsy4N5xBlds8cclrUO+boaTB9qzh8Lg9nfJVLB3+cW3po2SJoew==} + engines: {node: '>=14'} dependencies: - "@typescript-eslint/utils": 5.62.0(eslint@8.46.0)(typescript@5.1.6) - "@unocss/config": 0.54.2 - "@unocss/core": 0.54.2 - magic-string: 0.30.2 - synckit: 0.8.5 + '@typescript-eslint/utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) + '@unocss/config': 0.57.7 + '@unocss/core': 0.57.7 + magic-string: 0.30.5 + synckit: 0.8.6 transitivePeerDependencies: - eslint - supports-color - typescript dev: true - /@unocss/extractor-arbitrary-variants@0.54.2: - resolution: - { - integrity: sha512-VZ1NCwjwO5UM1HPUDZk/uDjKdb1kN4rRIPhzKJXd2N4TwIVXC/gGVwy92jE26KcoWMlWSbBzjVNLfj1yGfnTRw==, - } + /@unocss/extractor-arbitrary-variants@0.57.7: + resolution: {integrity: sha512-JdyhPlsgS0x4zoF8WYXDcusPcpU4ysE6Rkkit4a9+xUZEvg7vy7InH6PQ8dL8B9oY7pbxF7G6eFguUDpv9xx4Q==} dependencies: - "@unocss/core": 0.54.2 + '@unocss/core': 0.57.7 dev: false - /@unocss/inspector@0.54.2: - resolution: - { - integrity: sha512-i2Ciuyolk836qFL7f4K+uDCaDfIlEYm5p5/nDu5wClZ1BxhUjQGSFMRqqE6slPFrZG2tW6QU76beMi4qk1EEBw==, - } + /@unocss/inspector@0.57.7: + resolution: {integrity: sha512-b9ckqn5aRsmhTdXJ5cPMKDKuNRe+825M+s9NbYcTjENnP6ellUFZo91sYF5S+LeATmU12TcwJZ83NChF4HpBSA==} dependencies: + '@unocss/core': 0.57.7 + '@unocss/rule-utils': 0.57.7 gzip-size: 6.0.0 sirv: 2.0.3 dev: false - /@unocss/postcss@0.54.2(postcss@8.4.27): - resolution: - { - integrity: sha512-SgCbdQzEfMYs9BwJxvkEx7i//KyHHqae/2BVtAUp0xRGWkcaOOsi28lpodhtZTGOtA486hrAcNnohQno9WCMYA==, - } - engines: { node: ">=14" } + /@unocss/postcss@0.57.7(postcss@8.4.32): + resolution: {integrity: sha512-13c9p5ecTvYa6inDky++8dlVuxQ0JuKaKW5A0NW3XuJ3Uz1t8Pguji+NAUddfTYEFF6GHu47L3Aac7vpI8pMcQ==} + engines: {node: '>=14'} peerDependencies: postcss: ^8.4.21 dependencies: - "@unocss/config": 0.54.2 - "@unocss/core": 0.54.2 + '@unocss/config': 0.57.7 + '@unocss/core': 0.57.7 + '@unocss/rule-utils': 0.57.7 css-tree: 2.3.1 - fast-glob: 3.3.1 - magic-string: 0.30.2 - postcss: 8.4.27 + fast-glob: 3.3.2 + magic-string: 0.30.5 + postcss: 8.4.32 dev: false - /@unocss/preset-attributify@0.54.2: - resolution: - { - integrity: sha512-mH1Qc+Omg6Fr6gMspZl9GfBq9bR/GeYnWy3qosL4b3wUmKuRFi7JONUuFA9pKaA+k5xZ85A+4ksDTf6kxjoguQ==, - } + /@unocss/preset-attributify@0.57.7: + resolution: {integrity: sha512-vUqfwUokNHt1FJXIuVyj2Xze9LfJdLAy62h79lNyyEISZmiDF4a4hWTKLBe0d6Kyfr33DyXMmkLp57t5YW0V3A==} dependencies: - "@unocss/core": 0.54.2 + '@unocss/core': 0.57.7 dev: false - /@unocss/preset-icons@0.54.2: - resolution: - { - integrity: sha512-wDHTSmpWT5WcCWyg85AZwW5ESyQfoDZuV+06eKB6VL8mdZXJFs/F0F32xiBrzDPHpQQaIqdXqOMSluMpP56+7A==, - } + /@unocss/preset-icons@0.57.7: + resolution: {integrity: sha512-s3AelKCS9CL1ArP1GanYv0XxxPrcFi+XOuQoQCwCRHDo2CiBEq3fLLMIhaUCFEWGtIy7o7wLeL5BRjMvJ2QnMg==} dependencies: - "@iconify/utils": 2.1.7 - "@unocss/core": 0.54.2 - ofetch: 1.1.1 + '@iconify/utils': 2.1.12 + '@unocss/core': 0.57.7 + ofetch: 1.3.3 transitivePeerDependencies: - supports-color dev: false - /@unocss/preset-mini@0.54.2: - resolution: - { - integrity: sha512-56eaoO0BLtoQFt6GbenH7WFahiCImn3nvTOCSGszKWDD6TWg8pHy6fUWdk3CRludqp2snqLmmibQZxXdoxi9+g==, - } + /@unocss/preset-mini@0.57.7: + resolution: {integrity: sha512-YPmmh+ZIg4J7/nPMfvzD1tOfUFD+8KEFXX9ISRteooflYeosn2YytGW66d/sq97AZos9N630FJ//DvPD2wfGwA==} dependencies: - "@unocss/core": 0.54.2 - "@unocss/extractor-arbitrary-variants": 0.54.2 + '@unocss/core': 0.57.7 + '@unocss/extractor-arbitrary-variants': 0.57.7 + '@unocss/rule-utils': 0.57.7 dev: false - /@unocss/preset-rem-to-px@0.54.2: - resolution: - { - integrity: sha512-OrCy6kXdyE/iKrd75x4UlBFAsSBXErSB6tHT4FLtUF6Xj3sjoDpzDNigXN0y6YyoxhoGqxNalHm+v0qZjNpghQ==, - } + /@unocss/preset-rem-to-px@0.57.7: + resolution: {integrity: sha512-oYUiOrcslracgc2UJEdSLWTrRwwHkXYYXMDqzGyiLQmtQRoovSCPYHspPfhYNMWBc7tRRIUzNlpOQKMB1C+x+Q==} dependencies: - "@unocss/core": 0.54.2 + '@unocss/core': 0.57.7 dev: false - /@unocss/preset-tagify@0.54.2: - resolution: - { - integrity: sha512-QdL4Z3TsrisbUFibyGxiWxjMdjgbm7FWBrtlDdxIZevrpPmkeOFm/cMNHNR8qh0FYjc/QTJ+x/Ey9YtLoEm/MQ==, - } + /@unocss/preset-tagify@0.57.7: + resolution: {integrity: sha512-va25pTJ5OtbqCHFBIj8myVk0PwuSucUqTx840r/YSHka0P9th6UGRS1LU30OUgjgr7FhLaWXtJMN4gkCUtQSoA==} dependencies: - "@unocss/core": 0.54.2 + '@unocss/core': 0.57.7 dev: false - /@unocss/preset-typography@0.54.2: - resolution: - { - integrity: sha512-JzsX/dOV1I5RGziMLRMx3vMLll9nqalKEpd0wVwf52uBQ+/zSN7Yxt3vVePF/e772gFldxnJCqfjVpB+w6crWw==, - } + /@unocss/preset-typography@0.57.7: + resolution: {integrity: sha512-1QuoLhqHVRs+baaVvfH54JxmJhVuBp5jdVw3HCN/vXs1CSnq2Rm/C/+PahcnQg/KLtoW6MgK5S+/hU9TCxGRVQ==} dependencies: - "@unocss/core": 0.54.2 - "@unocss/preset-mini": 0.54.2 + '@unocss/core': 0.57.7 + '@unocss/preset-mini': 0.57.7 dev: false - /@unocss/preset-uno@0.54.2: - resolution: - { - integrity: sha512-eL1ozNAIWft86+XZFC7JyUiREVp/Ld1iRDionCGINo06GUohyB9VB5WKP/JcPyvK0CuGmzTo6FLe92RNyUxeRg==, - } + /@unocss/preset-uno@0.57.7: + resolution: {integrity: sha512-yRKvRBaPLmDSUZet5WnV1WNb3BV4EFwvB1Zbvlc3lyVp6uCksP/SYlxuUwht7JefOrfiY2sGugoBxZTyGmj/kQ==} dependencies: - "@unocss/core": 0.54.2 - "@unocss/preset-mini": 0.54.2 - "@unocss/preset-wind": 0.54.2 + '@unocss/core': 0.57.7 + '@unocss/preset-mini': 0.57.7 + '@unocss/preset-wind': 0.57.7 + '@unocss/rule-utils': 0.57.7 dev: false - /@unocss/preset-web-fonts@0.54.2: - resolution: - { - integrity: sha512-VEF/o3ZGXRm4aYMvqiwl9E8dwwwqhRWIAIqUVyjtO7X6v/1QDT/t5ytO4JpESH5mEuL3CWukZ+PC9TRW+KtP2g==, - } + /@unocss/preset-web-fonts@0.57.7: + resolution: {integrity: sha512-wBPej5GeYb0D/xjMdMmpH6k/3Oe1ujx9DJys2/gtvl/rsBZpSkoWcnl+8Z3bAhooDnwL2gkJCIlpuDiRNtKvGA==} dependencies: - "@unocss/core": 0.54.2 - ofetch: 1.1.1 + '@unocss/core': 0.57.7 + ofetch: 1.3.3 dev: false - /@unocss/preset-wind@0.54.2: - resolution: - { - integrity: sha512-XuQzlqNGgLf3GcnRx3q/LidaUyPEFE4+Xsw0lsJQTlVWzmX+6qxkCONJ/SaNi9Mx+JjLFp3C3EuSi4L3v+GNPA==, - } + /@unocss/preset-wind@0.57.7: + resolution: {integrity: sha512-olQ6+w0fQ84eEC1t7SF4vJyKcyawkDWSRF5YufOqeQZL3zjqBzMQi+3PUlKCstrDO1DNZ3qdcwg1vPHRmuX9VA==} dependencies: - "@unocss/core": 0.54.2 - "@unocss/preset-mini": 0.54.2 + '@unocss/core': 0.57.7 + '@unocss/preset-mini': 0.57.7 + '@unocss/rule-utils': 0.57.7 dev: false - /@unocss/reset@0.54.2: - resolution: - { - integrity: sha512-awM74dNKWjl6p9mGqCGIzy3ivy8YJTX7OfQ4CywjyRjrhqZKTgEVV5W7lAr58cOCvariuskWtgfVcyM55uWM3Q==, - } + /@unocss/reset@0.57.7: + resolution: {integrity: sha512-oN9024WVrMewGbornnAPIpzHeKPIfVmZ5IsZGilWR761TnI5jTjHUkswsVoFx7tZdpCN2/bqS3JK/Ah0aot3NQ==} dev: false - /@unocss/scope@0.54.2: - resolution: - { - integrity: sha512-P5jTWGqyCVL5vtgulvwXm7EdoG78PLZhwwIO2pTDu7ODHxpVYE48G27EvTsjPN/Yr5WLcC4C7TXoWbv9bt3Khg==, - } + /@unocss/rule-utils@0.57.7: + resolution: {integrity: sha512-gLqbKTIetvRynLkhonu1znr+bmWnw+Cl3dFVNgZPGjiqGHd78PGS0gXQKvzuyN0iO2ADub1A7GlCWs826iEHjA==} + engines: {node: '>=14'} + dependencies: + '@unocss/core': 0.57.7 + magic-string: 0.30.5 + dev: false + + /@unocss/scope@0.57.7: + resolution: {integrity: sha512-pqWbKXcrTJ2ovVRTYFLnUX5ryEhdSXp7YfyBQT3zLtQb4nQ2XZcLTvGdWo7F+9jZ09yP7NdHscBLkeWgx+mVgw==} dev: false - /@unocss/transformer-attributify-jsx-babel@0.54.2: - resolution: - { - integrity: sha512-xRKK5iJccoAr3xif9zSvIgzTnYRoinZ4nt4C9MLByRINjOZXoA5FOzdXOThCq+NaYjJTp0k4Ux/R/SW2e6fvGA==, - } + /@unocss/transformer-attributify-jsx-babel@0.57.7: + resolution: {integrity: sha512-CqxTiT5ikOC6R/HNyBcCIVYUfeazqRbsw7X4hYKmGHO7QsnaKQFWZTpj+sSDRh3oHq+IDtcD6KB2anTEffEQNA==} dependencies: - "@unocss/core": 0.54.2 + '@babel/core': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.5) + '@unocss/core': 0.57.7 + transitivePeerDependencies: + - supports-color dev: false - /@unocss/transformer-attributify-jsx@0.54.2: - resolution: - { - integrity: sha512-FAnznmqgs9Y5rvch+It+cKtl9bVcCI04GR/uG78Z3IuNXldCUdqDsNHLFRxGcsfHHZfOt7VqFTZpJ7Xf+cUHcA==, - } + /@unocss/transformer-attributify-jsx@0.57.7: + resolution: {integrity: sha512-FpCJM+jDN4Kyp7mMMN41tTWEq6pHKAXAyJoW1GwhYw6lLu9cwyXnne6t7rQ11EPU95Z2cIEMpIJo8reDkDaiPg==} dependencies: - "@unocss/core": 0.54.2 + '@unocss/core': 0.57.7 dev: false - /@unocss/transformer-compile-class@0.54.2: - resolution: - { - integrity: sha512-MQgjnL8fUJsGlc63o4wwTie/bGX4bevwbrjGcgx/pOCT5h5jpy7NqKjn7kzAtQ94Fu/HveowyZjrXrft2zKivA==, - } + /@unocss/transformer-compile-class@0.57.7: + resolution: {integrity: sha512-D+PyD7IOXUm/lzzoCt/yon0Gh1fIK9iKeSBvB6/BREF/ejscNzQ/ia0Pq0pid2cVvOULCSo0z2sO9zljsQtv9A==} dependencies: - "@unocss/core": 0.54.2 + '@unocss/core': 0.57.7 dev: false - /@unocss/transformer-directives@0.54.2: - resolution: - { - integrity: sha512-PTMNjTddOrsLGpW/3tUuAG96B9rw5/GAHtz4EBHou/v+eWX0UUBWHF6YflzOqexxZmp5BQKO0jzkIs96Eiz8lA==, - } + /@unocss/transformer-directives@0.57.7: + resolution: {integrity: sha512-m0n7WqU3o+1Vyh1uaeU7H4u5gJqakkRqZqTq3MR3xLCSVfORJ/5XO8r+t6VUkJtaLxcIrtYE2geAbwmGV3zSKA==} dependencies: - "@unocss/core": 0.54.2 + '@unocss/core': 0.57.7 + '@unocss/rule-utils': 0.57.7 css-tree: 2.3.1 dev: false - /@unocss/transformer-variant-group@0.54.2: - resolution: - { - integrity: sha512-hOl3x63rTaGl6kdLMLZ31Hl7SASxxVNc2Z7IWpZDMZX0qbK/lK6TPvI/VJaXqznUtA8qvyDYBVx7XAEMnTOANw==, - } + /@unocss/transformer-variant-group@0.57.7: + resolution: {integrity: sha512-O5L5Za0IZtOWd2R66vy0k07pLlB9rCIybmUommUqKWpvd1n/pg8czQ5EkmNDprINvinKObVlGVuY4Uq/JsLM0A==} dependencies: - "@unocss/core": 0.54.2 + '@unocss/core': 0.57.7 dev: false - /@unocss/vite@0.54.2(rollup@2.79.1)(vite@4.4.9): - resolution: - { - integrity: sha512-TxK9au16W0SfQF/3I4aT8q8ZctHusVboDoS09EMKbJLhMPGuNTawUmTCmM6rtlNadWRNx4qPyK91dHFylnxApg==, - } + /@unocss/vite@0.57.7(rollup@2.79.1)(vite@5.0.4): + resolution: {integrity: sha512-SbJrRgfc35MmgMBlHaEK4YpJVD2B0bmxH9PVgHRuDae/hOEOG0VqNP0f2ijJtX9HG3jOpQVlbEoGnUo8jsZtsw==} peerDependencies: - vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 dependencies: - "@ampproject/remapping": 2.2.1 - "@rollup/pluginutils": 5.0.2(rollup@2.79.1) - "@unocss/config": 0.54.2 - "@unocss/core": 0.54.2 - "@unocss/inspector": 0.54.2 - "@unocss/scope": 0.54.2 - "@unocss/transformer-directives": 0.54.2 + '@ampproject/remapping': 2.2.1 + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + '@unocss/config': 0.57.7 + '@unocss/core': 0.57.7 + '@unocss/inspector': 0.57.7 + '@unocss/scope': 0.57.7 + '@unocss/transformer-directives': 0.57.7 chokidar: 3.5.3 - fast-glob: 3.3.1 - magic-string: 0.30.2 - vite: 4.4.9 + fast-glob: 3.3.2 + magic-string: 0.30.5 + vite: 5.0.4 transitivePeerDependencies: - rollup dev: false - /acorn-jsx@5.3.2(acorn@8.10.0): - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.11.2 dev: true - /acorn@8.10.0: - resolution: - { - integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==, - } - engines: { node: ">=0.4.0" } + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} hasBin: true /ajv@6.12.6: - resolution: - { - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, - } + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -2960,10 +2431,7 @@ packages: dev: true /ajv@8.12.0: - resolution: - { - integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==, - } + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -2972,395 +2440,283 @@ packages: dev: false /ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} dev: true /ansi-styles@3.2.1: - resolution: - { - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: false /ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 /anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 dev: false /argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true /aria-query@5.3.0: - resolution: - { - integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, - } + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: dequal: 2.0.3 dev: true /array-buffer-byte-length@1.0.0: - resolution: - { - integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==, - } + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 is-array-buffer: 3.0.2 - /array-includes@3.1.6: - resolution: - { - integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==, - } - engines: { node: ">= 0.4" } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-string: 1.0.7 dev: true /array-union@2.1.0: - resolution: - { - integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, - } - engines: { node: ">=8" } - dev: true - - /array.prototype.findlastindex@1.2.2: - resolution: - { - integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==, - } - engines: { node: ">= 0.4" } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 - dev: true - - /array.prototype.flat@1.3.1: - resolution: - { - integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==, - } - engines: { node: ">= 0.4" } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - dev: true - - /array.prototype.flatmap@1.3.1: - resolution: - { - integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==, - } - engines: { node: ">= 0.4" } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - dev: true - - /array.prototype.tosorted@1.1.1: - resolution: - { - integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==, - } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 - dev: true - - /arraybuffer.prototype.slice@1.0.1: - resolution: - { - integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 - define-properties: 1.2.0 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 - /ast-types-flow@0.0.7: - resolution: - { - integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==, - } + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true - /async@3.2.4: - resolution: - { - integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==, - } + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: false + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: true + /at-least-node@1.0.0: - resolution: - { - integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, - } - engines: { node: ">= 4.0.0" } + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} dev: false /available-typed-arrays@1.0.5: - resolution: - { - integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} - /axe-core@4.7.2: - resolution: - { - integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==, - } - engines: { node: ">=4" } + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} dev: true /axobject-query@3.2.1: - resolution: - { - integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==, - } + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: dequal: 2.0.3 dev: true - /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.22.10): - resolution: - { - integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==, - } + /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.5): + resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - "@babel/compat-data": 7.22.9 - "@babel/core": 7.22.10 - "@babel/helper-define-polyfill-provider": 0.4.2(@babel/core@7.22.10) + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.22.10): - resolution: - { - integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==, - } + /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.5): + resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-define-polyfill-provider": 0.4.2(@babel/core@7.22.10) - core-js-compat: 3.32.0 + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + core-js-compat: 3.33.3 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.22.10): - resolution: - { - integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==, - } + /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.5): + resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - "@babel/core": 7.22.10 - "@babel/helper-define-polyfill-provider": 0.4.2(@babel/core@7.22.10) + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) transitivePeerDependencies: - supports-color dev: false - /babel-plugin-transform-hook-names@1.0.2(@babel/core@7.22.10): - resolution: - { - integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==, - } + /babel-plugin-transform-hook-names@1.0.2(@babel/core@7.23.5): + resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==} peerDependencies: - "@babel/core": ^7.12.10 + '@babel/core': ^7.12.10 dependencies: - "@babel/core": 7.22.10 + '@babel/core': 7.23.5 dev: false /balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /big-integer@1.6.51: - resolution: - { - integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==, - } - engines: { node: ">=0.6" } + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} dev: true /binary-extensions@2.2.0: - resolution: - { - integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} dev: false /bplist-parser@0.2.0: - resolution: - { - integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==, - } - engines: { node: ">= 5.10.0" } + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} dependencies: - big-integer: 1.6.51 + big-integer: 1.6.52 dev: true /brace-expansion@1.1.11: - resolution: - { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, - } + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 /brace-expansion@2.0.1: - resolution: - { - integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, - } + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: false /braces@3.0.2: - resolution: - { - integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /browserslist@4.21.10: - resolution: - { - integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==, - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001519 - electron-to-chromium: 1.4.488 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.10) + caniuse-lite: 1.0.30001565 + electron-to-chromium: 1.4.601 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.1) dev: false /buffer-from@1.1.2: - resolution: - { - integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, - } + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false /builtin-modules@3.3.0: - resolution: - { - integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} dev: false /bundle-name@3.0.0: - resolution: - { - integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} dependencies: run-applescript: 5.0.0 dev: true /cac@6.7.14: - resolution: - { - integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} dev: false - /call-bind@1.0.2: - resolution: - { - integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, - } + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 /callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} dev: true - /caniuse-lite@1.0.30001519: - resolution: - { - integrity: sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==, - } + /caniuse-lite@1.0.30001565: + resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} dev: false /chalk@2.4.2: - resolution: - { - integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 @@ -3368,21 +2724,15 @@ packages: dev: false /chalk@4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 /chokidar@3.5.3: - resolution: - { - integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, - } - engines: { node: ">= 8.10.0" } + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -3392,15 +2742,12 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: false /cliui@8.0.1: - resolution: - { - integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 @@ -3408,213 +2755,135 @@ packages: dev: true /clsx@2.0.0: - resolution: - { - integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} dev: false /color-convert@1.9.3: - resolution: - { - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, - } + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: false /color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: ">=7.0.0" } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 /color-name@1.1.3: - resolution: - { - integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, - } + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: false /color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} /colorette@2.0.20: - resolution: - { - integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, - } + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: false /commander@2.20.3: - resolution: - { - integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, - } + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false /common-tags@1.8.2: - resolution: - { - integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==, - } - engines: { node: ">=4.0.0" } + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} dev: false /concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, - } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} /confusing-browser-globals@1.0.11: - resolution: - { - integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==, - } + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} dev: true /consola@3.2.3: - resolution: - { - integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==, - } - engines: { node: ^14.18.0 || >=16.10.0 } + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} dev: false - /convert-source-map@1.9.0: - resolution: - { - integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, - } + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: false - /core-js-compat@3.32.0: - resolution: - { - integrity: sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==, - } + /core-js-compat@3.33.3: + resolution: {integrity: sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==} dependencies: - browserslist: 4.21.10 + browserslist: 4.22.1 dev: false /create-react-class@15.7.0: - resolution: - { - integrity: sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==, - } + resolution: {integrity: sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 dev: false /cross-spawn@7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 /crypto-random-string@2.0.0: - resolution: - { - integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} dev: false /css-tree@2.3.1: - resolution: - { - integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==, - } - engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 } + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} dependencies: mdn-data: 2.0.30 source-map-js: 1.0.2 dev: false /csstype@3.1.2: - resolution: - { - integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==, - } + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} dev: false /d3-array@2.12.1: - resolution: - { - integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==, - } + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} dependencies: internmap: 1.0.1 dev: false /d3-cloud@1.2.7: - resolution: - { - integrity: sha512-8TrgcgwRIpoZYQp7s3fGB7tATWfhckRb8KcVd1bOgqkNdkJRDGWfdSf4HkHHzZxSczwQJdSxvfPudwir5IAJ3w==, - } + resolution: {integrity: sha512-8TrgcgwRIpoZYQp7s3fGB7tATWfhckRb8KcVd1bOgqkNdkJRDGWfdSf4HkHHzZxSczwQJdSxvfPudwir5IAJ3w==} dependencies: d3-dispatch: 1.0.6 dev: false /d3-color@2.0.0: - resolution: - { - integrity: sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==, - } + resolution: {integrity: sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==} dev: false /d3-dispatch@1.0.6: - resolution: - { - integrity: sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==, - } + resolution: {integrity: sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==} dev: false /d3-format@2.0.0: - resolution: - { - integrity: sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==, - } + resolution: {integrity: sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==} dev: false /d3-interpolate@2.0.1: - resolution: - { - integrity: sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==, - } + resolution: {integrity: sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==} dependencies: d3-color: 2.0.0 dev: false /d3-scale-chromatic@2.0.0: - resolution: - { - integrity: sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==, - } + resolution: {integrity: sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==} dependencies: d3-color: 2.0.0 d3-interpolate: 2.0.1 dev: false /d3-scale@3.3.0: - resolution: - { - integrity: sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==, - } + resolution: {integrity: sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==} dependencies: d3-array: 2.12.1 d3-format: 2.0.0 @@ -3624,51 +2893,33 @@ packages: dev: false /d3-selection@2.0.0: - resolution: - { - integrity: sha512-XoGGqhLUN/W14NmaqcO/bb1nqjDAw5WtSYb2X8wiuQWvSZUsUVYsOSkOybUrNvcBjaywBdYPy03eXHMXjk9nZA==, - } + resolution: {integrity: sha512-XoGGqhLUN/W14NmaqcO/bb1nqjDAw5WtSYb2X8wiuQWvSZUsUVYsOSkOybUrNvcBjaywBdYPy03eXHMXjk9nZA==} dev: false /d3-time-format@3.0.0: - resolution: - { - integrity: sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==, - } + resolution: {integrity: sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==} dependencies: d3-time: 2.1.1 dev: false /d3-time@2.1.1: - resolution: - { - integrity: sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==, - } + resolution: {integrity: sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==} dependencies: d3-array: 2.12.1 dev: false /damerau-levenshtein@1.0.8: - resolution: - { - integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, - } + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true - /dayjs@1.11.9: - resolution: - { - integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==, - } + /dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} dev: false /debug@3.2.7: - resolution: - { - integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, - } + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true @@ -3677,13 +2928,10 @@ packages: dev: true /debug@4.3.4: - resolution: - { - integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true @@ -3691,37 +2939,25 @@ packages: ms: 2.1.2 /deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true /deepmerge@4.3.1: - resolution: - { - integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} dev: false /default-browser-id@3.0.0: - resolution: - { - integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} dependencies: bplist-parser: 0.2.0 untildify: 4.0.0 dev: true /default-browser@4.0.0: - resolution: - { - integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} dependencies: bundle-name: 3.0.0 default-browser-id: 3.0.0 @@ -3729,155 +2965,116 @@ packages: titleize: 3.0.0 dev: true + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + /define-lazy-prop@2.0.0: - resolution: - { - integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} dev: true /define-lazy-prop@3.0.0: - resolution: - { - integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} dev: true - /define-properties@1.2.0: - resolution: - { - integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==, - } - engines: { node: ">= 0.4" } + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} dependencies: - has-property-descriptors: 1.0.0 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 - /defu@6.1.2: - resolution: - { - integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==, - } + /defu@6.1.3: + resolution: {integrity: sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==} /dequal@2.0.3: - resolution: - { - integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} dev: true - /destr@2.0.1: - resolution: - { - integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==, - } + /destr@2.0.2: + resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==} dev: false /dir-glob@3.0.1: - resolution: - { - integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true /doctrine@2.1.0: - resolution: - { - integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 dev: true /doctrine@3.0.0: - resolution: - { - integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true /duplexer@0.1.2: - resolution: - { - integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, - } + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: false /echarts@5.4.3: - resolution: - { - integrity: sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==, - } + resolution: {integrity: sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==} dependencies: tslib: 2.3.0 zrender: 5.4.4 dev: false /ejs@3.1.9: - resolution: - { - integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} hasBin: true dependencies: jake: 10.8.7 dev: false - /electron-to-chromium@1.4.488: - resolution: - { - integrity: sha512-Dv4sTjiW7t/UWGL+H8ZkgIjtUAVZDgb/PwGWvMsCT7jipzUV/u5skbLXPFKb6iV0tiddVi/bcS2/kUrczeWgIQ==, - } + /electron-to-chromium@1.4.601: + resolution: {integrity: sha512-SpwUMDWe9tQu8JX5QCO1+p/hChAi9AE9UpoC3rcHVc+gdCGlbT3SGb5I1klgb952HRIyvt9wZhSz9bNBYz9swA==} dev: false /emoji-regex@8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, - } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true /emoji-regex@9.2.2: - resolution: - { - integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, - } + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /es-abstract@1.22.1: - resolution: - { - integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==, - } - engines: { node: ">= 0.4" } + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.1 + arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.5 + hasown: 2.0.0 + internal-slot: 1.0.6 is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -3886,151 +3083,140 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.0 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 typed-array-buffer: 1.0.0 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 + + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: true - /es-set-tostringtag@2.0.1: - resolution: - { - integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==, - } - engines: { node: ">= 0.4" } + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 + get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 + hasown: 2.0.0 - /es-shim-unscopables@1.0.0: - resolution: - { - integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==, - } + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - has: 1.0.3 + hasown: 2.0.0 dev: true /es-to-primitive@1.2.1: - resolution: - { - integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - /esbuild@0.18.20: - resolution: - { - integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==, - } - engines: { node: ">=12" } + /esbuild@0.19.8: + resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==} + engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - "@esbuild/android-arm": 0.18.20 - "@esbuild/android-arm64": 0.18.20 - "@esbuild/android-x64": 0.18.20 - "@esbuild/darwin-arm64": 0.18.20 - "@esbuild/darwin-x64": 0.18.20 - "@esbuild/freebsd-arm64": 0.18.20 - "@esbuild/freebsd-x64": 0.18.20 - "@esbuild/linux-arm": 0.18.20 - "@esbuild/linux-arm64": 0.18.20 - "@esbuild/linux-ia32": 0.18.20 - "@esbuild/linux-loong64": 0.18.20 - "@esbuild/linux-mips64el": 0.18.20 - "@esbuild/linux-ppc64": 0.18.20 - "@esbuild/linux-riscv64": 0.18.20 - "@esbuild/linux-s390x": 0.18.20 - "@esbuild/linux-x64": 0.18.20 - "@esbuild/netbsd-x64": 0.18.20 - "@esbuild/openbsd-x64": 0.18.20 - "@esbuild/sunos-x64": 0.18.20 - "@esbuild/win32-arm64": 0.18.20 - "@esbuild/win32-ia32": 0.18.20 - "@esbuild/win32-x64": 0.18.20 + '@esbuild/android-arm': 0.19.8 + '@esbuild/android-arm64': 0.19.8 + '@esbuild/android-x64': 0.19.8 + '@esbuild/darwin-arm64': 0.19.8 + '@esbuild/darwin-x64': 0.19.8 + '@esbuild/freebsd-arm64': 0.19.8 + '@esbuild/freebsd-x64': 0.19.8 + '@esbuild/linux-arm': 0.19.8 + '@esbuild/linux-arm64': 0.19.8 + '@esbuild/linux-ia32': 0.19.8 + '@esbuild/linux-loong64': 0.19.8 + '@esbuild/linux-mips64el': 0.19.8 + '@esbuild/linux-ppc64': 0.19.8 + '@esbuild/linux-riscv64': 0.19.8 + '@esbuild/linux-s390x': 0.19.8 + '@esbuild/linux-x64': 0.19.8 + '@esbuild/netbsd-x64': 0.19.8 + '@esbuild/openbsd-x64': 0.19.8 + '@esbuild/sunos-x64': 0.19.8 + '@esbuild/win32-arm64': 0.19.8 + '@esbuild/win32-ia32': 0.19.8 + '@esbuild/win32-x64': 0.19.8 dev: false /escalade@3.1.1: - resolution: - { - integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} /escape-string-regexp@1.0.5: - resolution: - { - integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} dev: false /escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} dev: true - /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.28.0)(eslint@8.46.0): - resolution: - { - integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.0)(eslint@8.55.0): + resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} + engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: ^7.32.0 || ^8.2.0 eslint-plugin-import: ^2.25.2 dependencies: confusing-browser-globals: 1.0.11 - eslint: 8.46.0 - eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0) - object.assign: 4.1.4 - object.entries: 1.1.6 + eslint: 8.55.0 + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.55.0) + object.assign: 4.1.5 + object.entries: 1.1.7 semver: 6.3.1 dev: true - /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@6.3.0)(@typescript-eslint/parser@6.3.0)(eslint-plugin-import@2.28.0)(eslint@8.46.0): - resolution: - { - integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==, - } + /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@6.13.1)(@typescript-eslint/parser@6.13.1)(eslint-plugin-import@2.29.0)(eslint@8.55.0): + resolution: {integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==} peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.13.0 || ^6.0.0 - "@typescript-eslint/parser": ^5.0.0 || ^6.0.0 + '@typescript-eslint/eslint-plugin': ^5.13.0 || ^6.0.0 + '@typescript-eslint/parser': ^5.0.0 || ^6.0.0 eslint: ^7.32.0 || ^8.2.0 eslint-plugin-import: ^2.25.3 dependencies: - "@typescript-eslint/eslint-plugin": 6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0)(typescript@5.1.6) - "@typescript-eslint/parser": 6.3.0(eslint@8.46.0)(typescript@5.1.6) - eslint: 8.46.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.28.0)(eslint@8.46.0) - eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0) + '@typescript-eslint/eslint-plugin': 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.13.1(eslint@8.55.0)(typescript@5.3.2) + eslint: 8.55.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.55.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.55.0) dev: true - /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.28.0)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.1)(eslint@8.46.0): - resolution: - { - integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==, - } - engines: { node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0 } + /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.0)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.55.0): + resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} + engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.32.0 || ^8.2.0 eslint-plugin-import: ^2.25.3 @@ -4038,55 +3224,46 @@ packages: eslint-plugin-react: ^7.28.0 eslint-plugin-react-hooks: ^4.3.0 dependencies: - eslint: 8.46.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.28.0)(eslint@8.46.0) - eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.46.0) - eslint-plugin-react: 7.33.1(eslint@8.46.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.46.0) - object.assign: 4.1.4 - object.entries: 1.1.6 - dev: true - - /eslint-config-prettier@9.0.0(eslint@8.46.0): - resolution: - { - integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==, - } + eslint: 8.55.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.55.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.55.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.55.0) + eslint-plugin-react: 7.33.2(eslint@8.55.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.55.0) + object.assign: 4.1.5 + object.entries: 1.1.7 + dev: true + + /eslint-config-prettier@9.1.0(eslint@8.55.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: - eslint: ">=7.0.0" + eslint: '>=7.0.0' dependencies: - eslint: 8.46.0 + eslint: 8.55.0 dev: true /eslint-import-resolver-node@0.3.9: - resolution: - { - integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==, - } + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.0 - resolve: 1.22.4 + is-core-module: 2.13.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.3.0)(eslint-import-resolver-node@0.3.9)(eslint@8.46.0): - resolution: - { - integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==, - } - engines: { node: ">=4" } + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} peerDependencies: - "@typescript-eslint/parser": "*" - eslint: "*" - eslint-import-resolver-node: "*" - eslint-import-resolver-typescript: "*" - eslint-import-resolver-webpack: "*" + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true eslint: optional: true @@ -4097,45 +3274,41 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - "@typescript-eslint/parser": 6.3.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.13.1(eslint@8.55.0)(typescript@5.3.2) debug: 3.2.7 - eslint: 8.46.0 + eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0): - resolution: - { - integrity: sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==, - } - engines: { node: ">=4" } + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.55.0): + resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + engines: {node: '>=4'} peerDependencies: - "@typescript-eslint/parser": "*" + '@typescript-eslint/parser': '*' eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true dependencies: - "@typescript-eslint/parser": 6.3.0(eslint@8.46.0)(typescript@5.1.6) - array-includes: 3.1.6 - array.prototype.findlastindex: 1.2.2 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 + '@typescript-eslint/parser': 6.13.1(eslint@8.55.0)(typescript@5.3.2) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.46.0 + eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.3.0)(eslint-import-resolver-node@0.3.9)(eslint@8.46.0) - has: 1.0.3 - is-core-module: 2.13.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + hasown: 2.0.0 + is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.6 - object.groupby: 1.0.0 - object.values: 1.1.6 - resolve: 1.22.4 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 semver: 6.3.1 tsconfig-paths: 3.14.2 transitivePeerDependencies: @@ -4144,142 +3317,112 @@ packages: - supports-color dev: true - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.46.0): - resolution: - { - integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==, - } - engines: { node: ">=4.0" } + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.55.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - "@babel/runtime": 7.22.10 + '@babel/runtime': 7.23.5 aria-query: 5.3.0 - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - ast-types-flow: 0.0.7 - axe-core: 4.7.2 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.46.0 - has: 1.0.3 + es-iterator-helpers: 1.0.15 + eslint: 8.55.0 + hasown: 2.0.0 jsx-ast-utils: 3.3.5 - language-tags: 1.0.5 + language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - semver: 6.3.1 + object.entries: 1.1.7 + object.fromentries: 2.0.7 dev: true - /eslint-plugin-prettier@5.0.0(eslint-config-prettier@9.0.0)(eslint@8.46.0)(prettier@3.0.1): - resolution: - { - integrity: sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.0): + resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - "@types/eslint": ">=8.0.0" - eslint: ">=8.0.0" - eslint-config-prettier: "*" - prettier: ">=3.0.0" + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' peerDependenciesMeta: - "@types/eslint": + '@types/eslint': optional: true eslint-config-prettier: optional: true dependencies: - eslint: 8.46.0 - eslint-config-prettier: 9.0.0(eslint@8.46.0) - prettier: 3.0.1 + eslint: 8.55.0 + eslint-config-prettier: 9.1.0(eslint@8.55.0) + prettier: 3.1.0 prettier-linter-helpers: 1.0.0 - synckit: 0.8.5 + synckit: 0.8.6 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.46.0): - resolution: - { - integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==, - } - engines: { node: ">=10" } + /eslint-plugin-react-hooks@4.6.0(eslint@8.55.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.46.0 + eslint: 8.55.0 dev: true - /eslint-plugin-react@7.33.1(eslint@8.46.0): - resolution: - { - integrity: sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==, - } - engines: { node: ">=4" } + /eslint-plugin-react@7.33.2(eslint@8.55.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - array.prototype.tosorted: 1.1.1 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 doctrine: 2.1.0 - eslint: 8.46.0 + es-iterator-helpers: 1.0.15 + eslint: 8.55.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - object.hasown: 1.1.2 - object.values: 1.1.6 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 prop-types: 15.8.1 - resolve: 2.0.0-next.4 + resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.8 - dev: true - - /eslint-scope@5.1.1: - resolution: - { - integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, - } - engines: { node: ">=8.0.0" } - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 + string.prototype.matchall: 4.0.10 dev: true /eslint-scope@7.2.2: - resolution: - { - integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true - /eslint-visitor-keys@3.4.2: - resolution: - { - integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + /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} dev: true - /eslint@8.46.0: - resolution: - { - integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + /eslint@8.55.0: + resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.46.0) - "@eslint-community/regexpp": 4.6.2 - "@eslint/eslintrc": 2.1.1 - "@eslint/js": 8.46.0 - "@humanwhocodes/config-array": 0.11.10 - "@humanwhocodes/module-importer": 1.0.1 - "@nodelib/fs.walk": 1.2.8 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.55.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -4287,7 +3430,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.2 + eslint-visitor-keys: 3.4.3 espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 @@ -4295,9 +3438,9 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.20.0 + globals: 13.23.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -4315,80 +3458,48 @@ packages: dev: true /espree@9.6.1: - resolution: - { - integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.2 + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 dev: true /esquery@1.5.0: - resolution: - { - integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true /esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estraverse@4.3.0: - resolution: - { - integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, - } - engines: { node: ">=4.0" } - dev: true - /estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} dev: true /estree-walker@1.0.1: - resolution: - { - integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==, - } + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} dev: false /estree-walker@2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, - } + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: false /esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} /execa@5.1.1: - resolution: - { - integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -4401,11 +3512,8 @@ packages: strip-final-newline: 2.0.0 /execa@7.2.0: - resolution: - { - integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==, - } - engines: { node: ^14.18.0 || ^16.14.0 || >=18.0.0 } + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -4419,256 +3527,170 @@ packages: dev: true /fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} /fast-diff@1.3.0: - resolution: - { - integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, - } + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true - /fast-glob@3.3.1: - resolution: - { - integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, - } - engines: { node: ">=8.6.0" } + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} dependencies: - "@nodelib/fs.stat": 2.0.5 - "@nodelib/fs.walk": 1.2.8 + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 /fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} /fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true /fastq@1.15.0: - resolution: - { - integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, - } + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 /file-entry-cache@6.0.1: - resolution: - { - integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.0.4 + flat-cache: 3.2.0 dev: true /filelist@1.0.4: - resolution: - { - integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==, - } + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.6 dev: false /fill-range@7.0.1: - resolution: - { - integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 /find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - /flat-cache@3.0.4: - resolution: - { - integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.7 + flatted: 3.2.9 + keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flatted@3.2.7: - resolution: - { - integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==, - } + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /for-each@0.3.3: - resolution: - { - integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, - } + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 /fs-extra@10.1.0: - resolution: - { - integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: false /fs-extra@9.1.0: - resolution: - { - integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: false /fs.realpath@1.0.0: - resolution: - { - integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, - } - - /fsevents@2.3.2: - resolution: - { - integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true optional: true - /function-bind@1.1.1: - resolution: - { - integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, - } - - /function.prototype.name@1.1.5: - resolution: - { - integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==, - } - engines: { node: ">= 0.4" } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 functions-have-names: 1.2.3 /functions-have-names@1.2.3: - resolution: - { - integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, - } + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} /gensync@1.0.0-beta.2: - resolution: - { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} dev: false /get-caller-file@2.0.5: - resolution: - { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, - } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic@1.2.1: - resolution: - { - integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==, - } + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: - function-bind: 1.1.1 - has: 1.0.3 + function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 + hasown: 2.0.0 /get-own-enumerable-property-symbols@3.0.2: - resolution: - { - integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==, - } + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} dev: false /get-stream@6.0.1: - resolution: - { - integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} /get-symbol-description@1.0.0: - resolution: - { - integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 /glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 /glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true /glob@7.2.3: - resolution: - { - integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, - } + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4678,52 +3700,37 @@ packages: path-is-absolute: 1.0.1 /globals@11.12.0: - resolution: - { - integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} dev: false - /globals@13.20.0: - resolution: - { - integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==, - } - engines: { node: ">=8" } + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true /globalthis@1.0.3: - resolution: - { - integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} dependencies: - define-properties: 1.2.0 + define-properties: 1.2.1 /globby@11.1.0: - resolution: - { - integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 + fast-glob: 3.3.2 + ignore: 5.3.0 merge2: 1.4.1 slash: 3.0.0 dev: true /goober@2.1.13(csstype@3.1.2): - resolution: - { - integrity: sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ==, - } + resolution: {integrity: sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ==} peerDependencies: csstype: ^3.0.10 dependencies: @@ -4731,1032 +3738,722 @@ packages: dev: false /gopd@1.0.1: - resolution: - { - integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, - } + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 /graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, - } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: false /graphemer@1.4.0: - resolution: - { - integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, - } + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true /gzip-size@6.0.0: - resolution: - { - integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} dependencies: duplexer: 0.1.2 dev: false /has-bigints@1.0.2: - resolution: - { - integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, - } + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} /has-flag@3.0.0: - resolution: - { - integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} dev: false /has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} - /has-property-descriptors@1.0.0: - resolution: - { - integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==, - } + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 /has-proto@1.0.1: - resolution: - { - integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} /has-symbols@1.0.3: - resolution: - { - integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} /has-tostringtag@1.0.0: - resolution: - { - integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - /has@1.0.3: - resolution: - { - integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, - } - engines: { node: ">= 0.4.0" } + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 /hoist-non-react-statics@3.3.2: - resolution: - { - integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==, - } + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 dev: false /human-signals@2.1.0: - resolution: - { - integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, - } - engines: { node: ">=10.17.0" } + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} /human-signals@4.3.1: - resolution: - { - integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==, - } - engines: { node: ">=14.18.0" } + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} dev: true /idb@7.1.1: - resolution: - { - integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==, - } + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} dev: false - /ignore@5.2.4: - resolution: - { - integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, - } - engines: { node: ">= 4" } + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} dev: true /import-fresh@3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 dev: true /imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, - } - engines: { node: ">=0.8.19" } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} dev: true /inflight@1.0.6: - resolution: - { - integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, - } + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 /inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, - } - - /internal-slot@1.0.5: - resolution: - { - integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==, - } - engines: { node: ">= 0.4" } - dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 side-channel: 1.0.4 /internmap@1.0.1: - resolution: - { - integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==, - } + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} dev: false /is-array-buffer@3.0.2: - resolution: - { - integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==, - } + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-typed-array: 1.1.12 + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-bigint@1.0.4: - resolution: - { - integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, - } + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 /is-binary-path@2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: false /is-boolean-object@1.1.2: - resolution: - { - integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 /is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} - /is-core-module@2.13.0: - resolution: - { - integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, - } + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - has: 1.0.3 + hasown: 2.0.0 /is-date-object@1.0.5: - resolution: - { - integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-docker@2.2.1: - resolution: - { - integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} hasBin: true dev: true /is-docker@3.0.0: - resolution: - { - integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true dev: true /is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.5 + dev: true /is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 dev: true /is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 /is-inside-container@1.0.0: - resolution: - { - integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} hasBin: true dependencies: is-docker: 3.0.0 dev: true + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + /is-module@1.0.0: - resolution: - { - integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==, - } + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: false /is-negative-zero@2.0.2: - resolution: - { - integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} /is-number-object@1.0.7: - resolution: - { - integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, - } - engines: { node: ">=0.12.0" } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} /is-obj@1.0.1: - resolution: - { - integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} dev: false /is-path-inside@3.0.3: - resolution: - { - integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} dev: true /is-regex@1.1.4: - resolution: - { - integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 /is-regexp@1.0.0: - resolution: - { - integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} dev: false + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + /is-shared-array-buffer@1.0.2: - resolution: - { - integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, - } + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 /is-stream@2.0.1: - resolution: - { - integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} /is-stream@3.0.0: - resolution: - { - integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true /is-string@1.0.7: - resolution: - { - integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-symbol@1.0.4: - resolution: - { - integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 /is-typed-array@1.1.12: - resolution: - { - integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true /is-weakref@1.0.2: - resolution: - { - integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, - } + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true /is-wsl@2.2.0: - resolution: - { - integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} dependencies: is-docker: 2.2.1 dev: true /isarray@2.0.5: - resolution: - { - integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, - } + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} /isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: true /jake@10.8.7: - resolution: - { - integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} hasBin: true dependencies: - async: 3.2.4 + async: 3.2.5 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 dev: false /jest-worker@26.6.2: - resolution: - { - integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} dependencies: - "@types/node": 20.4.9 + '@types/node': 20.10.2 merge-stream: 2.0.0 supports-color: 7.2.0 dev: false - /jiti@1.19.1: - resolution: - { - integrity: sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==, - } + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true /js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} /js-yaml@4.1.0: - resolution: - { - integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, - } + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true /jsesc@0.5.0: - resolution: - { - integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==, - } + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true dev: false /jsesc@2.5.2: - resolution: - { - integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} hasBin: true dev: false + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + /json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true /json-schema-traverse@1.0.0: - resolution: - { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, - } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: false /json-schema@0.4.0: - resolution: - { - integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, - } + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} dev: false /json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true /json5@1.0.2: - resolution: - { - integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, - } + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true dependencies: minimist: 1.2.8 dev: true /json5@2.2.3: - resolution: - { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true dev: false /jsonc-parser@3.2.0: - resolution: - { - integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, - } + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} /jsonfile@6.1.0: - resolution: - { - integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, - } + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 dev: false /jsonpointer@5.0.1: - resolution: - { - integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} dev: false /jsx-ast-utils@3.3.5: - resolution: - { - integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - object.assign: 4.1.4 - object.values: 1.1.6 + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.1.7 + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 dev: true /kolorist@1.8.0: - resolution: - { - integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==, - } + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} dev: false /language-subtag-registry@0.3.22: - resolution: - { - integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==, - } + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: true - /language-tags@1.0.5: - resolution: - { - integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==, - } + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} dependencies: language-subtag-registry: 0.3.22 dev: true /leven@3.1.0: - resolution: - { - integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} dev: false /levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 dev: true /local-pkg@0.4.3: - resolution: - { - integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} dev: false /locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 /lodash.debounce@4.0.8: - resolution: - { - integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, - } + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: false /lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, - } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true /lodash.sortby@4.7.0: - resolution: - { - integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, - } + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: false /lodash@4.17.21: - resolution: - { - integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, - } + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: false /loose-envify@1.4.0: - resolution: - { - integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, - } + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true dependencies: js-tokens: 4.0.0 /lru-cache@5.1.1: - resolution: - { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, - } + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 dev: false /lru-cache@6.0.0: - resolution: - { - integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true /magic-string@0.25.9: - resolution: - { - integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, - } + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: sourcemap-codec: 1.4.8 dev: false - /magic-string@0.30.2: - resolution: - { - integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==, - } - engines: { node: ">=12" } + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} dependencies: - "@jridgewell/sourcemap-codec": 1.4.15 + '@jridgewell/sourcemap-codec': 1.4.15 /mdn-data@2.0.30: - resolution: - { - integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==, - } + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: false /merge-stream@2.0.0: - resolution: - { - integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, - } + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} /merge2@1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} /micromatch@4.0.5: - resolution: - { - integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 /mimic-fn@2.1.0: - resolution: - { - integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} /mimic-fn@4.0.0: - resolution: - { - integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} dev: true /minimatch@3.1.2: - resolution: - { - integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, - } + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 /minimatch@5.1.6: - resolution: - { - integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: false /minimist@1.2.8: - resolution: - { - integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, - } + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /mlly@1.4.0: - resolution: - { - integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==, - } + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: - acorn: 8.10.0 + acorn: 8.11.2 pathe: 1.1.1 pkg-types: 1.0.3 - ufo: 1.2.0 + ufo: 1.3.2 /mrmime@1.0.1: - resolution: - { - integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} dev: false /ms@2.1.2: - resolution: - { - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, - } + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} /ms@2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, - } - dev: true - - /nanoid@3.3.6: - resolution: - { - integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: false - /natural-compare-lite@1.4.0: - resolution: - { - integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==, - } - dev: true - /natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /node-fetch-native@1.2.0: - resolution: - { - integrity: sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==, - } + /node-fetch-native@1.4.1: + resolution: {integrity: sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==} dev: false - /node-releases@2.0.13: - resolution: - { - integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, - } + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: false /normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} dev: false /npm-run-path@4.0.1: - resolution: - { - integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: path-key: 3.1.1 /npm-run-path@5.1.0: - resolution: - { - integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 dev: true /object-assign@4.1.1: - resolution: - { - integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, - } - engines: { node: ">=0.10.0" } - - /object-inspect@1.12.3: - resolution: - { - integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, - } + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} /object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, - } - engines: { node: ">= 0.4" } - - /object.assign@4.1.4: - resolution: - { - integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==, - } - engines: { node: ">= 0.4" } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - /object.entries@1.1.6: - resolution: - { - integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==, - } - engines: { node: ">= 0.4" } + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /object.fromentries@2.0.6: - resolution: - { - integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==, - } - engines: { node: ">= 0.4" } + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /object.groupby@1.0.0: - resolution: - { - integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==, - } + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 dev: true - /object.hasown@1.1.2: - resolution: - { - integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==, - } + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /object.values@1.1.6: - resolution: - { - integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==, - } - engines: { node: ">= 0.4" } + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /ofetch@1.1.1: - resolution: - { - integrity: sha512-SSMoktrp9SNLi20BWfB/BnnKcL0RDigXThD/mZBeQxkIRv1xrd9183MtLdsqRYLYSqW0eTr5t8w8MqjNhvoOQQ==, - } + /ofetch@1.3.3: + resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==} dependencies: - destr: 2.0.1 - node-fetch-native: 1.2.0 - ufo: 1.2.0 + destr: 2.0.2 + node-fetch-native: 1.4.1 + ufo: 1.3.2 dev: false /once@1.4.0: - resolution: - { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, - } + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 /onetime@5.1.2: - resolution: - { - integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 /onetime@6.0.0: - resolution: - { - integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 dev: true /open@8.4.2: - resolution: - { - integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 @@ -5764,11 +4461,8 @@ packages: dev: true /open@9.1.0: - resolution: - { - integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} dependencies: default-browser: 4.0.0 define-lazy-prop: 3.0.0 @@ -5777,13 +4471,10 @@ packages: dev: true /optionator@0.9.3: - resolution: - { - integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} dependencies: - "@aashutoshrathi/word-wrap": 1.2.6 + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 @@ -5792,226 +4483,142 @@ packages: dev: true /p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 /p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 /parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true /path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} /path-is-absolute@1.0.1: - resolution: - { - integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} /path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} /path-key@4.0.0: - resolution: - { - integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} dev: true /path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} /path-type@4.0.0: - resolution: - { - integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} dev: true /pathe@1.1.1: - resolution: - { - integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==, - } + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} /perfect-debounce@1.0.0: - resolution: - { - integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==, - } + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} dev: false /picocolors@1.0.0: - resolution: - { - integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, - } + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} /picomatch@2.3.1: - resolution: - { - integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} /pkg-types@1.0.3: - resolution: - { - integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==, - } + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.4.0 + mlly: 1.4.2 pathe: 1.1.1 - /postcss@8.4.27: - resolution: - { - integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==, - } - engines: { node: ^10 || ^12 || >=14 } + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.6 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 dev: false - /preact@10.16.0: - resolution: - { - integrity: sha512-XTSj3dJ4roKIC93pald6rWuB2qQJO9gO2iLLyTe87MrjQN+HklueLsmskbywEWqCHlclgz3/M4YLL2iBr9UmMA==, - } + /preact@10.19.2: + resolution: {integrity: sha512-UA9DX/OJwv6YwP9Vn7Ti/vF80XL+YA5H2l7BpCtUr3ya8LWHFzpiO5R+N7dN16ujpIxhekRFuOOF82bXX7K/lg==} dev: false /prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} dev: true /prettier-linter-helpers@1.0.0: - resolution: - { - integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} dependencies: fast-diff: 1.3.0 dev: true - /prettier@3.0.1: - resolution: - { - integrity: sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==, - } - engines: { node: ">=14" } + /prettier@3.1.0: + resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + engines: {node: '>=14'} hasBin: true dev: true /pretty-bytes@5.6.0: - resolution: - { - integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} dev: false /pretty-bytes@6.1.1: - resolution: - { - integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==, - } - engines: { node: ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} dev: false /prop-types@15.8.1: - resolution: - { - integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, - } + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - /punycode@2.3.0: - resolution: - { - integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, - } - engines: { node: ">=6" } + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} /qr.js@0.0.0: - resolution: - { - integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==, - } + resolution: {integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==} dev: false /query-selector@1.0.9: - resolution: - { - integrity: sha512-IzUgkI5G+b2W6JQpTwHy9IlVr49fPACC9nPLAq26DnLHVzdJJPWfgNsRRMA974MSKyr6tEYemxBcPxdwBXQqAQ==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-IzUgkI5G+b2W6JQpTwHy9IlVr49fPACC9nPLAq26DnLHVzdJJPWfgNsRRMA974MSKyr6tEYemxBcPxdwBXQqAQ==} + engines: {node: '>=0.10'} dev: false /queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} /randombytes@2.1.0: - resolution: - { - integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, - } + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: false /react-d3-cloud@1.0.6(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-u9nIDUU9oSJ5RSDBJQTBuXkATiX4lsBUdhzLiKN8bKF6SbEvJU+NrI/MvERxnXegq1/2r7jwl2CUdtbdfI7Ugw==, - } + resolution: {integrity: sha512-u9nIDUU9oSJ5RSDBJQTBuXkATiX4lsBUdhzLiKN8bKF6SbEvJU+NrI/MvERxnXegq1/2r7jwl2CUdtbdfI7Ugw==} peerDependencies: react: ^16.8.0 || ^17.0.0-0 || ^18.0.0-0 react-dom: ^16.8.0 || ^17.0.0-0 || ^18.0.0-0 @@ -6028,10 +4635,7 @@ packages: dev: false /react-dom@18.2.0(react@18.2.0): - resolution: - { - integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==, - } + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 dependencies: @@ -6040,32 +4644,23 @@ packages: scheduler: 0.23.0 dev: false - /react-error-boundary@4.0.10(react@18.2.0): - resolution: - { - integrity: sha512-pvVKdi77j2OoPHo+p3rorgE43OjDWiqFkaqkJz8sJKK6uf/u8xtzuaVfj5qJ2JnDLIgF1De3zY5AJDijp+LVPA==, - } + /react-error-boundary@4.0.11(react@18.2.0): + resolution: {integrity: sha512-U13ul67aP5DOSPNSCWQ/eO0AQEYzEFkVljULQIjMV0KlffTAhxuDoBKdO0pb/JZ8mDhMKFZ9NZi0BmLGUiNphw==} peerDependencies: - react: ">=16.13.1" + react: '>=16.13.1' dependencies: - "@babel/runtime": 7.22.10 + '@babel/runtime': 7.23.5 react: 18.2.0 dev: false /react-fast-compare@3.2.2: - resolution: - { - integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==, - } + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} dev: false /react-faux-dom@4.5.0(react@18.2.0): - resolution: - { - integrity: sha512-T03fyZw/He4EYPqQpK5KJ9BQXNNMMgUo5DiwWkFG5wlpMDuiiYc4Q8WfeODjl3g2S2OBqy3+0VUr44sZkqz2Sw==, - } + resolution: {integrity: sha512-T03fyZw/He4EYPqQpK5KJ9BQXNNMMgUo5DiwWkFG5wlpMDuiiYc4Q8WfeODjl3g2S2OBqy3+0VUr44sZkqz2Sw==} peerDependencies: - react: "*" + react: '*' dependencies: create-react-class: 15.7.0 hoist-non-react-statics: 3.3.2 @@ -6075,14 +4670,11 @@ packages: dev: false /react-hot-toast@2.4.1(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==} + engines: {node: '>=10'} peerDependencies: - react: ">=16" - react-dom: ">=16" + react: '>=16' + react-dom: '>=16' dependencies: goober: 2.1.13(csstype@3.1.2) react: 18.2.0 @@ -6091,31 +4683,22 @@ packages: - csstype dev: false - /react-icons@4.10.1(react@18.2.0): - resolution: - { - integrity: sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==, - } + /react-icons@4.12.0(react@18.2.0): + resolution: {integrity: sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==} peerDependencies: - react: "*" + react: '*' dependencies: react: 18.2.0 dev: false /react-is@16.13.1: - resolution: - { - integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, - } + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - /react-qr-code@2.0.11(react@18.2.0): - resolution: - { - integrity: sha512-P7mvVM5vk9NjGdHMt4Z0KWeeJYwRAtonHTghZT2r+AASinLUUKQ9wfsGH2lPKsT++gps7hXmaiMGRvwTDEL9OA==, - } + /react-qr-code@2.0.12(react@18.2.0): + resolution: {integrity: sha512-k+pzP5CKLEGBRwZsDPp98/CAJeXlsYRHM2iZn1Sd5Th/HnKhIZCSg27PXO58zk8z02RaEryg+60xa4vyywMJwg==} peerDependencies: react: ^16.x || ^17.x || ^18.x - react-native-svg: "*" + react-native-svg: '*' peerDependenciesMeta: react-native-svg: optional: true @@ -6126,189 +4709,144 @@ packages: dev: false /react@18.2.0: - resolution: - { - integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 dev: false /readdirp@3.6.0: - resolution: - { - integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, - } - engines: { node: ">=8.10.0" } + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: false - /regenerate-unicode-properties@10.1.0: - resolution: - { - integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==, - } - engines: { node: ">=4" } + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: true + + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} dependencies: regenerate: 1.4.2 dev: false /regenerate@1.4.2: - resolution: - { - integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, - } + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: false /regenerator-runtime@0.14.0: - resolution: - { - integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==, - } + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} /regenerator-transform@0.15.2: - resolution: - { - integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==, - } + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - "@babel/runtime": 7.22.10 + '@babel/runtime': 7.23.5 dev: false - /regexp.prototype.flags@1.5.0: - resolution: - { - integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==, - } - engines: { node: ">= 0.4" } + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - functions-have-names: 1.2.3 + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 /regexpu-core@5.3.2: - resolution: - { - integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} dependencies: - "@babel/regjsgen": 0.8.0 + '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.0 + regenerate-unicode-properties: 10.1.1 regjsparser: 0.9.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 dev: false /regjsparser@0.9.1: - resolution: - { - integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==, - } + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true dependencies: jsesc: 0.5.0 dev: false /require-directory@2.1.1: - resolution: - { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} dev: true /require-from-string@2.0.2: - resolution: - { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} dev: false /resize-observer@1.0.4: - resolution: - { - integrity: sha512-AQ2MdkWTng9d6JtjHvljiQR949qdae91pjSNugGGeOFzKIuLHvoZIYhUTjePla5hCFDwQHrnkciAIzjzdsTZew==, - } + resolution: {integrity: sha512-AQ2MdkWTng9d6JtjHvljiQR949qdae91pjSNugGGeOFzKIuLHvoZIYhUTjePla5hCFDwQHrnkciAIzjzdsTZew==} dev: false /resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: ">=4" } - dev: true - - /resolve@1.22.4: - resolution: - { - integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==, - } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /resolve@2.0.0-next.4: - resolution: - { - integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==, - } + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true /reusify@1.0.4: - resolution: - { - integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, - } - engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} /rimraf@3.0.2: - resolution: - { - integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, - } + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true /rollup-plugin-terser@7.0.2(rollup@2.79.1): - resolution: - { - integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==, - } + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser peerDependencies: rollup: ^2.0.0 dependencies: - "@babel/code-frame": 7.22.10 + '@babel/code-frame': 7.23.5 jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.19.2 + terser: 5.24.0 dev: false - /rollup-plugin-visualizer@5.9.2(rollup@2.79.1): - resolution: - { - integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==, - } - engines: { node: ">=14" } + /rollup-plugin-visualizer@5.9.3(rollup@2.79.1): + resolution: {integrity: sha512-ieGM5UAbMVqThX67GCuFHu/GkaSXIUZwFKJsSzE+7+k9fibU/6gbUz7SL+9BBzNtv5bIFHj7kEu0TWcqEnT/sQ==} + engines: {node: '>=14'} hasBin: true peerDependencies: - rollup: 2.x || 3.x + rollup: 2.x || 3.x || 4.x peerDependenciesMeta: rollup: optional: true @@ -6321,277 +4859,220 @@ packages: dev: true /rollup@2.79.1: - resolution: - { - integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 - - /rollup@3.28.0: - resolution: - { - integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==, - } - engines: { node: ">=14.18.0", npm: ">=8.0.0" } + fsevents: 2.3.3 + + /rollup@4.6.1: + resolution: {integrity: sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + '@rollup/rollup-android-arm-eabi': 4.6.1 + '@rollup/rollup-android-arm64': 4.6.1 + '@rollup/rollup-darwin-arm64': 4.6.1 + '@rollup/rollup-darwin-x64': 4.6.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.6.1 + '@rollup/rollup-linux-arm64-gnu': 4.6.1 + '@rollup/rollup-linux-arm64-musl': 4.6.1 + '@rollup/rollup-linux-x64-gnu': 4.6.1 + '@rollup/rollup-linux-x64-musl': 4.6.1 + '@rollup/rollup-win32-arm64-msvc': 4.6.1 + '@rollup/rollup-win32-ia32-msvc': 4.6.1 + '@rollup/rollup-win32-x64-msvc': 4.6.1 + fsevents: 2.3.3 dev: false /run-applescript@5.0.0: - resolution: - { - integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} dependencies: execa: 5.1.1 dev: true /run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - /safe-array-concat@1.0.0: - resolution: - { - integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==, - } - engines: { node: ">=0.4" } + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 /safe-buffer@5.2.1: - resolution: - { - integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, - } + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false /safe-regex-test@1.0.0: - resolution: - { - integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==, - } + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-regex: 1.1.4 /scheduler@0.23.0: - resolution: - { - integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==, - } + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 dev: false /semver@6.3.1: - resolution: - { - integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, - } + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true /semver@7.5.4: - resolution: - { - integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 dev: true /serialize-javascript@4.0.0: - resolution: - { - integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==, - } + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: randombytes: 2.1.0 dev: false + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + /shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 /shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} /side-channel@1.0.4: - resolution: - { - integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, - } + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 /signal-exit@3.0.7: - resolution: - { - integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, - } + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} /sirv@2.0.3: - resolution: - { - integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} + engines: {node: '>= 10'} dependencies: - "@polka/url": 1.0.0-next.21 + '@polka/url': 1.0.0-next.23 mrmime: 1.0.1 totalist: 3.0.1 dev: false /slash@3.0.0: - resolution: - { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} dev: true /source-map-js@1.0.2: - resolution: - { - integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} dev: false /source-map-support@0.5.21: - resolution: - { - integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, - } + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: false /source-map@0.6.1: - resolution: - { - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} dev: false /source-map@0.7.4: - resolution: - { - integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} dev: true /source-map@0.8.0-beta.0: - resolution: - { - integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} dependencies: whatwg-url: 7.1.0 dev: false /sourcemap-codec@1.4.8: - resolution: - { - integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, - } + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead dev: false /string-width@4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 dev: true - /string.prototype.matchall@4.0.8: - resolution: - { - integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==, - } + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 - internal-slot: 1.0.5 - regexp.prototype.flags: 1.5.0 + internal-slot: 1.0.6 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 side-channel: 1.0.4 - /string.prototype.trim@1.2.7: - resolution: - { - integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==, - } - engines: { node: ">= 0.4" } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - - /string.prototype.trimend@1.0.6: - resolution: - { - integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==, - } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - - /string.prototype.trimstart@1.0.6: - resolution: - { - integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==, - } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 /stringify-object@3.3.0: - resolution: - { - integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} dependencies: get-own-enumerable-property-symbols: 3.0.2 is-obj: 1.0.1 @@ -6599,112 +5080,73 @@ packages: dev: false /strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: true /strip-bom@3.0.0: - resolution: - { - integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} dev: true /strip-comments@2.0.1: - resolution: - { - integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} dev: false /strip-final-newline@2.0.0: - resolution: - { - integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} /strip-final-newline@3.0.0: - resolution: - { - integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} dev: true /strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} dev: true /style-attr@1.3.0: - resolution: - { - integrity: sha512-srFr54gzEZoy73WgYfnbxCAtNCzF0Hn5RGzK7gi/0G6ttZd9v3WZFGY4ed5ABr43dbGjPNr4T46geUxxUP9i6w==, - } + resolution: {integrity: sha512-srFr54gzEZoy73WgYfnbxCAtNCzF0Hn5RGzK7gi/0G6ttZd9v3WZFGY4ed5ABr43dbGjPNr4T46geUxxUP9i6w==} dev: false /supports-color@5.5.0: - resolution: - { - integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: false /supports-color@7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 /supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} - /synckit@0.8.5: - resolution: - { - integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + /synckit@0.8.6: + resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} + engines: {node: ^14.18.0 || >=16.0.0} dependencies: - "@pkgr/utils": 2.4.2 - tslib: 2.6.1 + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 dev: true /temp-dir@2.0.0: - resolution: - { - integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} dev: false /tempy@0.6.0: - resolution: - { - integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} dependencies: is-stream: 2.0.1 temp-dir: 2.0.0 @@ -6712,420 +5154,299 @@ packages: unique-string: 2.0.0 dev: false - /terser@5.19.2: - resolution: - { - integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==, - } - engines: { node: ">=10" } + /terser@5.24.0: + resolution: {integrity: sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==} + engines: {node: '>=10'} hasBin: true dependencies: - "@jridgewell/source-map": 0.3.5 - acorn: 8.10.0 + '@jridgewell/source-map': 0.3.5 + acorn: 8.11.2 commander: 2.20.3 source-map-support: 0.5.21 dev: false /text-table@0.2.0: - resolution: - { - integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, - } + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true /titleize@3.0.0: - resolution: - { - integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} dev: true /to-fast-properties@2.0.0: - resolution: - { - integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} dev: false /to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, - } - engines: { node: ">=8.0" } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 /totalist@3.0.1: - resolution: - { - integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} dev: false /tr46@1.0.1: - resolution: - { - integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==, - } + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: false - /ts-api-utils@1.0.1(typescript@5.1.6): - resolution: - { - integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==, - } - engines: { node: ">=16.13.0" } + /ts-api-utils@1.0.3(typescript@5.3.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} peerDependencies: - typescript: ">=4.2.0" + typescript: '>=4.2.0' dependencies: - typescript: 5.1.6 + typescript: 5.3.2 dev: true /tsconfig-paths@3.14.2: - resolution: - { - integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==, - } + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} dependencies: - "@types/json5": 0.0.29 + '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 dev: true - /tslib@1.14.1: - resolution: - { - integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, - } - dev: true - /tslib@2.3.0: - resolution: - { - integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, - } + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} dev: false - /tslib@2.6.1: - resolution: - { - integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==, - } - dev: true - - /tsutils@3.21.0(typescript@5.1.6): - resolution: - { - integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, - } - engines: { node: ">= 6" } - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - dependencies: - tslib: 1.14.1 - typescript: 5.1.6 + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true /type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true /type-fest@0.16.0: - resolution: - { - integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} dev: false /type-fest@0.20.2: - resolution: - { - integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} dev: true /typed-array-buffer@1.0.0: - resolution: - { - integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==, - } - engines: { node: ">= 0.4" } - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-typed-array: 1.1.12 /typed-array-byte-length@1.0.0: - resolution: - { - integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 /typed-array-byte-offset@1.0.0: - resolution: - { - integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 /typed-array-length@1.0.4: - resolution: - { - integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==, - } + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 is-typed-array: 1.1.12 - /typescript@5.1.6: - resolution: - { - integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==, - } - engines: { node: ">=14.17" } + /typescript@5.3.2: + resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + engines: {node: '>=14.17'} hasBin: true dev: true - /ufo@1.2.0: - resolution: - { - integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==, - } + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} /unbox-primitive@1.0.2: - resolution: - { - integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, - } + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - /unconfig@0.3.10: - resolution: - { - integrity: sha512-tj317lhIq2iZF/NXrJnU1t2UaGUKKz1eL1sK2t63Oq66V9BxqvZV12m55fp/fpQJ+DDmVlLgo7cnLVOZkhlO/A==, - } + /unconfig@0.3.11: + resolution: {integrity: sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==} dependencies: - "@antfu/utils": 0.7.5 - defu: 6.1.2 - jiti: 1.19.1 - mlly: 1.4.0 + '@antfu/utils': 0.7.6 + defu: 6.1.3 + jiti: 1.21.0 + mlly: 1.4.2 + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: false /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: - { - integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} dev: false /unicode-match-property-ecmascript@2.0.0: - resolution: - { - integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} dependencies: unicode-canonical-property-names-ecmascript: 2.0.0 unicode-property-aliases-ecmascript: 2.1.0 dev: false /unicode-match-property-value-ecmascript@2.1.0: - resolution: - { - integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} dev: false /unicode-property-aliases-ecmascript@2.1.0: - resolution: - { - integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} dev: false /unique-string@2.0.0: - resolution: - { - integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} dependencies: crypto-random-string: 2.0.0 dev: false - /universalify@2.0.0: - resolution: - { - integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, - } - engines: { node: ">= 10.0.0" } + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} dev: false - /unocss@0.54.2(postcss@8.4.27)(rollup@2.79.1)(vite@4.4.9): - resolution: - { - integrity: sha512-a3l1xAyIP59REem85IHSA+vDu4qovD7HwhUcEbUSX/NKmOZrm1OhUNKbSIzuQQWGdBa8ffagFBNfyXk2b8qSEg==, - } - engines: { node: ">=14" } + /unocss@0.57.7(postcss@8.4.32)(rollup@2.79.1)(vite@5.0.4): + resolution: {integrity: sha512-Z99ZZPkbkjIUXEM7L+K/7Y5V5yqUS0VigG7ZIFzLf/npieKmXHKlrPyvQWFQaf3OqooMFuKBQivh75TwvSOkcQ==} + engines: {node: '>=14'} peerDependencies: - "@unocss/webpack": 0.54.2 + '@unocss/webpack': 0.57.7 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 peerDependenciesMeta: - "@unocss/webpack": + '@unocss/webpack': + optional: true + vite: optional: true dependencies: - "@unocss/astro": 0.54.2(rollup@2.79.1)(vite@4.4.9) - "@unocss/cli": 0.54.2(rollup@2.79.1) - "@unocss/core": 0.54.2 - "@unocss/extractor-arbitrary-variants": 0.54.2 - "@unocss/postcss": 0.54.2(postcss@8.4.27) - "@unocss/preset-attributify": 0.54.2 - "@unocss/preset-icons": 0.54.2 - "@unocss/preset-mini": 0.54.2 - "@unocss/preset-tagify": 0.54.2 - "@unocss/preset-typography": 0.54.2 - "@unocss/preset-uno": 0.54.2 - "@unocss/preset-web-fonts": 0.54.2 - "@unocss/preset-wind": 0.54.2 - "@unocss/reset": 0.54.2 - "@unocss/transformer-attributify-jsx": 0.54.2 - "@unocss/transformer-attributify-jsx-babel": 0.54.2 - "@unocss/transformer-compile-class": 0.54.2 - "@unocss/transformer-directives": 0.54.2 - "@unocss/transformer-variant-group": 0.54.2 - "@unocss/vite": 0.54.2(rollup@2.79.1)(vite@4.4.9) + '@unocss/astro': 0.57.7(rollup@2.79.1)(vite@5.0.4) + '@unocss/cli': 0.57.7(rollup@2.79.1) + '@unocss/core': 0.57.7 + '@unocss/extractor-arbitrary-variants': 0.57.7 + '@unocss/postcss': 0.57.7(postcss@8.4.32) + '@unocss/preset-attributify': 0.57.7 + '@unocss/preset-icons': 0.57.7 + '@unocss/preset-mini': 0.57.7 + '@unocss/preset-tagify': 0.57.7 + '@unocss/preset-typography': 0.57.7 + '@unocss/preset-uno': 0.57.7 + '@unocss/preset-web-fonts': 0.57.7 + '@unocss/preset-wind': 0.57.7 + '@unocss/reset': 0.57.7 + '@unocss/transformer-attributify-jsx': 0.57.7 + '@unocss/transformer-attributify-jsx-babel': 0.57.7 + '@unocss/transformer-compile-class': 0.57.7 + '@unocss/transformer-directives': 0.57.7 + '@unocss/transformer-variant-group': 0.57.7 + '@unocss/vite': 0.57.7(rollup@2.79.1)(vite@5.0.4) + vite: 5.0.4 transitivePeerDependencies: - postcss - rollup - supports-color - - vite dev: false /untildify@4.0.0: - resolution: - { - integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} dev: true /upath@1.2.0: - resolution: - { - integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==, - } - engines: { node: ">=4" } - dev: false - - /update-browserslist-db@1.0.11(browserslist@4.21.10): - resolution: - { - integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==, - } + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: false + + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: - browserslist: ">= 4.21.0" + browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.10 + browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 dev: false /uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 - /vite-plugin-compression@0.5.1(vite@4.4.9): - resolution: - { - integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==, - } + /vite-plugin-compression@0.5.1(vite@5.0.4): + resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} peerDependencies: - vite: ">=2.0.0" + vite: '>=2.0.0' dependencies: chalk: 4.1.2 debug: 4.3.4 fs-extra: 10.1.0 - vite: 4.4.9 + vite: 5.0.4 transitivePeerDependencies: - supports-color dev: false - /vite-plugin-pwa@0.16.4(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0): - resolution: - { - integrity: sha512-lmwHFIs9zI2H9bXJld/zVTbCqCQHZ9WrpyDMqosICDV0FVnCJwniX1NMDB79HGTIZzOQkY4gSZaVTJTw6maz/Q==, - } - engines: { node: ">=16.0.0" } + /vite-plugin-pwa@0.17.2(vite@5.0.4)(workbox-build@7.0.0)(workbox-window@7.0.0): + resolution: {integrity: sha512-aVH9sxcTDumiWYiNcLrFqu+FdL79I2cT5EhlVe5V6nGcC64yQNGT1jamMytwi+OdfXl4VYic0LtoJ6JHMkM3ZQ==} + engines: {node: '>=16.0.0'} peerDependencies: - vite: ^3.1.0 || ^4.0.0 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0 workbox-build: ^7.0.0 workbox-window: ^7.0.0 dependencies: debug: 4.3.4 - fast-glob: 3.3.1 + fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 4.4.9 + vite: 5.0.4 workbox-build: 7.0.0 workbox-window: 7.0.0 transitivePeerDependencies: - supports-color dev: false - /vite@4.4.9: - resolution: - { - integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + /vite@5.0.4: + resolution: {integrity: sha512-RzAr8LSvM8lmhB4tQ5OPcBhpjOZRZjuxv9zO5UcxeoY2bd3kP3Ticd40Qma9/BqZ8JS96Ll/jeBX9u+LJZrhVg==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - "@types/node": ">= 14" - less: "*" + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' lightningcss: ^1.21.0 - sass: "*" - stylus: "*" - sugarss: "*" + sass: '*' + stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true less: optional: true @@ -7140,25 +5461,19 @@ packages: terser: optional: true dependencies: - esbuild: 0.18.20 - postcss: 8.4.27 - rollup: 3.28.0 + esbuild: 0.19.8 + postcss: 8.4.32 + rollup: 4.6.1 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: false /webidl-conversions@4.0.2: - resolution: - { - integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==, - } + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: false /whatwg-url@7.1.0: - resolution: - { - integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==, - } + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: lodash.sortby: 4.7.0 tr46: 1.0.1 @@ -7166,10 +5481,7 @@ packages: dev: false /which-boxed-primitive@1.0.2: - resolution: - { - integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, - } + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 @@ -7177,63 +5489,75 @@ packages: is-string: 1.0.7 is-symbol: 1.0.4 - /which-typed-array@1.1.11: - resolution: - { - integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==, - } - engines: { node: ">= 0.4" } + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: true + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 /which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 /workbox-background-sync@7.0.0: - resolution: - { - integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==, - } + resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} dependencies: idb: 7.1.1 workbox-core: 7.0.0 dev: false /workbox-broadcast-update@7.0.0: - resolution: - { - integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==, - } + resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==} dependencies: workbox-core: 7.0.0 dev: false /workbox-build@7.0.0: - resolution: - { - integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==, - } - engines: { node: ">=16.0.0" } - dependencies: - "@apideck/better-ajv-errors": 0.3.6(ajv@8.12.0) - "@babel/core": 7.22.10 - "@babel/preset-env": 7.22.10(@babel/core@7.22.10) - "@babel/runtime": 7.22.10 - "@rollup/plugin-babel": 5.3.1(@babel/core@7.22.10)(rollup@2.79.1) - "@rollup/plugin-node-resolve": 11.2.1(rollup@2.79.1) - "@rollup/plugin-replace": 2.4.2(rollup@2.79.1) - "@surma/rollup-plugin-off-main-thread": 2.2.3 + resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==} + engines: {node: '>=16.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) + '@babel/core': 7.23.5 + '@babel/preset-env': 7.23.5(@babel/core@7.23.5) + '@babel/runtime': 7.23.5 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.5)(rollup@2.79.1) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 ajv: 8.12.0 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 @@ -7264,41 +5588,29 @@ packages: workbox-sw: 7.0.0 workbox-window: 7.0.0 transitivePeerDependencies: - - "@types/babel__core" + - '@types/babel__core' - supports-color dev: false /workbox-cacheable-response@7.0.0: - resolution: - { - integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==, - } + resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==} dependencies: workbox-core: 7.0.0 dev: false /workbox-core@7.0.0: - resolution: - { - integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==, - } + resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==} dev: false /workbox-expiration@7.0.0: - resolution: - { - integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==, - } + resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==} dependencies: idb: 7.1.1 workbox-core: 7.0.0 dev: false /workbox-google-analytics@7.0.0: - resolution: - { - integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==, - } + resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} dependencies: workbox-background-sync: 7.0.0 workbox-core: 7.0.0 @@ -7307,19 +5619,13 @@ packages: dev: false /workbox-navigation-preload@7.0.0: - resolution: - { - integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==, - } + resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} dependencies: workbox-core: 7.0.0 dev: false /workbox-precaching@7.0.0: - resolution: - { - integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==, - } + resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==} dependencies: workbox-core: 7.0.0 workbox-routing: 7.0.0 @@ -7327,19 +5633,13 @@ packages: dev: false /workbox-range-requests@7.0.0: - resolution: - { - integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==, - } + resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==} dependencies: workbox-core: 7.0.0 dev: false /workbox-recipes@7.0.0: - resolution: - { - integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==, - } + resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==} dependencies: workbox-cacheable-response: 7.0.0 workbox-core: 7.0.0 @@ -7350,67 +5650,46 @@ packages: dev: false /workbox-routing@7.0.0: - resolution: - { - integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==, - } + resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==} dependencies: workbox-core: 7.0.0 dev: false /workbox-strategies@7.0.0: - resolution: - { - integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==, - } + resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==} dependencies: workbox-core: 7.0.0 dev: false /workbox-streams@7.0.0: - resolution: - { - integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==, - } + resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==} dependencies: workbox-core: 7.0.0 workbox-routing: 7.0.0 dev: false /workbox-sw@7.0.0: - resolution: - { - integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==, - } + resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==} dev: false /workbox-window@7.0.0: - resolution: - { - integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==, - } + resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==} dependencies: - "@types/trusted-types": 2.0.3 + '@types/trusted-types': 2.0.7 workbox-core: 7.0.0 dev: false - /wouter-preact@2.11.0(preact@10.16.0): - resolution: - { - integrity: sha512-0eGcl9kI1lk/85/6uri46s5rP+j92F1US2FHzG1ezwF97l0Mas/1n0q9YmKNX3s1VzMxO+ajYKRfAKbsxn+/sA==, - } + /wouter-preact@2.12.2(preact@10.19.2): + resolution: {integrity: sha512-THjKGUOlmwVPblxAERKF4lbaFo9yZBiBVoWAmwKBdosCQSaBi11t6MCXyxHxA1SWOvUtr3YMtqEs+ZJMrGIFyg==} peerDependencies: preact: ^10.0.0 dependencies: - preact: 10.16.0 + preact: 10.19.2 dev: false /wrap-ansi@7.0.0: - resolution: - { - integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 @@ -7418,47 +5697,29 @@ packages: dev: true /wrappy@1.0.2: - resolution: - { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, - } + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} /y18n@5.0.8: - resolution: - { - integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} dev: true /yallist@3.1.1: - resolution: - { - integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, - } + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: false /yallist@4.0.0: - resolution: - { - integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, - } + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true /yargs-parser@21.1.1: - resolution: - { - integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} dev: true /yargs@17.7.2: - resolution: - { - integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} dependencies: cliui: 8.0.1 escalade: 3.1.1 @@ -7470,17 +5731,11 @@ packages: dev: true /yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} /zrender@5.4.4: - resolution: - { - integrity: sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==, - } + resolution: {integrity: sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==} dependencies: tslib: 2.3.0 dev: false diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 3b7b299..618afd3 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,8 +1,8 @@ +import { LoadingPage } from "@sscreator/ui"; import type { VNode } from "preact"; import { Suspense, lazy } from "preact/compat"; import type { RouteProps } from "wouter-preact"; import { Route, Switch } from "wouter-preact"; -import LoadingPage from "./components/LoadingPage"; import ToolWrapper from "./components/ToolWrapper"; import MainPage from "./pages/MainPage"; import ThanksPage from "./pages/ThanksPage"; diff --git a/frontend/src/Main.tsx b/frontend/src/Main.tsx index b3557d8..191d52f 100644 --- a/frontend/src/Main.tsx +++ b/frontend/src/Main.tsx @@ -10,6 +10,8 @@ import ErrorFallback from "./components/ErrorFallback"; import Footer from "./components/Footer"; import { useColorScheme } from "./utils/colorSchemeHelper"; +import "@sscreator/ui/dist/sscreator-ui.css"; + // 处理 Safari 浏览器上的 ResizeObserver 兼容性问题 if (!window.ResizeObserver) { install(); diff --git a/frontend/src/V2RedirectRoutes.ts b/frontend/src/V2RedirectRoutes.ts index 3d2db6f..83f66ed 100644 --- a/frontend/src/V2RedirectRoutes.ts +++ b/frontend/src/V2RedirectRoutes.ts @@ -7,6 +7,7 @@ export const V2RedirectRoutes: { [orginal: string]: string } = { LP_recommend_checker: "/LP-recommend-checker", on_rank_article_viewer: "/on-rank-article-viewer", user_VIP_status_viewer: "/VIP-info-viewer", + thanks: "/thanks", }; export const V2UnavaliableRoutes: string[] = [ @@ -14,4 +15,4 @@ export const V2UnavaliableRoutes: string[] = [ "article_publish_time_viewer", ]; -export const V2UnimplementedRoutes: string[] = ["article_downloader", "thanks"]; +export const V2UnimplementedRoutes: string[] = ["article_downloader"]; diff --git a/frontend/src/components/ErrorFallback.tsx b/frontend/src/components/ErrorFallback.tsx index 7c64954..50e98c4 100644 --- a/frontend/src/components/ErrorFallback.tsx +++ b/frontend/src/components/ErrorFallback.tsx @@ -1,11 +1,20 @@ -import { BiError } from "react-icons/bi"; +import { signal } from "@preact/signals"; +import { + Accordion, + Center, + Column, + ExternalLink, + Icon, + Key, + PrimaryButton, + Row, + SecondaryButton, + Text, +} from "@sscreator/ui"; +import { MdOutlineWarningAmber } from "react-icons/md"; import { useLocation } from "wouter-preact"; -import SSAccordion from "./SSAccordion"; -import SSButton from "./SSButton"; -import SSCenter from "./SSCenter"; -import SSKey from "./SSKey"; -import SSExternalLink from "./SSExternalLink"; -import SSText from "./SSText"; + +const isMoreTechInfoAccordionOpened = signal(false); interface Props { error: Error; @@ -18,42 +27,54 @@ export default function ErrorFallback({ error }: Props) { console.error(`${error.name}: ${error.message}\n${error.stack}`); return ( - -
- - - - - 发生意外错误 - - - 非常抱歉给您带来不好的体验,您可尝试点击下方按钮刷新页面。 - - 如果您多次看到此页面,请向开发者反馈此问题。 - - {error.toString()} +
+ + + + + + + 发生意外错误 + + + 非常抱歉给您带来不好的体验,您可尝试点击下方按钮刷新页面。 + 如果您多次看到此页面,请向开发者反馈。 + + 前往反馈表单 + + {error.toString()} - window.location.reload()}>刷新 - { - setLocation("/"); - window.location.reload(); - }} - > - 返回首页 - + + { + setLocation("/"); + window.location.reload(); + }} + fullWidth + > + 返回首页 + + window.location.reload()} + fullWidth + > + 刷新 + + - - - 如果您使用电脑访问本服务,请按下F12 + + + 如果您使用电脑访问本服务,请按下F12 打开开发者工具,在顶栏中选择 Console(控制台)选项,截图其内容并在反馈时一并发送。 - - -
-
+ + + + ); } diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx index 63f7869..c3c0eb8 100644 --- a/frontend/src/components/Footer.tsx +++ b/frontend/src/components/Footer.tsx @@ -1,48 +1,50 @@ import { signal } from "@preact/signals"; +import { + Column, + ExternalLink, + Footer as FooterBlock, + InternalLink, + Text, +} from "@sscreator/ui"; import { useEffect } from "preact/hooks"; -import type { StatusResponse } from "../models/status"; -import { commonAPIErrorHandler } from "../utils/errorHandler"; -import { fetchData } from "../utils/fetchData"; -import SSExternalLink from "./SSExternalLink"; -import SSInternalLink from "./SSInternalLink"; -import SSText from "./SSText"; +import { useLocation } from "wouter-preact"; +import type { GetResponse } from "../models/status"; +import { sendRequest } from "../utils/sendRequest"; const version = signal(undefined); export default function Footer() { + const [, setLocation] = useLocation(); + useEffect(() => { - fetchData, StatusResponse>( - "GET", - "/status", - {}, - (data) => (version.value = data.version), - commonAPIErrorHandler, - ); + sendRequest, GetResponse>({ + method: "GET", + endpoint: "/v1/status", + onSuccess: ({ data }) => (version.value = data.version), + }); }, []); return ( -
-
- - - - - 版本:{version.value ?? "获取中..."} - Powered By Open-Source Software - + + + + 服务状态 + + setLocation("/thanks")} path="/thanks"> + 鸣谢 + + + 意见反馈 + + 版本:{version.value ?? "获取中..."} + Powered By Open-Source Software + By{" "} - - -
-
+ + 初心不变_叶子 + + + + ); } diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx index a27da38..b36ff02 100644 --- a/frontend/src/components/Header.tsx +++ b/frontend/src/components/Header.tsx @@ -1,11 +1,14 @@ -import { IoIosArrowBack } from "react-icons/io"; +import { + ColorSchemeSwitch, + GhostButton, + Header as HeaderBlock, + Row, + Text, +} from "@sscreator/ui"; +import { MdOutlineArrowBack } from "react-icons/md"; import { useLocation } from "wouter-preact"; -import SSActionIcon from "./SSActionIcon"; -import SSAvatar from "./SSAvatar"; -import SSColorSchemeSwitch from "./SSColorSchemeSwitch"; -import SSText from "./SSText"; import SearchModal from "./SearchModal"; -import Icon from "/favicon-64.png"; +import icon from "/favicon-64.png"; interface Props { toolName: string; @@ -21,37 +24,33 @@ export default function Header({ const [, setLocation] = useLocation(); return ( - <> -
-
+ + + {showIcon && ( - + 简书小工具集 )} {!hideBackArrow && ( - } + hoverBackgroundColor="hover:bg-zinc-200 dark:hover:bg-zinc-700" + textColor="text-zinc-500 dark:text-zinc-300" onClick={() => setLocation("/")} - label="返回" - > - - + /> )} - + {toolName} - -
-
+ + + - -
-
-
- + + + + ); } diff --git a/frontend/src/components/LoadingPage.tsx b/frontend/src/components/LoadingPage.tsx deleted file mode 100644 index 29f4aac..0000000 --- a/frontend/src/components/LoadingPage.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { useSignal } from "@preact/signals"; -import { useEffect } from "preact/hooks"; -import SSCenter from "./SSCenter"; -import SSLoader from "./SSLoader"; - -export default function LoadingPage() { - const showLoader = useSignal(false); - - useEffect(() => { - setTimeout(() => (showLoader.value = true), 300); - }, []); - - return ( - - {showLoader.value && } - - ); -} diff --git a/frontend/src/components/SSAccordion.tsx b/frontend/src/components/SSAccordion.tsx deleted file mode 100644 index 30f6d31..0000000 --- a/frontend/src/components/SSAccordion.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { useSignal } from "@preact/signals"; -import clsx from "clsx"; -import type { ComponentChildren } from "preact"; -import { BsChevronUp } from "react-icons/bs"; -import { whenEnterOrSpace } from "../utils/keyHelper"; -import SSText from "./SSText"; - -interface Props { - children: ComponentChildren; - title: string; -} - -export default function SSAccordion({ children, title }: Props) { - const isOpened = useSignal(false); - - return ( -
-
(isOpened.value = !isOpened.value)} - onKeyUp={(event) => - whenEnterOrSpace(event, () => (isOpened.value = !isOpened.value)) - } - > - - {title} - - - - -
- -
- {children} -
-
- ); -} diff --git a/frontend/src/components/SSActionIcon.tsx b/frontend/src/components/SSActionIcon.tsx deleted file mode 100644 index e4db689..0000000 --- a/frontend/src/components/SSActionIcon.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import clsx from "clsx"; -import type { ComponentChildren } from "preact"; -import SSText from "./SSText"; - -interface Props { - className?: string; - label: string; - children: ComponentChildren; - onClick(): void; -} - -export default function SSActionIcon({ - className, - label, - children, - onClick, -}: Props) { - return ( - - ); -} diff --git a/frontend/src/components/SSAutocomplete.tsx b/frontend/src/components/SSAutocomplete.tsx index e75e051..3345f11 100644 --- a/frontend/src/components/SSAutocomplete.tsx +++ b/frontend/src/components/SSAutocomplete.tsx @@ -1,10 +1,9 @@ import { useDebouncedValue } from "@mantine/hooks"; import type { Signal } from "@preact/signals"; import { useSignal } from "@preact/signals"; +import { Text, TextInput } from "@sscreator/ui"; import clsx from "clsx"; import { useEffect, useRef } from "preact/hooks"; -import SSText from "./SSText"; -import SSTextInput from "./SSTextInput"; interface Props { label: string; @@ -46,13 +45,13 @@ export default function SSAutocomplete({ return (
- @@ -81,7 +80,7 @@ export default function SSAutocomplete({ value.value = item; }} > - {item} + {item} ))}
diff --git a/frontend/src/components/SSAvatar.tsx b/frontend/src/components/SSAvatar.tsx deleted file mode 100644 index dca2d50..0000000 --- a/frontend/src/components/SSAvatar.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import clsx from "clsx"; - -interface Props { - className?: string; - src: string; - alt?: string; -} -export default function SSAvatar({ className, src, alt }: Props) { - return ( - {alt} - ); -} diff --git a/frontend/src/components/SSBadge.tsx b/frontend/src/components/SSBadge.tsx deleted file mode 100644 index 0f0b27f..0000000 --- a/frontend/src/components/SSBadge.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import clsx from "clsx"; - -interface Props { - children: string; - className?: string; - large?: boolean; -} - -export default function SSBadge({ children, className, large }: Props) { - return ( -

- {children} -

- ); -} diff --git a/frontend/src/components/SSButton.tsx b/frontend/src/components/SSButton.tsx deleted file mode 100644 index ea5be11..0000000 --- a/frontend/src/components/SSButton.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import clsx from "clsx"; -import type { ComponentChildren } from "preact"; -import { AiOutlineLoading } from "react-icons/ai"; - -interface Props { - children: ComponentChildren; - className?: string; - onClick?(): void; - loading?: boolean; - light?: boolean; -} - -export default function SSButton({ - children, - className, - onClick, - loading = false, - light = false, -}: Props) { - return ( - - ); -} diff --git a/frontend/src/components/SSCard.tsx b/frontend/src/components/SSCard.tsx deleted file mode 100644 index c8247c4..0000000 --- a/frontend/src/components/SSCard.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import clsx from "clsx"; -import type { ComponentChildren } from "preact"; -import SSText from "./SSText"; - -interface Props { - className?: string; - children: ComponentChildren; - title?: string; - subTitle?: string; - round?: string; - padding?: string; - margin?: string; - innerGap?: string; - titleXLarge?: boolean; -} - -export default function SSCard({ - className, - children, - title, - subTitle, - round = "rounded-xl", - padding = "p-4", - margin = "m-0", - innerGap = "gap-3", - titleXLarge = false, -}: Props) { - return ( -
- {(title || subTitle) && ( -
- {title && ( - - {title} - - )} - {subTitle && ( - - {subTitle} - - )} -
- )} - {children} -
- ); -} diff --git a/frontend/src/components/SSCenter.tsx b/frontend/src/components/SSCenter.tsx deleted file mode 100644 index 5e40659..0000000 --- a/frontend/src/components/SSCenter.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import clsx from "clsx"; -import type { ComponentChildren } from "preact"; - -interface Props { - className?: string; - children: ComponentChildren; -} - -export default function SSCenter({ className, children }: Props) { - return ( -
- {children} -
- ); -} diff --git a/frontend/src/components/SSCheckbox.tsx b/frontend/src/components/SSCheckbox.tsx deleted file mode 100644 index 894bb33..0000000 --- a/frontend/src/components/SSCheckbox.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import type { Signal } from "@preact/signals"; -import clsx from "clsx"; -import { BiCheck } from "react-icons/bi"; -import { whenEnterOrSpace } from "../utils/keyHelper"; -import SSCenter from "./SSCenter"; -import SSText from "./SSText"; - -interface Props { - label: string; - value: Signal; -} - -export default function SSCheckbox({ label, value }: Props) { - return ( - - ); -} diff --git a/frontend/src/components/SSColorSchemeSwitch.tsx b/frontend/src/components/SSColorSchemeSwitch.tsx deleted file mode 100644 index 2011887..0000000 --- a/frontend/src/components/SSColorSchemeSwitch.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { BsMoon, BsSun } from "react-icons/bs"; -import { useColorScheme } from "../utils/colorSchemeHelper"; -import { whenEnterOrSpace } from "../utils/keyHelper"; -import umamiTrack from "../utils/umamiTrack"; -import SSText from "./SSText"; - -export default function SSColorSchemeSwitch() { - const { colorScheme, toggleColorScheme } = useColorScheme(); - - return ( -
{ - toggleColorScheme(); - umamiTrack("toggle-color-scheme"); - }} - onKeyUp={(event) => - whenEnterOrSpace(event, () => { - toggleColorScheme(); - umamiTrack("toggle-color-scheme"); - }) - } - aria-label="切换颜色主题" - > - - - - - - -
- ); -} diff --git a/frontend/src/components/SSDataNotFoundNotice.tsx b/frontend/src/components/SSDataNotFoundNotice.tsx deleted file mode 100644 index 1a1cb08..0000000 --- a/frontend/src/components/SSDataNotFoundNotice.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { BsDatabaseDash } from "react-icons/bs"; -import SSText from "./SSText"; - -interface Props { - message?: string; -} - -export default function SSDataNotFoundNotice({ message = "无数据" }: Props) { - return ( -
- - - - {message} -
- ); -} diff --git a/frontend/src/components/SSExternalLink.tsx b/frontend/src/components/SSExternalLink.tsx deleted file mode 100644 index f1260db..0000000 --- a/frontend/src/components/SSExternalLink.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import clsx from "clsx"; -import { BiLinkExternal } from "react-icons/bi"; - -interface Props { - className?: string; - url: string; - label?: string; - openInCurrentTab?: boolean; - hideIcon?: boolean; -} - -export default function SSExternalLink({ - className, - url, - label, - openInCurrentTab = false, - hideIcon = false, -}: Props) { - return ( - - {label ?? url} - {!hideIcon && ( - - )} - - ); -} diff --git a/frontend/src/components/SSInternalLink.tsx b/frontend/src/components/SSInternalLink.tsx deleted file mode 100644 index f7c310f..0000000 --- a/frontend/src/components/SSInternalLink.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import clsx from "clsx"; -import { BiLinkExternal } from "react-icons/bi"; -import { useLocation } from "wouter-preact"; -import { whenEnterOrSpace } from "../utils/keyHelper"; - -interface Props { - className?: string; - url: string; - label?: string; - hideIcon?: boolean; -} - -export default function SSInternalLink({ - className, - url, - label, - hideIcon = false, -}: Props) { - const [, setLocation] = useLocation(); - - return ( -
setLocation(url)} - onKeyUp={(event) => whenEnterOrSpace(event, () => setLocation(url))} - > - {label ?? url} - {!hideIcon && ( - - )} -
- ); -} diff --git a/frontend/src/components/SSKey.tsx b/frontend/src/components/SSKey.tsx deleted file mode 100644 index d10f053..0000000 --- a/frontend/src/components/SSKey.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { ComponentChildren } from "preact"; -import SSText from "./SSText"; - -interface Props { - children: ComponentChildren; -} - -export default function SSKey({ children }: Props) { - return ( - - {" "} - {children}{" "} - - ); -} diff --git a/frontend/src/components/SSLazyLoadTable.tsx b/frontend/src/components/SSLazyLoadTable.tsx index bfc7f4a..829f3ec 100644 --- a/frontend/src/components/SSLazyLoadTable.tsx +++ b/frontend/src/components/SSLazyLoadTable.tsx @@ -1,11 +1,8 @@ import type { Signal } from "@preact/signals"; +import { Center, HorizontalScoll, LoadingIcon, Text } from "@sscreator/ui"; import clsx from "clsx"; import type { ComponentChildren } from "preact"; import { useEffect, useMemo, useRef } from "preact/hooks"; -import SSCenter from "./SSCenter"; -import SSLoader from "./SSLoader"; -import SSScolllable from "./SSScollable"; -import SSText from "./SSText"; interface Props { className?: string; @@ -53,15 +50,15 @@ export default function SSLazyLoadTable({ return (
- + {Object.keys(data[0]).map((item) => ( ))} @@ -78,16 +75,16 @@ export default function SSLazyLoadTable({ ))}
- + {item} - +
-
+
{isLoading.value && ( - - - +
+ +
)}
); diff --git a/frontend/src/components/SSLoader.tsx b/frontend/src/components/SSLoader.tsx deleted file mode 100644 index 7a8cfaf..0000000 --- a/frontend/src/components/SSLoader.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { AiOutlineLoading } from "react-icons/ai"; -import SSText from "./SSText"; - -interface Props { - size?: number; -} - -export default function SSLoader({ size = 36 }: Props) { - return ( - - - - ); -} diff --git a/frontend/src/components/SSModal.tsx b/frontend/src/components/SSModal.tsx deleted file mode 100644 index fe6ac18..0000000 --- a/frontend/src/components/SSModal.tsx +++ /dev/null @@ -1,101 +0,0 @@ -/* eslint-disable jsx-a11y/click-events-have-key-events */ -import type { Signal } from "@preact/signals"; -import { useSignal } from "@preact/signals"; -import clsx from "clsx"; -import type { ComponentChildren } from "preact"; -import { useEffect } from "preact/hooks"; -import { MdClose } from "react-icons/md"; -import SSText from "./SSText"; - -function closeModalWhenEscPressed(onClose: () => void) { - return (e: KeyboardEvent) => { - if (e.code === "Escape") { - onClose(); - } - }; -} - -interface Props { - children: ComponentChildren; - isOpen: Signal; - onClose(): void; - title: string; - hideCloseButton?: boolean; - preventCloseByClickMask?: boolean; - preventCloseByEsc?: boolean; -} - -export default function SSModal({ - children, - isOpen, - onClose, - title, - hideCloseButton = false, - preventCloseByClickMask = false, - preventCloseByEsc = false, -}: Props) { - // 对于每个 Modal,只存储一个事件处理器函数,以便正确清除 - // 该组件假设 preventCloseByEsc 参数不会在运行时修改 - // 因此对于设置 preventCloseByEsc = true 的场景,不存储该函数以节省资源 - const usingEscEventHandlerFunc = useSignal( - !preventCloseByClickMask ? closeModalWhenEscPressed(onClose) : undefined, - ); - - // Modal 展示时禁止下层元素滚动 - useEffect(() => { - if (isOpen.value) { - document.body.style.overflowY = "hidden"; - } else { - document.body.style.overflowY = ""; - } - }, [isOpen.value]); - - // 如果没有显式禁止,允许用户通过按下 Esc 关闭 Modal - useEffect(() => { - if (!preventCloseByEsc) { - if (isOpen.value) { - document.addEventListener("keydown", usingEscEventHandlerFunc.value!); - } else { - document.removeEventListener( - "keydown", - usingEscEventHandlerFunc.value!, - ); - } - } - }, [isOpen.value]); - - return ( - <> -
-
-
- - {title} - - {!hideCloseButton && ( - - - - )} -
- - {children} -
- - ); -} diff --git a/frontend/src/components/SSNumberInput.tsx b/frontend/src/components/SSNumberInput.tsx deleted file mode 100644 index 4a304d1..0000000 --- a/frontend/src/components/SSNumberInput.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import type { Signal } from "@preact/signals"; -import SSText from "./SSText"; - -interface Props { - label: string; - value: Signal; - description?: string; - min?: number; - max?: number; - step?: string; - onEnter?: () => void; - noSelectOnFocus?: boolean; -} - -export default function SSNumberInput({ - label, - value, - description, - min, - max, - step = "1", - onEnter, - noSelectOnFocus = false, -}: Props) { - return ( -
- - {label} - - { - const parseResult = parseFloat(event.currentTarget.value); - if (!Number.isNaN(parseResult)) { - value.value = parseResult; - } - }} - onKeyUp={ - onEnter - ? (event: KeyboardEvent) => event.key === "Enter" && onEnter() - : undefined - } - onFocus={ - !noSelectOnFocus - ? (event: FocusEvent) => - (event.currentTarget as HTMLInputElement).value.length !== 0 && - (event.currentTarget as HTMLInputElement).select() - : undefined - } - aria-label={label} - spellCheck={false} - /> - {description && ( - - {description} - - )} -
- ); -} diff --git a/frontend/src/components/SSScollable.tsx b/frontend/src/components/SSScollable.tsx deleted file mode 100644 index d4b9625..0000000 --- a/frontend/src/components/SSScollable.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import clsx from "clsx"; -import type { ComponentChildren } from "preact"; - -interface Props { - className?: string; - children: ComponentChildren; -} - -export default function SSScolllable({ className, children }: Props) { - return
{children}
; -} diff --git a/frontend/src/components/SSSegmentedControl.tsx b/frontend/src/components/SSSegmentedControl.tsx deleted file mode 100644 index 144b974..0000000 --- a/frontend/src/components/SSSegmentedControl.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import type { Signal } from "@preact/signals"; -import clsx from "clsx"; -import { whenEnterOrSpace } from "../utils/keyHelper"; -import SSText from "./SSText"; - -interface Props { - label?: string; - data: Record; - value: Signal; -} - -export default function SSSegmentedControl({ - label = "", - data, - value, -}: Props) { - return ( -
- - {label} - -
- {Object.entries(data).map(([name, itemValue]) => ( -
(value.value = itemValue)} - onKeyUp={(event) => - whenEnterOrSpace(event, () => (value.value = itemValue)) - } - > - - {name} - -
- ))} -
-
- ); -} diff --git a/frontend/src/components/SSSkeleton.tsx b/frontend/src/components/SSSkeleton.tsx deleted file mode 100644 index 72142ed..0000000 --- a/frontend/src/components/SSSkeleton.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import clsx from "clsx"; -import type { JSX } from "preact/jsx-runtime"; - -interface Props { - className: string; - style?: JSX.CSSProperties; -} - -export default function SSSkeleton({ className, style }: Props) { - return ( -
- ); -} diff --git a/frontend/src/components/SSStat.tsx b/frontend/src/components/SSStat.tsx deleted file mode 100644 index 5fc704c..0000000 --- a/frontend/src/components/SSStat.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import clsx from "clsx"; -import SSText from "./SSText"; - -interface Props { - className?: string; - title: string; - value: string | number; - desc?: string; -} - -export default function SSStat({ className, title, value, desc = "" }: Props) { - return ( -
- {title} - {value} - - {desc} - -
- ); -} diff --git a/frontend/src/components/SSTable.tsx b/frontend/src/components/SSTable.tsx index 5628b2c..5e552c6 100644 --- a/frontend/src/components/SSTable.tsx +++ b/frontend/src/components/SSTable.tsx @@ -1,7 +1,6 @@ +import { HorizontalScoll, Text } from "@sscreator/ui"; import clsx from "clsx"; import type { ComponentChildren } from "preact"; -import SSScolllable from "./SSScollable"; -import SSText from "./SSText"; interface Props { className?: string; @@ -11,15 +10,15 @@ interface Props { export default function SSTable({ className, data, tableItemKey }: Props) { return ( - + {Object.keys(data[0]).map((item) => ( ))} @@ -36,6 +35,6 @@ export default function SSTable({ className, data, tableItemKey }: Props) { ))}
- + {item} - +
-
+ ); } diff --git a/frontend/src/components/SSText.tsx b/frontend/src/components/SSText.tsx deleted file mode 100644 index a4dfc8a..0000000 --- a/frontend/src/components/SSText.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import clsx from "clsx"; -import type { ComponentChildren } from "preact"; - -interface Props { - children: ComponentChildren; - className?: string; - gray?: boolean; - color?: string; - bold?: boolean; - xbold?: boolean; - small?: boolean; - large?: boolean; - xlarge?: boolean; - center?: boolean; -} - -export default function SSText({ - children, - className = "", - gray = false, - color = "", - bold = false, - xbold = false, - small = false, - large = false, - xlarge = false, - center = false, -}: Props) { - return ( -

- {children} -

- ); -} diff --git a/frontend/src/components/SSTextInput.tsx b/frontend/src/components/SSTextInput.tsx deleted file mode 100644 index f762993..0000000 --- a/frontend/src/components/SSTextInput.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import type { Signal } from "@preact/signals"; -import type { Ref } from "preact"; -import SSText from "./SSText"; - -interface Props { - label: string; - value: Signal; - description?: string; - placeholder?: string; - onEnter?(): void; - noSelectOnFocus?: boolean; - inputRef?: Ref; -} - -export default function SSTextInput({ - label, - value, - description, - placeholder, - onEnter, - noSelectOnFocus = false, - inputRef, -}: Props) { - return ( -
- - {label} - - (value.value = event.currentTarget.value)} - onKeyUp={ - onEnter - ? (event: any) => event.key === "Enter" && onEnter() - : undefined - } - onFocus={ - !noSelectOnFocus - ? (event: FocusEvent) => - (event.currentTarget as HTMLInputElement).value.length !== 0 && - (event.currentTarget as HTMLInputElement).select() - : undefined - } - aria-label={label} - spellCheck={false} - ref={inputRef} - /> - {description && ( - - {description} - - )} -
- ); -} diff --git a/frontend/src/components/SSTooltip.tsx b/frontend/src/components/SSTooltip.tsx deleted file mode 100644 index 2f82a7d..0000000 --- a/frontend/src/components/SSTooltip.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import clsx from "clsx"; -import type { ComponentChildren } from "preact"; -import { GoQuestion } from "react-icons/go"; -import SSText from "./SSText"; - -interface Props { - children: ComponentChildren; - className?: string; - tooltip: string; - hideIcon?: boolean; -} - -export default function SSTooltip({ - children, - className, - tooltip, - hideIcon = false, -}: Props) { - return ( -
- -

- {tooltip} -

-
- ); -} diff --git a/frontend/src/components/SearchModal.tsx b/frontend/src/components/SearchModal.tsx index 0ddfaf1..c2e1cf7 100644 --- a/frontend/src/components/SearchModal.tsx +++ b/frontend/src/components/SearchModal.tsx @@ -1,52 +1,31 @@ import { useComputed, useSignal } from "@preact/signals"; +import { + Column, + GhostButton, + Modal, + NoResultNotice, + TextInput, +} from "@sscreator/ui"; import { useEffect, useRef } from "preact/hooks"; -import { AiOutlineSearch } from "react-icons/ai"; -import { useLocation } from "wouter-preact"; +import { MdSearch } from "react-icons/md"; import { routes } from "../routes"; -import { whenEnterOrSpace } from "../utils/keyHelper"; import { removeSpace } from "../utils/textHelper"; import umamiTrack from "../utils/umamiTrack"; -import SSActionIcon from "./SSActionIcon"; -import SSModal from "./SSModal"; -import SSText from "./SSText"; -import SSTextInput from "./SSTextInput"; - -interface ToolItemProps { - name: string; - description: string; - onClick(): void; -} - -function ToolItem({ name, description, onClick }: ToolItemProps) { - return ( -
whenEnterOrSpace(event, onClick)} - > - - {name} - - {description} -
- ); -} +import ToolCard from "./ToolCard"; export default function SearchModal() { - const [, setLocation] = useLocation(); - const searchModalOpen = useSignal(false); const textInputContent = useSignal(""); const matchRouteItems = useComputed(() => textInputContent.value === "" - ? routes - : routes.filter((item) => - removeSpace(item.toolName).includes( - removeSpace(textInputContent.value), - ), - ), + ? routes.slice(0, 5) + : routes + .filter((item) => + removeSpace(item.toolName).includes( + removeSpace(textInputContent.value), + ), + ) + .slice(0, 5), ); const textInputRef = useRef(null); @@ -58,49 +37,43 @@ export default function SearchModal() { return ( <> - + } + hoverBackgroundColor="hover:bg-zinc-200 dark:hover:bg-zinc-700" onClick={() => { searchModalOpen.value = true; umamiTrack("click-search-button"); }} - > - - + ariaLabel="搜索" + /> - (searchModalOpen.value = false)} - title="搜索" - > -
- + + + -
{matchRouteItems.value.length !== 0 ? ( matchRouteItems.value.map((item) => ( - setLocation(item.path)} + path={item.path} + downgraded={false} + unavaliable={false} /> )) ) : ( - - 没有查询到数据 - + )} -
- +
+
); } diff --git a/frontend/src/components/ToolCard.tsx b/frontend/src/components/ToolCard.tsx index 4912a8e..dc8f44f 100644 --- a/frontend/src/components/ToolCard.tsx +++ b/frontend/src/components/ToolCard.tsx @@ -1,8 +1,6 @@ -import clsx from "clsx"; +import { Badge, CardButton, Column, Icon, Row, Text } from "@sscreator/ui"; import { AiOutlineRight } from "react-icons/ai"; import { useLocation } from "wouter-preact"; -import SSBadge from "./SSBadge"; -import SSText from "./SSText"; interface Props { toolName: string; @@ -21,41 +19,44 @@ export default function ToolCard({ }: Props) { const [, setLocation] = useLocation(); return ( - + + + + + {toolName} + + {downgraded && ( + + 降级 + + )} + {unavaliable && ( + + 不可用 + + )} + + + {description} + + + {!unavaliable && ( + + + + )} + + ); } diff --git a/frontend/src/components/ToolWrapper.tsx b/frontend/src/components/ToolWrapper.tsx index a27716a..38c8d16 100644 --- a/frontend/src/components/ToolWrapper.tsx +++ b/frontend/src/components/ToolWrapper.tsx @@ -1,24 +1,32 @@ import { useDocumentTitle } from "@mantine/hooks"; import { batch, useSignal } from "@preact/signals"; -import clsx from "clsx"; -import type { Dayjs } from "dayjs"; +import { + Column, + ExternalLink, + Grid, + Icon, + LoadingPage, + Modal, + PrimaryButton, + Row, + Text, + WarningAlert, +} from "@sscreator/ui"; import type { JSX } from "preact"; import { Suspense, useEffect } from "preact/compat"; +import { + MdOutlineAccessTime, + MdOutlineLink, + MdOutlineNumbers, + MdOutlineUpload, +} from "react-icons/md"; import { useLocation } from "wouter-preact"; -import type { InfoRequest, InfoResponse } from "../models/info"; -import { InfoStatus } from "../models/info"; +import type { GetToolStatusResponse } from "../models/status"; +import { ToolStatusEnum } from "../models/status"; import { getToolSlug } from "../utils/URLHelper"; -import { commonAPIErrorHandler } from "../utils/errorHandler"; -import { fetchData } from "../utils/fetchData"; +import { sendRequest } from "../utils/sendRequest"; import { getDateTimeWithoutSecond, parseTime } from "../utils/timeHelper"; -import { toastWarning } from "../utils/toastHelper"; import Header from "./Header"; -import LoadingPage from "./LoadingPage"; -import SSButton from "./SSButton"; -import SSExternalLink from "./SSExternalLink"; -import SSModal from "./SSModal"; -import SSStat from "./SSStat"; -import SSText from "./SSText"; interface Props { Component(): JSX.Element; @@ -28,13 +36,8 @@ interface Props { export default function ToolWrapper({ Component, toolName }: Props) { const [, setLocation] = useLocation(); - const isLoading = useSignal(false); - const toolStatus = useSignal(undefined); - const reason = useSignal(undefined); - const dataUpdateTime = useSignal(undefined); - const dataUpdateFreqDesc = useSignal(undefined); - const dataCount = useSignal(undefined); - const dataSource = useSignal | undefined>({}); + const toolStatus = useSignal(undefined); + const showDowngradeNotice = useSignal(false); const showUnavaliableModal = useSignal(false); // 设置页面标题 @@ -44,108 +47,115 @@ export default function ToolWrapper({ Component, toolName }: Props) { useEffect(() => window.scrollTo(0, 0), []); useEffect(() => { - fetchData( - "GET", - "/info", - { - tool_slug: getToolSlug(), - }, - (data) => { + sendRequest, GetToolStatusResponse>({ + method: "GET", + endpoint: `/v1/status/${getToolSlug()}`, + onSuccess: ({ data }) => batch(() => { - toolStatus.value = data.status; - reason.value = data.reason; - dataSource.value = data.data_source; - if (data.data_update_time) { - dataUpdateTime.value = parseTime(data.data_update_time); - dataUpdateFreqDesc.value = data.data_update_freq_desc!; - } - if (data.data_count) { - dataCount.value = data.data_count; - } - }); - - if (toolStatus.value === InfoStatus.DOWNGRADED) { - toastWarning( - `服务降级\n${ - reason.value ?? - "该小工具处于降级状态,其数据准确性、展示效果及性能可能受到影响,请您留意。" - }`, - 4000, - ); - } + toolStatus.value = data; - if (toolStatus.value === InfoStatus.UNAVALIABLE) { - showUnavaliableModal.value = true; - } - }, - commonAPIErrorHandler, - isLoading, - ); + if (data.status === ToolStatusEnum.DOWNGRADED) { + showDowngradeNotice.value = true; + } else if (data.status === ToolStatusEnum.UNAVALIABLE) { + showUnavaliableModal.value = true; + } + }), + }); }, []); return ( <>
- {!isLoading.value ? ( - <> -
- {dataUpdateTime.value !== undefined && ( - + {toolStatus.value !== undefined ? ( + + + {toolStatus.value.lastUpdateTime !== null && ( + + + + + + 最后更新时间: + {getDateTimeWithoutSecond( + parseTime(toolStatus.value.lastUpdateTime), + )} + + + )} + {toolStatus.value.dataUpdateFreq !== null && ( + + + + + + 更新频率:{toolStatus.value.dataUpdateFreq} + + + )} + {toolStatus.value.dataCount !== null && ( + + + + + + 数据量:{toolStatus.value.dataCount} + + )} - {dataCount.value !== undefined && ( - + {toolStatus.value.dataSource !== null && ( + + + + + + 数据来源: + {Object.entries(toolStatus.value.dataSource).map( + ([name, url]) => ( + {name} + ), + )} + + )} -
- {dataSource.value !== undefined && ( -
- 数据来源 - {Object.entries(dataSource.value).map(([name, url]) => ( - - ))} -
+ + {showDowngradeNotice.value && ( + + + + 服务降级 + + + {toolStatus.value?.reason ?? + "该小工具处于降级状态,其功能、数据准确性和性能可能受到影响,请您留意。"} + + + )} }> - {!isLoading.value && } + {toolStatus.value !== undefined && } - + ) : ( )} - null} + -
- - {reason.value ?? + + + {toolStatus.value?.reason ?? "该小工具暂时不可用,请稍后再尝试访问,并留意相关公告。"} - - setLocation("/")}> + + setLocation("/")} fullWidth> 返回首页 - -
-
+ + + ); } diff --git a/frontend/src/components/charts/SSWordcloud.tsx b/frontend/src/components/charts/SSWordcloud.tsx index 0bb7dfe..1896100 100644 --- a/frontend/src/components/charts/SSWordcloud.tsx +++ b/frontend/src/components/charts/SSWordcloud.tsx @@ -1,5 +1,5 @@ +import { HorizontalScoll } from "@sscreator/ui"; import WordCloud from "react-d3-cloud"; -import SSScolllable from "../SSScollable"; interface Props { data: { text: string; value: number }[]; @@ -7,7 +7,7 @@ interface Props { export default function SSWordcloud({ data }: Props) { return ( - +
-
+ ); } diff --git a/frontend/src/models/ArticleWordcloudGenerator/WordFreqData.ts b/frontend/src/models/ArticleWordcloudGenerator/WordFreqData.ts deleted file mode 100644 index 11ca202..0000000 --- a/frontend/src/models/ArticleWordcloudGenerator/WordFreqData.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface WordFreqDataRequest { - article_url: string; -} - -export type WordFreqDataItem = { [word: string]: number }; - -export interface WordFreqDataResponse { - title: string; - word_freq: WordFreqDataItem; -} diff --git a/frontend/src/models/JPEPFTNMacket.ts b/frontend/src/models/JPEPFTNMacket.ts new file mode 100644 index 0000000..d2da4be --- /dev/null +++ b/frontend/src/models/JPEPFTNMacket.ts @@ -0,0 +1,45 @@ +export interface GetRulesResponse { + isOpen: boolean; + buyOrderMinimumPrice: number; + sellOrderMinimumPrice: number; + FTNOrderFee: number; + goodsOrderFee: number; +} + +export interface GetCurrentPriceResponse { + buyPrice: number; + sellPrice: number; +} +export interface GetCurrentAmountResponse { + buyAmount: number; + sellAmount: number; +} + +export interface GetPriceHistoryRequest { + type: "buy" | "sell"; + range: "24h" | "7d" | "15d" | "30d"; + resolution: "5m" | "1h" | "1d"; +} + +export interface GetPriceHistoryResponse { + history: Record; +} + +export interface GetAmountHistoryRequest { + type: "buy" | "sell"; + range: "24h" | "7d" | "15d" | "30d"; + resolution: "5m" | "1h" | "1d"; +} + +export interface GetAmountHistoryResponse { + history: Record; +} + +export interface GetCurrentAmountDistributionRequest { + type: "buy" | "sell"; + limit?: number; +} + +export interface GetCurrentAmountDistributionResponse { + amountDistribution: Record; +} diff --git a/frontend/src/models/JPEPFTNMacketAnalyzer/JPEPRules.ts b/frontend/src/models/JPEPFTNMacketAnalyzer/JPEPRules.ts deleted file mode 100644 index 269d35f..0000000 --- a/frontend/src/models/JPEPFTNMacketAnalyzer/JPEPRules.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface JPEPRulesResponse { - buy_order_minimum_price: number; - sell_order_minimum_price: number; - trade_fee_percent: number; -} diff --git a/frontend/src/models/JPEPFTNMacketAnalyzer/PerPriceAmountData.tsx b/frontend/src/models/JPEPFTNMacketAnalyzer/PerPriceAmountData.tsx deleted file mode 100644 index 9aebcff..0000000 --- a/frontend/src/models/JPEPFTNMacketAnalyzer/PerPriceAmountData.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export interface PerPriceAmountDataRequest { - trade_type: "buy" | "sell"; -} - -export interface PerPriceAmountDataResponse { - per_price_amount_data: Record; -} diff --git a/frontend/src/models/JPEPFTNMacketAnalyzer/PoolAmount.ts b/frontend/src/models/JPEPFTNMacketAnalyzer/PoolAmount.ts deleted file mode 100644 index aa74b10..0000000 --- a/frontend/src/models/JPEPFTNMacketAnalyzer/PoolAmount.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface PoolAmountResponse { - buy_amount: number; - sell_amount: number; -} diff --git a/frontend/src/models/JPEPFTNMacketAnalyzer/PoolAmountTrendData.ts b/frontend/src/models/JPEPFTNMacketAnalyzer/PoolAmountTrendData.ts deleted file mode 100644 index cca0275..0000000 --- a/frontend/src/models/JPEPFTNMacketAnalyzer/PoolAmountTrendData.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { TimeRange } from "./base"; - -export interface PoolAmountTrendDataRequest { - time_range: TimeRange; -} - -export type PoolAmountTrendDataItem = { [time: string]: number }; - -export interface PoolAmountTrendDataResponse { - buy_trend: PoolAmountTrendDataItem; - sell_trend: PoolAmountTrendDataItem; -} diff --git a/frontend/src/models/JPEPFTNMacketAnalyzer/Price.ts b/frontend/src/models/JPEPFTNMacketAnalyzer/Price.ts deleted file mode 100644 index 24468df..0000000 --- a/frontend/src/models/JPEPFTNMacketAnalyzer/Price.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface PriceResponse { - buy_price: number | null; - sell_price: number | null; -} diff --git a/frontend/src/models/JPEPFTNMacketAnalyzer/PriceTrendData.ts b/frontend/src/models/JPEPFTNMacketAnalyzer/PriceTrendData.ts deleted file mode 100644 index cc6f57c..0000000 --- a/frontend/src/models/JPEPFTNMacketAnalyzer/PriceTrendData.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { TimeRange } from "./base"; - -export interface PriceTrendDataRequest { - time_range: TimeRange; -} - -export type PriceTrendDataItem = { [time: string]: number }; - -export interface PriceTrendDataResponse { - buy_trend: PriceTrendDataItem; - sell_trend: PriceTrendDataItem; -} diff --git a/frontend/src/models/JPEPFTNMacketAnalyzer/base.ts b/frontend/src/models/JPEPFTNMacketAnalyzer/base.ts deleted file mode 100644 index 28b8abc..0000000 --- a/frontend/src/models/JPEPFTNMacketAnalyzer/base.ts +++ /dev/null @@ -1 +0,0 @@ -export type TimeRange = "6h" | "24h" | "7d" | "15d" | "30d"; diff --git a/frontend/src/models/LPRecommendChecker/CheckResult.ts b/frontend/src/models/LPRecommendChecker/CheckResult.ts deleted file mode 100644 index ad4ae4a..0000000 --- a/frontend/src/models/LPRecommendChecker/CheckResult.ts +++ /dev/null @@ -1,18 +0,0 @@ -export interface CheckRequest { - article_url: string; -} - -export interface CheckItem { - name: string; - item_passed: boolean; - limit_value: number; - operator: string; - actual_value: number; -} - -export interface CheckResponse { - title: string; - release_time: number; - check_passed: boolean; - check_items: CheckItem[]; -} diff --git a/frontend/src/models/LotteryAnalyzer/PerPrizeData.ts b/frontend/src/models/LotteryAnalyzer/PerPrizeData.ts deleted file mode 100644 index d120fba..0000000 --- a/frontend/src/models/LotteryAnalyzer/PerPrizeData.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { TimeRange } from "./base"; - -export interface PerPrizeDataRequest { - time_range: TimeRange; -} - -export interface PerPrizeDataItem { - reward_name: string; - wins_count: number; - winners_count: number; - average_wins_count_per_winner: number; - winning_rate: number; - rarity: number; -} - -export interface PerPrizeDataResponse { - rewards: PerPrizeDataItem[]; -} diff --git a/frontend/src/models/LotteryAnalyzer/RewardWinsCountData.ts b/frontend/src/models/LotteryAnalyzer/RewardWinsCountData.ts deleted file mode 100644 index aa5969f..0000000 --- a/frontend/src/models/LotteryAnalyzer/RewardWinsCountData.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { TimeRange } from "./base"; - -export interface RewardsWinsCountDataRequest { - time_range: TimeRange; -} - -export type RewardsWinsCountDataItem = { [reward_name: string]: number }; - -export interface RewardsWinsCountDataResponse { - wins_count_data: RewardsWinsCountDataItem; -} diff --git a/frontend/src/models/LotteryAnalyzer/RewardWinsTrendData.ts b/frontend/src/models/LotteryAnalyzer/RewardWinsTrendData.ts deleted file mode 100644 index 833f285..0000000 --- a/frontend/src/models/LotteryAnalyzer/RewardWinsTrendData.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { TimeRangeWithoutAll } from "./base"; - -export interface RewardWinsTrendDataRequest { - time_range: TimeRangeWithoutAll; -} - -export type RewardWinsTrendDataItem = { [time: string]: number }; - -export interface RewardsWinsTrendDataResponse { - trend_data: RewardWinsTrendDataItem; -} diff --git a/frontend/src/models/LotteryAnalyzer/base.ts b/frontend/src/models/LotteryAnalyzer/base.ts deleted file mode 100644 index ae3ba61..0000000 --- a/frontend/src/models/LotteryAnalyzer/base.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type TimeRange = "1d" | "7d" | "30d" | "all"; - -export type TimeRangeWithoutAll = Exclude; diff --git a/frontend/src/models/LotteryRewardRecordViewer/LotteryRecords.ts b/frontend/src/models/LotteryRewardRecordViewer/LotteryRecords.ts deleted file mode 100644 index d220f56..0000000 --- a/frontend/src/models/LotteryRewardRecordViewer/LotteryRecords.ts +++ /dev/null @@ -1,15 +0,0 @@ -export interface LotteryRecordsRequest { - user_url: string; - target_rewards: string[]; - offset: number; -} - -export interface LotteryRecordItem { - time: number; - reward_name: string; -} - -export interface LotteryRecordsResponse { - records: LotteryRecordItem[]; - total: number; -} diff --git a/frontend/src/models/LotteryRewardRecordViewer/Rewards.ts b/frontend/src/models/LotteryRewardRecordViewer/Rewards.ts deleted file mode 100644 index 90df989..0000000 --- a/frontend/src/models/LotteryRewardRecordViewer/Rewards.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface RewardResponse { - rewards: string[]; -} diff --git a/frontend/src/models/OnRankArticleViewer/OnRankRecords.ts b/frontend/src/models/OnRankArticleViewer/OnRankRecords.ts deleted file mode 100644 index 29426c5..0000000 --- a/frontend/src/models/OnRankArticleViewer/OnRankRecords.ts +++ /dev/null @@ -1,31 +0,0 @@ -export interface OnRankRecordsRequest { - user_url?: string; - user_name?: string; - sort_by: "onrank_date" | "ranking"; - sort_order: "asc" | "desc"; - offset: number; -} - -export interface OnRankRecordItem { - date: number; - ranking: number; - title: string; - url: string; - FP_reward_count: number; -} - -export interface OnRankRecordsResponse { - records: OnRankRecordItem[]; -} - -export interface RankingSummaryRequest { - user_url?: string; - user_name?: string; -} - -export interface RankingSummaryResponse { - top10_count: number; - top30_count: number; - top50_count: number; - total: number; -} diff --git a/frontend/src/models/OnRankArticleViewer/SameURLRecordsSummary.ts b/frontend/src/models/OnRankArticleViewer/SameURLRecordsSummary.ts deleted file mode 100644 index 40c94d9..0000000 --- a/frontend/src/models/OnRankArticleViewer/SameURLRecordsSummary.ts +++ /dev/null @@ -1,8 +0,0 @@ -export interface SameURLRecordsSummaryRequest { - user_name: string; -} - -export interface SameURLRecordsSummaryResponse { - records: Record; - user_url?: string; -} diff --git a/frontend/src/models/OnRankArticleViewer/UserNameAutocomplete.ts b/frontend/src/models/OnRankArticleViewer/UserNameAutocomplete.ts deleted file mode 100644 index f49dbda..0000000 --- a/frontend/src/models/OnRankArticleViewer/UserNameAutocomplete.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface UserNameAutocompleteRequest { - name_part: string; -} - -export interface UserNameAutocompleteResponse { - possible_names: string[]; -} diff --git a/frontend/src/models/VIPInfoViewer/VIPInfo.ts b/frontend/src/models/VIPInfoViewer/VIPInfo.ts deleted file mode 100644 index 6d42dea..0000000 --- a/frontend/src/models/VIPInfoViewer/VIPInfo.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface VIPInfoRequest { - user_url: string; -} - -export interface VIPInfoResponse { - name: string; - VIP_type: string; - VIP_expire_time?: number; -} diff --git a/frontend/src/models/articles.ts b/frontend/src/models/articles.ts new file mode 100644 index 0000000..b90e06f --- /dev/null +++ b/frontend/src/models/articles.ts @@ -0,0 +1,11 @@ +export interface GetWordFreqResponse { + title: string; + wordFreq: Record; +} + +export interface GetLPRecommendCheckResponse { + articleTitle: string; + canRecommendNow: boolean; + FPReward: number; + nextCanRecommendDate: number; +} diff --git a/frontend/src/models/base.ts b/frontend/src/models/base.ts deleted file mode 100644 index bce93c0..0000000 --- a/frontend/src/models/base.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface Response { - ok: boolean; - code: number; - message: string; - data: TData; -} diff --git a/frontend/src/models/info.ts b/frontend/src/models/info.ts deleted file mode 100644 index 9ad12af..0000000 --- a/frontend/src/models/info.ts +++ /dev/null @@ -1,18 +0,0 @@ -export enum InfoStatus { - NORMAL = 0, - UNAVALIABLE = 1, - DOWNGRADED = 2, -} - -export interface InfoRequest { - tool_slug: string; -} - -export interface InfoResponse { - status: InfoStatus; - reason?: string; - data_update_time?: number; - data_update_freq_desc?: string; - data_count?: number; - data_source?: { [name: string]: string }; -} diff --git a/frontend/src/models/lottery.ts b/frontend/src/models/lottery.ts new file mode 100644 index 0000000..965a5cb --- /dev/null +++ b/frontend/src/models/lottery.ts @@ -0,0 +1,46 @@ +export interface GetRewardsResponse { + rewards: string[]; +} + +export interface GetRecordsRequest { + offset?: number; + limit?: number; + excluded_awards?: string[]; +} + +export interface GetRecordsItem { + time: number; + rewardName: string; + userName: string; + userUrl: string; +} + +export interface GetRecordsResponse { + records: GetRecordsItem[]; +} + +export interface GetSummaryRewardItem { + rewardName: string; + winsCount: number; + winnersCount: number; + averageWinsCountPerWinner: number; + winningRate: number; + rarity: number; +} + +export interface GetSummaryRequest { + range: "1d" | "7d" | "30d" | "all"; +} + +export interface GetSummaryResponse { + rewards: GetSummaryRewardItem[]; +} + +export interface GetRewardWinsHistoryRequest { + range: "1d" | "30d" | "60d"; + resolution: "1h" | "1d"; +} + +export interface GetRewardWinsHistoryResponse { + history: Record; +} diff --git a/frontend/src/models/responseStruct.ts b/frontend/src/models/responseStruct.ts new file mode 100644 index 0000000..f12b436 --- /dev/null +++ b/frontend/src/models/responseStruct.ts @@ -0,0 +1,6 @@ +export interface ResponseStruct { + ok: boolean; + code: number; + msg: string; + data: TData; +} diff --git a/frontend/src/models/status.ts b/frontend/src/models/status.ts index 682556b..437fc69 100644 --- a/frontend/src/models/status.ts +++ b/frontend/src/models/status.ts @@ -1,5 +1,20 @@ -export interface StatusResponse { +export interface GetResponse { version: string; - downgraded_tools: string[]; - unavaliable_tools: string[]; + downgradedTools: string[]; + unavaliableTools: string[]; +} + +export enum ToolStatusEnum { + NORMAL = "NORMAL", + UNAVALIABLE = "UNAVALIABLE", + DOWNGRADED = "DOWNGRADED", +} + +export interface GetToolStatusResponse { + status: ToolStatusEnum; + reason: string | null; + lastUpdateTime: number | null; + dataUpdateFreq: string | null; + dataCount: number | null; + dataSource: Record | null; } diff --git a/frontend/src/models/users.ts b/frontend/src/models/users.ts new file mode 100644 index 0000000..3a376f2 --- /dev/null +++ b/frontend/src/models/users.ts @@ -0,0 +1,68 @@ +export enum VIPTypeEnum { + BRONZE = "bronze", + SLIVER = "sliver", + GOLD = "goid", + PLATINA = "platina", +} + +export interface GetVIPInfoResponse { + userName: string; + isVIP: boolean; + type: VIPTypeEnum; + expireDate: number; +} + +export interface GetLotteryWinRecordsRequest { + offset?: number; + limit?: number; + excluded_awards?: string[]; +} + +export interface GetLotteryWinRecordItem { + time: number; + rewardName: string; +} + +export interface GetLotteryWinRecordsResponse { + records: GetLotteryWinRecordItem[]; +} + +export interface GetOnArticleRankRecordsRequest { + order_by?: "date" | "ranking"; + order_direction?: "asc" | "desc"; + offset?: number; + limit?: number; +} + +export interface GetOnArticleRankRecordItem { + date: number; + ranking: number; + articleTitle: string; + articleUrl: string; + FPReward: number; +} + +export interface GetOnArticleRankRecordsResponse { + records: GetOnArticleRankRecordItem[]; +} + +export interface GetOnArticleRankSummaryResponse { + top10: number; + top30: number; + top50: number; + total: number; +} + +export interface GetNameAutocompleteRequest { + name_part: string; + limit?: number; +} + +export interface GetNameAutocompleteResponse { + names: string[]; +} + +export interface GetHistoryNamesOnArticleRankSummaryResponse { + historyNamesOnrankSummary: Record; + userUrl: string; +} diff --git a/frontend/src/pages/ArticleWordcloudGenerator.tsx b/frontend/src/pages/ArticleWordcloudGenerator.tsx index c8bfd20..509c82a 100644 --- a/frontend/src/pages/ArticleWordcloudGenerator.tsx +++ b/frontend/src/pages/ArticleWordcloudGenerator.tsx @@ -1,49 +1,47 @@ -import { batch, signal } from "@preact/signals"; -import SSButton from "../components/SSButton"; -import SSExternalLink from "../components/SSExternalLink"; -import SSText from "../components/SSText"; -import SSTextInput from "../components/SSTextInput"; +import { computed, signal } from "@preact/signals"; +import { + Column, + ExternalLink, + PrimaryButton, + Text, + TextInput, +} from "@sscreator/ui"; import SSWordcloud from "../components/charts/SSWordcloud"; -import type { - WordFreqDataItem, - WordFreqDataRequest, - WordFreqDataResponse, -} from "../models/ArticleWordcloudGenerator/WordFreqData"; -import { commonAPIErrorHandler } from "../utils/errorHandler"; -import { fetchData } from "../utils/fetchData"; +import type { GetWordFreqResponse } from "../models/articles"; +import { sendRequest } from "../utils/sendRequest"; import { toastWarning } from "../utils/toastHelper"; -const articleURL = signal(""); +const articleUrl = signal(""); +const articleSlug = computed(() => { + const matchResult = articleUrl.value!.match( + "https://www.jianshu.com/p/(\\w{12})", + ); + if (matchResult !== null && matchResult[1] !== undefined) { + return matchResult[1]; + } + return undefined; +}); const isLoading = signal(false); -const articleTitle = signal(undefined); -const wordFreqData = signal(undefined); +const result = signal(undefined); function handleGenerate() { - if (articleURL.value.length === 0) { - toastWarning("请输入文章链接"); + if (articleSlug.value === undefined) { + toastWarning({ message: "请输入有效的文章链接" }); return; } - fetchData( - "POST", - "/tools/article_wordcloud_generator/word_freq_data", - { - article_url: articleURL.value, - }, - (data) => - batch(() => { - articleTitle.value = data.title; - wordFreqData.value = data.word_freq; - }), - commonAPIErrorHandler, + sendRequest, GetWordFreqResponse>({ + method: "GET", + endpoint: `/v1/articles/${articleSlug.value}/word-freq`, + onSuccess: ({ data }) => (result.value = data), isLoading, - ); + }); } function Wordcloud() { return ( ({ + data={Object.entries(result.value!.wordFreq).map(([text, value]) => ({ text, value, }))} @@ -53,31 +51,27 @@ function Wordcloud() { export default function ArticleWordcloudGenerator() { return ( -
- - + + + 查询 - + - {articleTitle.value !== undefined && articleURL.value !== undefined && ( - - 文章: - - + {result.value !== undefined && ( + <> + + 文章标题: + + {result.value.title} + + + + )} - - {wordFreqData.value !== undefined && } -
+ ); } diff --git a/frontend/src/pages/JPEPFTNMacketAnalyzer.tsx b/frontend/src/pages/JPEPFTNMacketAnalyzer.tsx index 0264f02..711615c 100644 --- a/frontend/src/pages/JPEPFTNMacketAnalyzer.tsx +++ b/frontend/src/pages/JPEPFTNMacketAnalyzer.tsx @@ -1,313 +1,417 @@ import { batch, computed, signal } from "@preact/signals"; +import { Column, FieldBlock, Row, Switch, Text } from "@sscreator/ui"; import { useEffect } from "preact/hooks"; -import SSSegmentedControl from "../components/SSSegmentedControl"; -import SSStat from "../components/SSStat"; -import SSText from "../components/SSText"; import SSBarChart from "../components/charts/SSBarChart"; import SSLineChart from "../components/charts/SSLineChart"; -import type { JPEPRulesResponse } from "../models/JPEPFTNMacketAnalyzer/JPEPRules"; import type { - PerPriceAmountDataRequest, - PerPriceAmountDataResponse, -} from "../models/JPEPFTNMacketAnalyzer/PerPriceAmountData"; -import type { PoolAmountResponse } from "../models/JPEPFTNMacketAnalyzer/PoolAmount"; -import type { - PoolAmountTrendDataItem, - PoolAmountTrendDataRequest, - PoolAmountTrendDataResponse, -} from "../models/JPEPFTNMacketAnalyzer/PoolAmountTrendData"; -import type { PriceResponse } from "../models/JPEPFTNMacketAnalyzer/Price"; -import type { - PriceTrendDataItem, - PriceTrendDataRequest, - PriceTrendDataResponse, -} from "../models/JPEPFTNMacketAnalyzer/PriceTrendData"; -import type { TimeRange } from "../models/JPEPFTNMacketAnalyzer/base"; -import { commonAPIErrorHandler } from "../utils/errorHandler"; -import { fetchData } from "../utils/fetchData"; + GetCurrentAmountDistributionRequest, + GetCurrentAmountDistributionResponse, + GetCurrentAmountResponse, + GetCurrentPriceResponse, + GetPriceHistoryRequest, + GetPriceHistoryResponse, + GetRulesResponse, +} from "../models/JPEPFTNMacket"; +import { roundFloat } from "../utils/numberHelper"; +import { sendRequest } from "../utils/sendRequest"; + +const TimeRangeSwitchData = [ + { label: "24 小时", value: "24h" }, + { label: "7 天", value: "7d" }, + { label: "15 天", value: "15d" }, + { label: "30 天", value: "30d" }, +]; -const TimeRangeSCData = { - "6 小时": "6h", - "24 小时": "24h", - "7 天": "7d", - "15 天": "15d", - "30 天": "30d", -}; +type TimeRange = "24h" | "7d" | "15d" | "30d"; -const tradeFeePercent = signal(undefined); -const buyPrice = signal(undefined); -const sellPrice = signal(undefined); -const buyOrderMinimumPrice = signal(undefined); -const sellOrderMinimumPrice = signal(undefined); -const buyPoolAmount = signal(undefined); -const sellPoolAmount = signal(undefined); +const currentPrice = signal(undefined); +const currentAmount = signal(undefined); const totalPoolAmount = computed(() => - buyPoolAmount.value !== undefined && sellPoolAmount.value !== undefined - ? buyPoolAmount.value + sellPoolAmount.value + currentAmount.value !== undefined + ? currentAmount.value.buyAmount + currentAmount.value.sellAmount : undefined, ); +const JPEPRules = signal(undefined); const perPriceAmountDataTradeType = signal<"buy" | "sell">("buy"); -const perPriceAmountData = signal | undefined>( +const amountDistribution = signal | undefined>( + undefined, +); +const priceTrendLineTimeRange = signal("24h"); +const buyPriceTrendData = signal | undefined>(undefined); +const sellPriceTrendData = signal | undefined>( undefined, ); -const priceTrendLineTimeRange = signal("6h"); -const buyPriceTrendData = signal(undefined); -const sellPriceTrendData = signal(undefined); -const poolAmountTrendLineTimeRange = signal("6h"); -const buyPoolAmountTrendData = signal( +const poolAmountTrendLineTimeRange = signal("24h"); +const buyPoolAmountTrendData = signal | undefined>( undefined, ); -const sellPoolAmountTrendData = signal( +const sellPoolAmountTrendData = signal | undefined>( undefined, ); -function handleJPEPRulesFetch() { - fetchData, JPEPRulesResponse>( - "GET", - "/tools/JPEP_FTN_market_analyzer/JPEP_rules", - {}, - (data) => - batch(() => { - tradeFeePercent.value = data.trade_fee_percent; - buyOrderMinimumPrice.value = data.buy_order_minimum_price; - sellOrderMinimumPrice.value = data.sell_order_minimum_price; - }), - commonAPIErrorHandler, - ); +function handleRulesFetch() { + sendRequest, GetRulesResponse>({ + method: "GET", + endpoint: "/v1/jpep/ftn-macket/rules", + onSuccess: ({ data }) => (JPEPRules.value = data), + }); } -function handlePriceFetch() { - fetchData, PriceResponse>( - "GET", - "/tools/JPEP_FTN_market_analyzer/price", - {}, - (data) => - batch(() => { - buyPrice.value = data.buy_price; - sellPrice.value = data.sell_price; - }), - commonAPIErrorHandler, - ); +function handleCurrentPriceFetch() { + sendRequest, GetCurrentPriceResponse>({ + method: "GET", + endpoint: "/v1/jpep/ftn-macket/current-price", + onSuccess: ({ data }) => (currentPrice.value = data), + }); } -function handlePoolAmountFetch() { - fetchData, PoolAmountResponse>( - "GET", - "/tools/JPEP_FTN_market_analyzer/pool_amount", - {}, - (data) => - batch(() => { - buyPoolAmount.value = data.buy_amount; - sellPoolAmount.value = data.sell_amount; - }), - commonAPIErrorHandler, - ); +function handleCurrentAmountFetch() { + sendRequest, GetCurrentAmountResponse>({ + method: "GET", + endpoint: "/v1/jpep/ftn-macket/current-amount", + onSuccess: ({ data }) => (currentAmount.value = data), + }); } -function handlePerPriceAmountDataFetch() { - fetchData( - "GET", - "/tools/JPEP_FTN_market_analyzer/per_price_amount_data", - { - trade_type: perPriceAmountDataTradeType.value, +function handleCurrentAmountDistributionFetch() { + sendRequest< + GetCurrentAmountDistributionRequest, + GetCurrentAmountDistributionResponse + >({ + method: "GET", + endpoint: "/v1/jpep/ftn-macket/current-amount-distribution", + queryArgs: { + type: perPriceAmountDataTradeType.value, }, - (data) => (perPriceAmountData.value = data.per_price_amount_data), - commonAPIErrorHandler, - ); + onSuccess: ({ data }) => + (amountDistribution.value = data.amountDistribution), + }); } -function handlePriceTrendDataFetch() { - fetchData( - "GET", - "/tools/JPEP_FTN_market_analyzer/price_trend_data", - { - time_range: priceTrendLineTimeRange.value, +function handlePriceHistoryFetch() { + sendRequest({ + method: "GET", + endpoint: "/v1/jpep/ftn-macket/price-history", + queryArgs: { + type: "buy", + range: priceTrendLineTimeRange.value, + resolution: priceTrendLineTimeRange.value === "24h" ? "5m" : "1d", }, - (data) => - batch(() => { - buyPriceTrendData.value = data.buy_trend; - sellPriceTrendData.value = data.sell_trend; - }), - commonAPIErrorHandler, - ); + onSuccess: ({ data }) => (buyPriceTrendData.value = data.history), + }); + + sendRequest({ + method: "GET", + endpoint: "/v1/jpep/ftn-macket/price-history", + queryArgs: { + type: "sell", + range: priceTrendLineTimeRange.value, + resolution: priceTrendLineTimeRange.value === "24h" ? "5m" : "1d", + }, + onSuccess: ({ data }) => (sellPriceTrendData.value = data.history), + }); } -function handlePoolAmountTrendDataFetch() { - fetchData( - "GET", - "/tools/JPEP_FTN_market_analyzer/pool_amount_trend_data", - { - time_range: poolAmountTrendLineTimeRange.value, +function handleAmountHistoryDataFetch() { + sendRequest({ + method: "GET", + endpoint: "/v1/jpep/ftn-macket/amount-history", + queryArgs: { + type: "buy", + range: poolAmountTrendLineTimeRange.value, + resolution: poolAmountTrendLineTimeRange.value === "24h" ? "5m" : "1d", + }, + onSuccess: ({ data }) => (buyPoolAmountTrendData.value = data.history), + }); + + sendRequest({ + method: "GET", + endpoint: "/v1/jpep/ftn-macket/amount-history", + queryArgs: { + type: "sell", + range: poolAmountTrendLineTimeRange.value, + resolution: poolAmountTrendLineTimeRange.value === "24h" ? "5m" : "1d", }, - (data) => - batch(() => { - buyPoolAmountTrendData.value = data.buy_trend; - sellPoolAmountTrendData.value = data.sell_trend; - }), - commonAPIErrorHandler, + onSuccess: ({ data }) => (sellPoolAmountTrendData.value = data.history), + }); +} + +function RulesBlock() { + return ( + <> + + {JPEPRules.value !== undefined ? ( + + {JPEPRules.value.isOpen ? "开放中" : "休市中"} + + ) : ( + 获取中... + )} + + + + + {JPEPRules.value !== undefined + ? `${JPEPRules.value.FTNOrderFee * 100}%` + : "获取中..."} + + + + + {JPEPRules.value !== undefined + ? `${JPEPRules.value.goodsOrderFee * 100}%` + : "获取中..."} + + + + + ); +} + +function CurrentPriceBlock() { + return ( + <> + + 实时贝价 + + + + + {currentPrice.value?.buyPrice ?? "获取中..."} + + + 限价: + {JPEPRules.value !== undefined + ? JPEPRules.value.buyOrderMinimumPrice + : "获取中..."} + + + + + {currentPrice.value?.sellPrice ?? "获取中..."} + + + 限价: + {JPEPRules.value !== undefined + ? JPEPRules.value.sellOrderMinimumPrice + : "获取中..."} + + + + + ); +} + +function CurrentAmountBlock() { + return ( + <> + + 实时挂单量 + + + + + {currentAmount.value?.buyAmount ?? "获取中..."} + + + {currentAmount.value !== undefined + ? `占比 ${( + (currentAmount.value.buyAmount / totalPoolAmount.value!) * + 100 + ).toFixed(2)}%` + : "获取中..."} + + + + + {currentAmount.value?.sellAmount ?? "获取中..."} + + + {currentAmount.value !== undefined + ? `占比 ${( + (currentAmount.value.sellAmount / totalPoolAmount.value!) * + 100 + ).toFixed(2)}%` + : "获取中..."} + + + + ); } -function PerPriceAmountDataBar() { +function AmountDistributionChartBlock() { return ( - + + 实时挂单量分布 + + + + yAxis: { + type: "value", + }, + series: [ + { + type: "bar", + data: + amountDistribution.value === undefined + ? undefined + : Object.entries(amountDistribution.value), + }, + ], + tooltip: { + show: true, + trigger: "axis", + }, + }} + /> + ); } -function PriceTrendLine() { +function PriceHistoryChartBlock() { return ( - + + 贝价趋势 + + + roundFloat(value.min - 0.01, 2), + max: (value) => roundFloat(value.max + 0.01, 2), }, - { - type: "line", - name: "推荐参考价", - data: - buyPriceTrendData.value === undefined - ? undefined - : new Array(Object.keys(buyPriceTrendData.value).length).fill( - 0.1, - ), - showSymbol: false, - lineStyle: { - type: "dashed", + series: [ + { + type: "line", + name: "买贝(左侧)", + smooth: true, + data: + buyPriceTrendData.value === undefined + ? undefined + : Object.entries(buyPriceTrendData.value), + color: "#3b82f6", + }, + { + type: "line", + name: "卖贝(右侧)", + smooth: true, + data: + sellPriceTrendData.value === undefined + ? undefined + : Object.entries(sellPriceTrendData.value), + color: "#a855f7", }, + ], + legend: { + show: true, }, - ], - legend: { - show: true, - }, - tooltip: { - show: true, - trigger: "axis", - }, - }} - /> + tooltip: { + show: true, + trigger: "axis", + }, + }} + /> + ); } -function PoolAmountTrendLine() { +function AmountHistoryChartBlock() { return ( - + + 挂单量趋势 + + + + tooltip: { + show: true, + trigger: "axis", + }, + }} + /> + ); } export default function JPEPFTNMarketAnalyzer() { useEffect(() => { - handleJPEPRulesFetch(); - handlePriceFetch(); - handlePoolAmountFetch(); - handlePerPriceAmountDataFetch(); - handlePriceTrendDataFetch(); - handlePoolAmountTrendDataFetch(); + handleRulesFetch(); + handleCurrentPriceFetch(); + handleCurrentAmountFetch(); + handleCurrentAmountDistributionFetch(); + handlePriceHistoryFetch(); + handleAmountHistoryDataFetch(); }, []); useEffect(() => { - perPriceAmountData.value = undefined; - handlePerPriceAmountDataFetch(); + amountDistribution.value = undefined; + handleCurrentAmountDistributionFetch(); }, [perPriceAmountDataTradeType.value]); useEffect(() => { @@ -315,7 +419,7 @@ export default function JPEPFTNMarketAnalyzer() { buyPriceTrendData.value = undefined; sellPriceTrendData.value = undefined; }); - handlePriceTrendDataFetch(); + handlePriceHistoryFetch(); }, [priceTrendLineTimeRange.value]); useEffect(() => { @@ -323,96 +427,18 @@ export default function JPEPFTNMarketAnalyzer() { buyPoolAmountTrendData.value = undefined; sellPoolAmountTrendData.value = undefined; }); - handlePoolAmountTrendDataFetch(); + handleAmountHistoryDataFetch(); }, [poolAmountTrendLineTimeRange.value]); return ( -
- - - 实时贝价 - -
- - -
- - 实时挂单量 - -
- - -
+ + + + - - 实时挂单量分布 - - - - - - 贝价趋势 - - - - - - 挂单量趋势 - - - -
+ + + + ); } diff --git a/frontend/src/pages/LPRecommendChecker.tsx b/frontend/src/pages/LPRecommendChecker.tsx index bda1c52..3bffce3 100644 --- a/frontend/src/pages/LPRecommendChecker.tsx +++ b/frontend/src/pages/LPRecommendChecker.tsx @@ -1,114 +1,88 @@ -import { batch, signal } from "@preact/signals"; -import type { Dayjs } from "dayjs"; -import SSBadge from "../components/SSBadge"; -import SSButton from "../components/SSButton"; -import SSCenter from "../components/SSCenter"; -import SSExternalLink from "../components/SSExternalLink"; -import SSTable from "../components/SSTable"; -import SSText from "../components/SSText"; -import SSTextInput from "../components/SSTextInput"; -import type { - CheckItem, - CheckRequest, - CheckResponse, -} from "../models/LPRecommendChecker/CheckResult"; -import { commonAPIErrorHandler } from "../utils/errorHandler"; -import { fetchData } from "../utils/fetchData"; +import { computed, signal } from "@preact/signals"; import { - getDatetime, - getHumanReadableTimeDelta, - parseTime, -} from "../utils/timeHelper"; + Column, + ExternalLink, + PrimaryButton, + Text, + TextInput, +} from "@sscreator/ui"; +import type { GetLPRecommendCheckResponse } from "../models/articles"; +import { sendRequest } from "../utils/sendRequest"; +import { getDatetime, parseTime } from "../utils/timeHelper"; import { toastWarning } from "../utils/toastHelper"; -const articleURL = signal(""); +const articleUrl = signal(""); +const articleSlug = computed(() => { + const matchResult = articleUrl.value!.match( + "https://www.jianshu.com/p/(\\w{12})", + ); + if (matchResult !== null && matchResult[1] !== undefined) { + return matchResult[1]; + } + return undefined; +}); const isLoading = signal(false); -const articleTitle = signal(undefined); -const releaseTime = signal(undefined); -const checkPassed = signal(undefined); -const checkItems = signal(undefined); +const result = signal(undefined); function handleCheck() { - if (articleURL.value.length === 0) { - toastWarning("请输入文章链接"); + if (articleSlug.value === undefined) { + toastWarning({ message: "请输入有效的文章链接" }); return; } - fetchData( - "POST", - "/tools/LP_recommend_checker/check", - { - article_url: articleURL.value, - }, - (data) => - batch(() => { - articleTitle.value = data.title; - releaseTime.value = parseTime(data.release_time); - checkPassed.value = data.check_passed; - checkItems.value = data.check_items; - }), - commonAPIErrorHandler, + sendRequest, GetLPRecommendCheckResponse>({ + method: "GET", + endpoint: `/v1/articles/${articleSlug.value}/lp-recommend-check`, + onSuccess: ({ data }) => (result.value = data), isLoading, - ); + }); } export default function LPRecommendChecker() { return ( -
- - - 查询 - + + + + 检测 + - {articleTitle.value !== undefined && articleURL.value !== undefined && ( - - 文章标题: - - - )} - {releaseTime.value !== undefined && ( - {`发布于 ${getDatetime( - releaseTime.value!, - )}(${getHumanReadableTimeDelta(releaseTime.value!)})`} - )} - {checkPassed.value !== undefined && ( - - {checkPassed.value ? "符合推荐标准" : "不符合推荐标准"} - - )} - {checkItems.value !== undefined && ( - ({ - 项目: {item.name}, - 检测结果: ( - - - {item.item_passed ? "符合" : "不符合"} - - - ), - 限制值: ( - - {item.operator} {item.limit_value} - - ), - 实际值: {item.actual_value}, - }))} - tableItemKey="name" - /> + {result.value !== undefined && ( + <> + + {result.value.canRecommendNow ? "可推荐" : "不可推荐"} + + + 文章: + + {result.value.articleTitle} + + + + 获钻量: + = 35 ? "text-red-500" : undefined} + bold + inline + > + {result.value.FPReward} + + + + 作者下次可推时间: + + {result.value.nextCanRecommendDate + ? getDatetime(parseTime(result.value.nextCanRecommendDate)) + : "作者未上过榜"} + + + )} -
+ ); } diff --git a/frontend/src/pages/LotteryAnalyzer.tsx b/frontend/src/pages/LotteryAnalyzer.tsx index 0152b06..ba2a167 100644 --- a/frontend/src/pages/LotteryAnalyzer.tsx +++ b/frontend/src/pages/LotteryAnalyzer.tsx @@ -1,102 +1,93 @@ import { signal } from "@preact/signals"; +import { + Column, + ExternalLink, + LoadingArea, + Row, + Switch, + Text, + Tooltip, +} from "@sscreator/ui"; import type { ComponentChildren } from "preact"; import { useEffect } from "preact/hooks"; -import SSSegmentedControl from "../components/SSSegmentedControl"; -import SSSkeleton from "../components/SSSkeleton"; import SSTable from "../components/SSTable"; -import SSText from "../components/SSText"; -import SSTooltip from "../components/SSTooltip"; import SSLineChart from "../components/charts/SSLineChart"; -import SSPieChart from "../components/charts/SSPieChart"; import type { - PerPrizeDataItem, - PerPrizeDataRequest, - PerPrizeDataResponse, -} from "../models/LotteryAnalyzer/PerPrizeData"; -import type { - RewardsWinsCountDataItem, - RewardsWinsCountDataRequest, - RewardsWinsCountDataResponse, -} from "../models/LotteryAnalyzer/RewardWinsCountData"; -import type { - RewardWinsTrendDataItem, - RewardWinsTrendDataRequest, - RewardsWinsTrendDataResponse, -} from "../models/LotteryAnalyzer/RewardWinsTrendData"; -import type { - TimeRange, - TimeRangeWithoutAll, -} from "../models/LotteryAnalyzer/base"; -import { commonAPIErrorHandler } from "../utils/errorHandler"; -import { fetchData } from "../utils/fetchData"; -import { RoundFloat } from "../utils/numberHelper"; + GetRecordsItem, + GetRecordsRequest, + GetRecordsResponse, + GetRewardWinsHistoryRequest, + GetRewardWinsHistoryResponse, + GetSummaryRequest, + GetSummaryResponse, + GetSummaryRewardItem, +} from "../models/lottery"; +import { roundFloat } from "../utils/numberHelper"; +import { sendRequest } from "../utils/sendRequest"; +import { parseTime } from "../utils/timeHelper"; -const timeRangeSCData = { - "1 天": "1d", - "7 天": "7d", - "30 天": "30d", - 全部: "all", -}; -const timeRangeWithoutAllSCData = { - "1 天": "1d", - "7 天": "7d", - "30 天": "30d", -}; +const summaryTimeRangeSwitchData = [ + { label: "1 天", value: "1d" }, + { label: "7 天", value: "7d" }, + { label: "30 天", value: "30d" }, + { label: "全部", value: "all" }, +]; +const rewardWinsHistoryTimeRangeSwitchData = [ + { label: "1 天", value: "1d" }, + { label: "30 天", value: "30d" }, + { label: "60 天", value: "60d" }, +]; -const perPrizeAnalyzeTimeRange = signal("1d"); -const perPrizeAnalyzeData = signal(undefined); -const rewardWinsCountPieTimeRange = signal("1d"); -const rewardWinsCountData = signal( - undefined, -); -const rewardWinsTrendLineTimeRange = signal("1d"); -const rewardWinsTrendData = signal( +type SummaryTimeRangeType = "1d" | "7d" | "30d" | "all"; +type RewardWinsHistoryTimeRangeType = "1d" | "30d" | "60d"; + +const summaryTimeRange = signal("1d"); +const summaryResult = signal(undefined); +const rewardWinsHistoryTimeRange = signal("1d"); +const rewardWinsHistoryResult = signal | undefined>( undefined, ); +const recentRecords = signal(undefined); -function handlePerPrizeAnalayzeDataFetch() { - fetchData( - "GET", - "/tools/lottery_analyzer/per_prize_data", - { - time_range: perPrizeAnalyzeTimeRange.value, +function handleSummaryFetch() { + sendRequest({ + method: "GET", + endpoint: "/v1/lottery/summary", + queryArgs: { + range: summaryTimeRange.value, }, - (data) => (perPrizeAnalyzeData.value = data.rewards), - commonAPIErrorHandler, - ); + onSuccess: ({ data }) => (summaryResult.value = data.rewards), + }); } -function handleRewardWinsCountDataFetch() { - fetchData( - "GET", - "/tools/lottery_analyzer/reward_wins_count_data", - { - time_range: rewardWinsCountPieTimeRange.value, +function handleRewardWinsHistoryFetch() { + sendRequest({ + method: "GET", + endpoint: "/v1/lottery/reward-wins-history", + queryArgs: { + range: rewardWinsHistoryTimeRange.value, + resolution: rewardWinsHistoryTimeRange.value === "1d" ? "1h" : "1d", }, - (data) => (rewardWinsCountData.value = data.wins_count_data), - commonAPIErrorHandler, - ); + onSuccess: ({ data }) => (rewardWinsHistoryResult.value = data.history), + }); } -function handleRewardWinsTrendDataFetch() { - fetchData( - "GET", - "/tools/lottery_analyzer/reward_wins_trend_data", - { - time_range: rewardWinsTrendLineTimeRange.value, +function handleRecentRecordsFetch() { + sendRequest({ + method: "GET", + endpoint: "/v1/lottery/records", + queryArgs: { + limit: 5, + excluded_awards: ["收益加成卡100"], }, - (data) => (rewardWinsTrendData.value = data.trend_data), - commonAPIErrorHandler, - ); + onSuccess: ({ data }) => (recentRecords.value = data.records), + }); } function PerPrizeAnalyzeTable() { - const totalWins = perPrizeAnalyzeData.value!.reduce( - (a, b) => a + b.wins_count, - 0, - ); - const totalWinners = perPrizeAnalyzeData.value!.reduce( - (a, b) => a + b.winners_count, + const totalWins = summaryResult.value!.reduce((a, b) => a + b.winsCount, 0); + const totalWinners = summaryResult.value!.reduce( + (a, b) => a + b.winnersCount, 0, ); const totalAvagaeWinsCountPerWinner = totalWins / totalWinners; @@ -104,54 +95,52 @@ function PerPrizeAnalyzeTable() { return ( >((item) => ({ - 奖品名称: {item.reward_name}, - 中奖次数: {item.wins_count}, - 中奖人数: {item.winners_count}, + 奖品名称: {item.rewardName}, + 中奖次数: {item.winsCount}, + 中奖人数: {item.winnersCount}, 平均每人中奖次数: ( - - {item.wins_count !== 0 - ? item.average_wins_count_per_winner - : "---"} - + + {item.winsCount !== 0 ? item.averageWinsCountPerWinner : "---"} + ), 中奖率: ( - - {item.wins_count !== 0 - ? `${RoundFloat(item.winning_rate * 100, 2)}%` + + {item.winsCount !== 0 + ? `${roundFloat(item.winningRate * 100, 2)}%` : "---"} - + ), 稀有度: ( - - {item.wins_count !== 0 ? item.rarity : "---"} - + {item.winsCount !== 0 ? item.rarity : "---"} ), })) .concat( - perPrizeAnalyzeData.value!.length !== 0 + summaryResult.value!.length !== 0 ? [ { 奖品名称: ( - + 总计 - + ), 中奖次数: ( - + {totalWins} - + ), 中奖人数: ( - + {totalWinners} - + ), 平均每人中奖次数: ( - - {RoundFloat(totalAvagaeWinsCountPerWinner, 3)} - + + {totalWins !== 0 + ? roundFloat(totalAvagaeWinsCountPerWinner, 3) + : "---"} + ), 中奖率: undefined, 稀有度: undefined, @@ -164,129 +153,113 @@ function PerPrizeAnalyzeTable() { ); } -function RewardWinsCountPie() { +function RecordItem({ data }: { data: GetRecordsItem }) { return ( - ({ name, value }), - ), - }, - ], - legend: { - show: true, - }, - }} - /> +
+ + + {data.userName} + {parseTime(data.time).format("MM-DD HH:mm")} + + + {data.rewardName} + + +
); } -function RewardWinsTrendLine() { +function RecentRecordsBlock() { return ( - + + 近期大奖 + + + + {recentRecords.value !== undefined && + recentRecords.value.map((item) => )} + + + + ); +} + +function RewardWinsHistoryBlock() { + return ( + <> + + 中奖次数趋势 + + + + yAxis: { + type: "value", + }, + series: [ + { + type: "line", + smooth: true, + data: + rewardWinsHistoryResult.value === undefined + ? undefined + : Object.entries(rewardWinsHistoryResult.value), + }, + ], + tooltip: { + show: true, + trigger: "axis", + }, + }} + /> + ); } export default function LotteryAnalyzer() { useEffect(() => { - handlePerPrizeAnalayzeDataFetch(); - handleRewardWinsCountDataFetch(); - handleRewardWinsTrendDataFetch(); + handleSummaryFetch(); + handleRecentRecordsFetch(); + handleRewardWinsHistoryFetch(); }, []); - useEffect( - () => handlePerPrizeAnalayzeDataFetch(), - [perPrizeAnalyzeTimeRange.value], - ); - - useEffect(() => { - rewardWinsCountData.value = undefined; - handleRewardWinsCountDataFetch(); - }, [rewardWinsCountPieTimeRange.value]); + useEffect(() => handleSummaryFetch(), [summaryTimeRange.value]); useEffect(() => { - rewardWinsTrendData.value = undefined; - handleRewardWinsTrendDataFetch(); - }, [rewardWinsTrendLineTimeRange.value]); + rewardWinsHistoryResult.value = undefined; + handleRewardWinsHistoryFetch(); + }, [rewardWinsHistoryTimeRange.value]); return ( -
- + + 综合统计 - - - {perPrizeAnalyzeData.value !== undefined ? ( - - ) : ( - - )} - - 关于免费开 1 次连载 / 锦鲤头像框 - + + + + {summaryResult.value !== undefined && } + + + 关于免费开 1 次连载 / 锦鲤头像框 + - - 中奖次数分布 - - - - - - 中奖次数趋势 - - - -
+ + + ); } diff --git a/frontend/src/pages/LotteryRewardRecordViewer.tsx b/frontend/src/pages/LotteryRewardRecordViewer.tsx index de86925..1f9e96c 100644 --- a/frontend/src/pages/LotteryRewardRecordViewer.tsx +++ b/frontend/src/pages/LotteryRewardRecordViewer.tsx @@ -1,76 +1,89 @@ import type { Signal } from "@preact/signals"; -import { batch, effect, signal, useSignal } from "@preact/signals"; +import { batch, computed, effect, signal, useSignal } from "@preact/signals"; +import { + Checkbox, + Column, + Grid, + LoadingArea, + NoResultNotice, + PrimaryButton, + Text, + TextInput, + Tooltip, +} from "@sscreator/ui"; import { useEffect } from "preact/hooks"; -import SSButton from "../components/SSButton"; -import SSCheckbox from "../components/SSCheckbox"; import SSLazyLoadTable from "../components/SSLazyLoadTable"; -import SSSkeleton from "../components/SSSkeleton"; -import SSText from "../components/SSText"; -import SSTextInput from "../components/SSTextInput"; -import SSTooltip from "../components/SSTooltip"; +import type { GetRewardsResponse } from "../models/lottery"; import type { - LotteryRecordItem, - LotteryRecordsRequest, - LotteryRecordsResponse, -} from "../models/LotteryRewardRecordViewer/LotteryRecords"; -import type { RewardResponse } from "../models/LotteryRewardRecordViewer/Rewards"; -import { commonAPIErrorHandler } from "../utils/errorHandler"; -import { fetchData } from "../utils/fetchData"; -import { removeSpace } from "../utils/textHelper"; + GetLotteryWinRecordItem, + GetLotteryWinRecordsRequest, + GetLotteryWinRecordsResponse, +} from "../models/users"; +import { sendRequest } from "../utils/sendRequest"; import { getDatetime, parseTime } from "../utils/timeHelper"; import { toastWarning } from "../utils/toastHelper"; -import SSDataNotFoundNotice from "../components/SSDataNotFoundNotice"; +const userUrl = signal(""); +const userSlug = computed(() => { + const matchResult = userUrl.value.match( + "https://www.jianshu.com/u/(\\w{6,12})", + ); + if (matchResult !== null && matchResult[1] !== undefined) { + return matchResult[1]; + } + return undefined; +}); const rewards = signal(undefined); -const userURL = signal(""); -const selectedRewards = signal([]); +const excludedAwards = signal([]); const isLoading = signal(false); const hasMore = signal(true); -const result = signal(undefined); +const result = signal(undefined); function handleQuery() { - if (userURL.value.length === 0) { - toastWarning("请输入用户个人主页链接"); + if (userSlug.value === undefined) { + toastWarning({ message: "请输入有效的用户个人主页链接" }); return; } - fetchData( - "POST", - "/tools/lottery_reward_record_viewer/lottery_records", - { - user_url: userURL.value, - target_rewards: selectedRewards.value, - offset: 0, - }, - (data) => { - result.value = data.records; - if (data.records.length === 0) { - hasMore.value = false; - } + sendRequest({ + method: "GET", + endpoint: `/v1/users/${userSlug.value}/lottery-win-records`, + queryArgs: { + excluded_awards: excludedAwards.value, }, - commonAPIErrorHandler, + onSuccess: ({ data }) => + batch(() => { + result.value = data.records; + if (data.records.length === 0) { + hasMore.value = false; + } + }), isLoading, - ); + }); } function handleLoadMore() { - fetchData( - "POST", - "/tools/lottery_reward_record_viewer/lottery_records", - { - user_url: userURL.value, - target_rewards: selectedRewards.value, - offset: result.value!.length + 1, - }, - (data) => { - result.value = result.value!.concat(data.records); - if (data.records.length === 0) { - hasMore.value = false; - } + if (userSlug.value === undefined) { + toastWarning({ message: "请输入有效的用户个人主页链接" }); + return; + } + + sendRequest({ + method: "GET", + endpoint: `/v1/users/${userSlug.value}/lottery-win-records`, + queryArgs: { + excluded_awards: excludedAwards.value, + offset: result.value!.length, }, - commonAPIErrorHandler, + onSuccess: ({ data }) => + batch(() => { + result.value = result.value!.concat(data.records); + if (data.records.length === 0) { + hasMore.value = false; + } + }), isLoading, - ); + }); } function RewardsFliter() { @@ -78,46 +91,43 @@ function RewardsFliter() { const dataReady = useSignal(false); useEffect(() => { - fetchData, RewardResponse>( - "GET", - "/tools/lottery_reward_record_viewer/rewards", - {}, - (data) => + sendRequest, GetRewardsResponse>({ + method: "GET", + endpoint: "/v1/lottery/rewards", + onSuccess: ({ data }) => batch(() => { rewards.value = data.rewards; - selectedRewards.value = rewards.value.map((item) => - removeSpace(item), - ); rewards.value.forEach( (name) => (rewardSelectedSignals.value[name] = signal(true)), ); dataReady.value = true; }), - commonAPIErrorHandler, - ); + }); }, []); effect( () => - (selectedRewards.value = Object.keys(rewardSelectedSignals.value) - .filter((name) => rewardSelectedSignals.value[name].value === true) - .map((item) => removeSpace(item))), + (excludedAwards.value = Object.keys(rewardSelectedSignals.value).filter( + (name) => rewardSelectedSignals.value[name].value === false, + )), ); return (
- + 奖项筛选 - - {dataReady.value ? ( -
- {Object.entries(rewardSelectedSignals.value).map(([name, value]) => ( - - ))} -
- ) : ( - - )} + + + {dataReady.value && ( + + {Object.entries(rewardSelectedSignals.value).map( + ([name, value]) => ( + + ), + )} + + )} +
); } @@ -126,8 +136,8 @@ function ResultTable() { return ( ({ - 时间: {getDatetime(parseTime(item.time))}, - 奖项: {item.reward_name}, + 时间: {getDatetime(parseTime(item.time))}, + 奖项: {item.rewardName}, }))} onLoadMore={handleLoadMore} hasMore={hasMore} @@ -138,26 +148,26 @@ function ResultTable() { export default function LotteryRewardRecordViewer() { return ( -
- + - - 关于免费开 1 次连载 / 锦鲤头像框 - - + + 关于免费开 1 次连载 / 锦鲤头像框 + + 查询 - + {result.value !== undefined && (result.value.length !== 0 ? ( ) : ( - + ))} -
+ ); } diff --git a/frontend/src/pages/MainPage.tsx b/frontend/src/pages/MainPage.tsx index 68d0494..69afc7c 100644 --- a/frontend/src/pages/MainPage.tsx +++ b/frontend/src/pages/MainPage.tsx @@ -1,5 +1,6 @@ import { useDocumentTitle } from "@mantine/hooks"; import { batch, signal } from "@preact/signals"; +import { Column, Text, Tooltip } from "@sscreator/ui"; import { useEffect } from "preact/hooks"; import { useLocation } from "wouter-preact"; import { @@ -8,12 +9,10 @@ import { V2UnimplementedRoutes, } from "../V2RedirectRoutes"; import Header from "../components/Header"; -import SSTooltip from "../components/SSTooltip"; import ToolCard from "../components/ToolCard"; -import type { StatusResponse } from "../models/status"; +import type { GetResponse } from "../models/status"; import { routes } from "../routes"; -import { commonAPIErrorHandler } from "../utils/errorHandler"; -import { fetchData } from "../utils/fetchData"; +import { sendRequest } from "../utils/sendRequest"; import umamiTrack from "../utils/umamiTrack"; const downgradedTools = signal([]); @@ -56,23 +55,21 @@ export default function MainPage() { }, []); useEffect(() => { - fetchData, StatusResponse>( - "GET", - "/status", - {}, - (data) => + sendRequest, GetResponse>({ + method: "GET", + endpoint: "/v1/status", + onSuccess: ({ data }) => batch(() => { - downgradedTools.value = data.downgraded_tools; - unavaliableTools.value = data.unavaliable_tools; + downgradedTools.value = data.downgradedTools; + unavaliableTools.value = data.unavaliableTools; }), - commonAPIErrorHandler, - ); + }); }, []); return ( <>
-
+ {routes.map((item) => ( ))} - - 关于消零派辅助工具 - - - 关于文章发布时间查询工具 - -
+ + + 关于消零派辅助工具 + + + 关于文章发布时间查询工具 + + + ); } diff --git a/frontend/src/pages/NotFoundPage.tsx b/frontend/src/pages/NotFoundPage.tsx index 205bea9..bb7de5c 100644 --- a/frontend/src/pages/NotFoundPage.tsx +++ b/frontend/src/pages/NotFoundPage.tsx @@ -1,22 +1,26 @@ -import { IoPaperPlaneSharp } from "react-icons/io5"; +import { Center, Column, Icon, PrimaryButton, Text } from "@sscreator/ui"; +import { MdCancelScheduleSend } from "react-icons/md"; import { useLocation } from "wouter-preact"; -import SSButton from "../components/SSButton"; -import SSCenter from "../components/SSCenter"; -import SSText from "../components/SSText"; export default function NotFoundPage() { const [, setLocation] = useLocation(); return ( - -
- - - 啊呀,没有找到这个页面 - - 您要找的小工具可能不存在或已经下线。 - setLocation("/")}>返回首页 -
-
+
+ + + + + + + 啊呀,没有找到这个页面 + + + 您要找的小工具可能不存在或已经下线。 + setLocation("/")} fullWidth> + 返回首页 + + +
); } diff --git a/frontend/src/pages/OnRankArticleViewer.tsx b/frontend/src/pages/OnRankArticleViewer.tsx index 1b0f962..a71d554 100644 --- a/frontend/src/pages/OnRankArticleViewer.tsx +++ b/frontend/src/pages/OnRankArticleViewer.tsx @@ -1,55 +1,65 @@ import { batch, computed, signal } from "@preact/signals"; +import { + Column, + ExternalLink, + FieldBlock, + GhostButton, + Grid, + InfoAlert, + NoResultNotice, + PrimaryButton, + Switch, + Text, +} from "@sscreator/ui"; import SSAutocomplete from "../components/SSAutocomplete"; -import SSButton from "../components/SSButton"; -import SSCard from "../components/SSCard"; -import SSDataNotFoundNotice from "../components/SSDataNotFoundNotice"; -import SSExternalLink from "../components/SSExternalLink"; import SSLazyLoadTable from "../components/SSLazyLoadTable"; -import SSSegmentedControl from "../components/SSSegmentedControl"; -import SSStat from "../components/SSStat"; -import SSText from "../components/SSText"; import type { - OnRankRecordItem, - OnRankRecordsRequest, - OnRankRecordsResponse, - RankingSummaryRequest, - RankingSummaryResponse, -} from "../models/OnRankArticleViewer/OnRankRecords"; -import type { - SameURLRecordsSummaryRequest, - SameURLRecordsSummaryResponse, -} from "../models/OnRankArticleViewer/SameURLRecordsSummary"; -import type { - UserNameAutocompleteRequest, - UserNameAutocompleteResponse, -} from "../models/OnRankArticleViewer/UserNameAutocomplete"; -import { commonAPIErrorHandler } from "../utils/errorHandler"; -import { fetchData } from "../utils/fetchData"; + GetHistoryNamesOnArticleRankSummaryResponse, + GetNameAutocompleteRequest, + GetNameAutocompleteResponse, + GetOnArticleRankRecordItem, + GetOnArticleRankRecordsRequest, + GetOnArticleRankRecordsResponse, + GetOnArticleRankSummaryResponse, +} from "../models/users"; +import { sendRequest } from "../utils/sendRequest"; import { getDate, parseTime } from "../utils/timeHelper"; import { toastWarning } from "../utils/toastHelper"; -const userURLOrUserName = signal(""); -const sortSelect = signal< - "onrank_date desc" | "onrank_date asc" | "ranking desc" | "ranking asc" ->("onrank_date desc"); -const sortBy = computed<"onrank_date" | "ranking">( - () => sortSelect.value.split(" ")[0] as any, -); -const sortOrder = computed<"asc" | "desc">( - () => sortSelect.value.split(" ")[1] as any, +const userNameRegex = /^[\u4e00-\u9fa5A-Za-z0-9_]*$/; + +const userUrlOrName = signal(""); +const userSlug = computed(() => { + const matchResult = userUrlOrName.value.match( + "https://www.jianshu.com/u/(\\w{6,12})", + ); + if (matchResult !== null && matchResult[1] !== undefined) { + return matchResult[1]; + } + return undefined; +}); +const userName = computed(() => + userSlug.value === undefined && + userUrlOrName.value.length !== 0 && + userNameRegex.test(userUrlOrName.value) + ? userUrlOrName.value.trim() + : undefined, ); -const completeItems = signal([]); +const orderSelect = signal<{ + orderBy: "date" | "ranking"; + orderDirection: "asc" | "desc"; +}>({ orderBy: "date", orderDirection: "asc" }); +const autocompleteItems = signal([]); const isLoading = signal(false); const hasMore = signal(true); -const result = signal(undefined); -const top10Count = signal(undefined); -const top30Count = signal(undefined); -const top50Count = signal(undefined); -const totalCount = signal(undefined); -const sameURLRecordsSummary = signal | undefined>( +const rankRecords = signal(undefined); +const rankSummary = signal( undefined, ); -const sameURLUserURL = signal(undefined); +const historyNamesOnRankSummary = signal< + GetHistoryNamesOnArticleRankSummaryResponse | undefined +>(undefined); +const showHistoryNamesOnRankRecordFoundNotice = signal(false); function isURL(string: string): boolean { return string.startsWith("https://"); @@ -63,172 +73,155 @@ function handleCompleteItemUpdate(value: string) { return; } - fetchData( - "GET", - "/tools/on_rank_article_viewer/user_name_autocomplete", - { + sendRequest({ + method: "GET", + endpoint: "/v1/users/name-autocomplete", + queryArgs: { name_part: value.trim(), }, - (data) => (completeItems.value = data.possible_names), - commonAPIErrorHandler, - ); + onSuccess: ({ data }) => (autocompleteItems.value = data.names), + }); } function handleQuery() { - if (userURLOrUserName.value.length === 0) { - toastWarning("请输入用户昵称或个人主页链接"); + if ( + userUrlOrName.value.length === 0 || + (userSlug.value === undefined && userName.value === undefined) + ) { + toastWarning({ message: "请输入有效的昵称或用户个人主页链接" }); return; } hasMore.value = true; - const isName = !isURL(userURLOrUserName.value); - - const requestBodyForRecords: OnRankRecordsRequest = isName - ? { - user_name: userURLOrUserName.value.trim(), - sort_by: sortBy.value, - sort_order: sortOrder.value, - offset: 0, - } - : { - user_url: userURLOrUserName.value, - sort_by: sortBy.value, - sort_order: sortOrder.value, - offset: 0, - }; - fetchData( - "POST", - "/tools/on_rank_article_viewer/on_rank_records", - requestBodyForRecords, - (data) => { + const endpointForRankRecords = + userSlug.value !== undefined + ? `/v1/users/${userSlug.value}/on-article-rank-records` + : `/v1/users/name/${userName.value}/on-article-rank-records`; + sendRequest({ + method: "GET", + endpoint: endpointForRankRecords, + queryArgs: { + order_by: orderSelect.value.orderBy, + order_direction: orderSelect.value.orderDirection, + }, + onSuccess: ({ data }) => batch(() => { - result.value = data.records; + rankRecords.value = data.records; if (data.records.length === 0) { hasMore.value = false; } - }); - }, - commonAPIErrorHandler, + }), isLoading, - ); + }); - const requestBodyForRankingSummary: RankingSummaryRequest = isName - ? { - user_name: userURLOrUserName.value.trim(), - } - : { - user_url: userURLOrUserName.value, - }; - fetchData( - "POST", - "/tools/on_rank_article_viewer/ranking_summary", - requestBodyForRankingSummary, - (data) => { - batch(() => { - top10Count.value = data.top10_count; - top30Count.value = data.top30_count; - top50Count.value = data.top50_count; - totalCount.value = data.total; - }); - }, - commonAPIErrorHandler, - ); + const endpointForRankSummary = + userSlug.value !== undefined + ? `/v1/users/${userSlug.value}/on-article-rank-summary` + : `/v1/users/name/${userName.value}/on-article-rank-summary`; + sendRequest, GetOnArticleRankSummaryResponse>({ + method: "GET", + endpoint: endpointForRankSummary, + onSuccess: ({ data }) => (rankSummary.value = data), + }); - if (isName) { - fetchData( - "GET", - "/tools/on_rank_article_viewer/same_url_records_summary", - { user_name: userURLOrUserName.value.trim() }, - (data) => { + if (userName.value !== undefined) { + sendRequest< + Record, + GetHistoryNamesOnArticleRankSummaryResponse + >({ + method: "GET", + endpoint: `/v1/users/name/${userName.value}/history-names-on-article-rank-summary`, + onSuccess: ({ data }) => batch(() => { - sameURLRecordsSummary.value = data.records; - sameURLUserURL.value = data.user_url; - }); - }, - commonAPIErrorHandler, - ); + historyNamesOnRankSummary.value = data; + if (Object.keys(data.historyNamesOnrankSummary).length !== 0) { + showHistoryNamesOnRankRecordFoundNotice.value = true; + } + }), + }); } } function handleLoadMore() { - const requestBody: OnRankRecordsRequest = isURL(userURLOrUserName.value) - ? { - user_url: userURLOrUserName.value, - sort_by: sortBy.value, - sort_order: sortOrder.value, - offset: result.value!.length + 1, - } - : { - user_name: userURLOrUserName.value.trim(), - sort_by: sortBy.value, - sort_order: sortOrder.value, - offset: result.value!.length + 1, - }; - - fetchData( - "POST", - "/tools/on_rank_article_viewer/on_rank_records", - requestBody, - (data) => { - result.value = result.value!.concat(data.records); - if (data.records.length === 0) { - hasMore.value = false; - } + const endpoint = + userSlug.value !== undefined + ? `/v1/users/${userSlug.value}/on-article-rank-records` + : `/v1/users/name/${userName.value}/on-article-rank-records`; + sendRequest({ + method: "GET", + endpoint, + queryArgs: { + order_by: orderSelect.value.orderBy, + order_direction: orderSelect.value.orderDirection, + offset: rankRecords.value!.length, }, - commonAPIErrorHandler, + onSuccess: ({ data }) => + batch(() => { + if (data.records.length === 0) { + hasMore.value = false; + return; + } + + rankRecords.value = rankRecords.value!.concat(data.records); + }), isLoading, - ); + }); } -function SameURLRecordsFoundNotice() { +function HistoryNamesOnRankRecordFoundNotice() { return ( - - 您可能更改过简书昵称,我们找到了其它与您有关的上榜记录: -
- {Object.entries(sameURLRecordsSummary.value!).map( - ([name, dataCount]) => ( - - {name}:{dataCount} 条上榜记录 - - ), - )} -
+ + + + 数据不完整 + + 您可能更改过简书昵称,我们找到了其它与您有关的上榜记录: + + {Object.entries(historyNamesOnRankSummary.value!).map( + ([name, dataCount]) => ( + + {name}:{dataCount} 条上榜记录 + + ), + )} + + - { batch(() => { - // 替换当前输入的昵称为个人主页链接,同时清空同链接记录数据,以隐藏该组件 - userURLOrUserName.value = sameURLUserURL.value!; - sameURLRecordsSummary.value = undefined; - sameURLUserURL.value = undefined; + // 替换当前输入的昵称为个人主页链接,同时隐藏该组件 + userUrlOrName.value = historyNamesOnRankSummary.value!.userUrl; + showHistoryNamesOnRankRecordFoundNotice.value = false; }); // 触发检索 handleQuery(); }} + fullWidth > 查看完整数据 - -
+ + ); } function ResultTable() { return ( ({ - 日期: {getDate(parseTime(item.date))}, - 排名: {item.ranking}, + data={rankRecords.value!.map((item) => ({ + 日期: {getDate(parseTime(item.date))}, + 排名: {item.ranking}, 文章: ( - + > + {item.articleTitle} + ), - 获钻量: {item.FP_reward_count}, + 获钻量: {item.FPReward}, }))} onLoadMore={handleLoadMore} hasMore={hasMore} @@ -239,51 +232,76 @@ function ResultTable() { export default function OnRankArticleViewer() { return ( -
+ - - + 查询 - - - {sameURLRecordsSummary.value !== undefined && - Object.keys(sameURLRecordsSummary.value).length !== 0 && - sameURLUserURL.value !== undefined && } + - {top10Count.value !== undefined && - top30Count.value !== undefined && - top50Count.value !== undefined && - totalCount.value !== undefined && - totalCount.value !== 0 && ( -
- - - - -
+ {historyNamesOnRankSummary.value !== undefined && + showHistoryNamesOnRankRecordFoundNotice.value && ( + )} - {result.value !== undefined && - (result.value.length !== 0 ? ( + {rankSummary.value !== undefined && rankSummary.value.total !== 0 && ( + + + + {rankSummary.value.top10} + + + + + {rankSummary.value.top30} + + + + + {rankSummary.value.top50} + + + + + {rankSummary.value.total} + + + + )} + + {rankRecords.value !== undefined && + (rankRecords.value.length !== 0 ? ( ) : ( - + ))} -
+ ); } diff --git a/frontend/src/pages/ThanksPage.tsx b/frontend/src/pages/ThanksPage.tsx index 47a5ecf..85b4d29 100644 --- a/frontend/src/pages/ThanksPage.tsx +++ b/frontend/src/pages/ThanksPage.tsx @@ -1,8 +1,6 @@ import { useDocumentTitle } from "@mantine/hooks"; +import { Card, Column, ExternalLink, Grid, Text } from "@sscreator/ui"; import Header from "../components/Header"; -import SSCard from "../components/SSCard"; -import SSExternalLink from "../components/SSExternalLink"; -import SSText from "../components/SSText"; import { debugProjectRecords, opensourcePackages, @@ -14,63 +12,77 @@ export default function ThanksPage() { useDocumentTitle("鸣谢 - 简书小工具集"); return ( -
+
- + 「捉虫计划」反馈 - -
+ + {debugProjectRecords.reverse().map((item) => ( - - {item.desc} - - 反馈者: - - - {`奖励:${item.reward} 简书贝`} - + + + + {item.type} + + {item.module} + + + {item.desc} + + 反馈者: + + {item.user_name} + + + {`奖励:${item.reward} 简书贝`} + + ))} -
+ - + 开源库 - -
+ + {Object.entries(opensourcePackages).map(([partName, part]) => ( - - {part.map(({ name, desc, url }) => ( - - {desc}: - - - ))} - + + + + {partName} + + {part.map(({ name, desc, url }) => ( + + {desc}:{name} + + ))} + + ))} -
+ -
-
- + + + v3 Beta 内测成员 - - + + 排名不分先后 - -
+ + {Object.entries(v3BetaPaticipants).map(([name, url]) => ( - + {name} : - - + + ))} -
- +
+ 还有,感谢为简书生态奉献的你。 - -
-
+ + + ); } diff --git a/frontend/src/pages/URLSchemeConvertor.tsx b/frontend/src/pages/URLSchemeConvertor.tsx index 854fdb4..e67184b 100644 --- a/frontend/src/pages/URLSchemeConvertor.tsx +++ b/frontend/src/pages/URLSchemeConvertor.tsx @@ -1,15 +1,17 @@ import { useClipboard } from "@mantine/hooks"; import type { Signal } from "@preact/signals"; import { signal } from "@preact/signals"; -import { AiOutlineCheck } from "react-icons/ai"; -import { BiCopy, BiRightArrowAlt } from "react-icons/bi"; +import { + Center, + Column, + GhostButton, + PrimaryButton, + Row, + Text, + TextInput, +} from "@sscreator/ui"; +import { MdContentCopy, MdDone, MdOutlineArrowForward } from "react-icons/md"; import QRCode from "react-qr-code"; -import SSActionIcon from "../components/SSActionIcon"; -import SSButton from "../components/SSButton"; -import SSCenter from "../components/SSCenter"; -import SSText from "../components/SSText"; -import SSTextInput from "../components/SSTextInput"; -import SSTooltip from "../components/SSTooltip"; import { toastWarning } from "../utils/toastHelper"; interface JianshuURLType { @@ -87,7 +89,7 @@ function handleConvert() { const urlType = getURLType(jianshuURL); if (urlType === "unknown") { - toastWarning("输入的不是有效的简书链接,请检查"); + toastWarning({ message: "请输入有效的简书链接" }); return; } @@ -102,44 +104,37 @@ export default function URLSchemeConvertor() { const clipboard = useClipboard(); return ( -
- - 转换 + + + + 转换 + {result.value !== undefined && ( - -
-
- {result.value} - - + + + {result.value} + + } onClick={() => window.open(result.value)} > - - - - - + : } onClick={() => clipboard.copy(result.value)} > - {!clipboard.copied ? : } - - -
- -
-
+ {!clipboard.copied ? "复制" : "复制成功"} + + +
+ + + )} -
+ ); } diff --git a/frontend/src/pages/V2UnavaliablePage.tsx b/frontend/src/pages/V2UnavaliablePage.tsx index f120cf6..c127b3d 100644 --- a/frontend/src/pages/V2UnavaliablePage.tsx +++ b/frontend/src/pages/V2UnavaliablePage.tsx @@ -1,23 +1,27 @@ -import { LuConstruction } from "react-icons/lu"; +import { Center, Column, Icon, PrimaryButton, Text } from "@sscreator/ui"; +import { MdSettingsApplications } from "react-icons/md"; import { useLocation } from "wouter-preact"; -import SSButton from "../components/SSButton"; -import SSCenter from "../components/SSCenter"; -import SSText from "../components/SSText"; export default function V2UnavaliablePage() { const [, setLocation] = useLocation(); return ( - -
- - - 已下线 - - 您正在访问的小工具已在简书小工具集 v3 中下线。 - 如有问题,请联系开发者。 - setLocation("/")}>返回首页 -
-
+
+ + + + + + + 已下线 + + + 您正在访问的小工具已在简书小工具集 v3 中下线。 + 如有疑问,请联系开发者。 + setLocation("/")} fullWidth> + 返回首页 + + +
); } diff --git a/frontend/src/pages/V2UnimplementedPage.tsx b/frontend/src/pages/V2UnimplementedPage.tsx index a45ce74..f312415 100644 --- a/frontend/src/pages/V2UnimplementedPage.tsx +++ b/frontend/src/pages/V2UnimplementedPage.tsx @@ -1,22 +1,27 @@ -import { LuServerOff } from "react-icons/lu"; +import { Center, Column, Icon, PrimaryButton, Text } from "@sscreator/ui"; +import { MdAppsOutage } from "react-icons/md"; import { useLocation } from "wouter-preact"; -import SSButton from "../components/SSButton"; -import SSCenter from "../components/SSCenter"; -import SSText from "../components/SSText"; export default function V2UnimplementedPage() { const [, setLocation] = useLocation(); return ( - -
- - - 正在开发中 - - 您正在访问的小工具尚未在简书小工具集 v3 中实现。 - setLocation("/")}>返回首页 -
-
+
+ + + + + + + 正在开发中 + + + 您正在访问的小工具尚未在简书小工具集 v3 中实现。 + 如有疑问,请联系开发者。 + setLocation("/")} fullWidth> + 返回首页 + + +
); } diff --git a/frontend/src/pages/VIPInfoViewer.tsx b/frontend/src/pages/VIPInfoViewer.tsx index e3b5d63..35d7e35 100644 --- a/frontend/src/pages/VIPInfoViewer.tsx +++ b/frontend/src/pages/VIPInfoViewer.tsx @@ -1,17 +1,15 @@ -import { batch, signal } from "@preact/signals"; -import type { Dayjs } from "dayjs"; -import SSAvatar from "../components/SSAvatar"; -import SSBadge from "../components/SSBadge"; -import SSButton from "../components/SSButton"; -import SSExternalLink from "../components/SSExternalLink"; -import SSText from "../components/SSText"; -import SSTextInput from "../components/SSTextInput"; -import type { - VIPInfoRequest, - VIPInfoResponse, -} from "../models/VIPInfoViewer/VIPInfo"; -import { commonAPIErrorHandler } from "../utils/errorHandler"; -import { fetchData } from "../utils/fetchData"; +import { computed, signal } from "@preact/signals"; +import { + Badge, + Column, + ExternalLink, + PrimaryButton, + Row, + Text, + TextInput, +} from "@sscreator/ui"; +import type { GetVIPInfoResponse } from "../models/users"; +import { sendRequest } from "../utils/sendRequest"; import { getDate, getHumanReadableTimeDelta, @@ -23,16 +21,23 @@ import VIPBadgeGoldURL from "/vip_badges/vip_badge_gold.png"; import VIPBadgePlatinaURL from "/vip_badges/vip_badge_platina.png"; import VIPBadgeSilverURL from "/vip_badges/vip_badge_silver.png"; -const userURL = signal(""); -const userName = signal(undefined); +const userUrl = signal(""); +const userSlug = computed(() => { + const matchResult = userUrl.value.match( + "https://www.jianshu.com/u/(\\w{6,12})", + ); + if (matchResult !== null && matchResult[1] !== undefined) { + return matchResult[1]; + } + return undefined; +}); const isLoading = signal(false); -const VIPType = signal(undefined); -const VIPExpireTime = signal(undefined); +const result = signal(undefined); const VIPTypeToBadgeImageURL: Record = { 铜牌: VIPBadgeBronzeURL, 银牌: VIPBadgeSilverURL, - 金牌: VIPBadgeGoldURL, + 黄金: VIPBadgeGoldURL, 白金: VIPBadgePlatinaURL, }; @@ -41,71 +46,71 @@ function handleQuery() { return; } - if (userURL.value.length === 0) { - toastWarning("请输入用户个人主页链接"); + if (userUrl.value.length === 0) { + toastWarning({ message: "请输入用户个人主页链接" }); return; } - fetchData( - "POST", - "/tools/VIP_info_viewer/VIP_info", - { - user_url: userURL.value, - }, - (data) => - batch(() => { - userName.value = data.name; - VIPType.value = data.VIP_type; - if (data.VIP_expire_time !== undefined) { - VIPExpireTime.value = parseTime(data.VIP_expire_time); - } - }), - commonAPIErrorHandler, + sendRequest, GetVIPInfoResponse>({ + method: "GET", + endpoint: `/v1/users/${userSlug.value}/vip-info`, + onSuccess: ({ data }) => (result.value = data), isLoading, - ); + }); } export default function VIPInfoViewer() { return ( -
- + - + 查询 - + - {userName.value !== undefined && ( - - 昵称: - - - )} - - {VIPType.value !== undefined && ( + {result.value !== undefined && ( <> -
- 会员级别: - - - {VIPType.value} - -
- {VIPType.value !== "无会员" && ( - + + 昵称: + + {result.value.userName} + + + + + 会员等级: + {result.value.isVIP ? ( + + + {`${result.value.type} + {result.value.type} + + + ) : ( + + 无会员 + + )} + + {result.value.isVIP && ( + 到期时间: - {getDate(VIPExpireTime.value!)}( - {getHumanReadableTimeDelta(VIPExpireTime.value!)}) - + {getDate(parseTime(result.value.expireDate))}( + {getHumanReadableTimeDelta(parseTime(result.value.expireDate))}) + )} )} -
+ ); } diff --git a/frontend/src/pages/VIPProfitCompute.tsx b/frontend/src/pages/VIPProfitCompute.tsx index 074876c..b9813a3 100644 --- a/frontend/src/pages/VIPProfitCompute.tsx +++ b/frontend/src/pages/VIPProfitCompute.tsx @@ -1,15 +1,19 @@ -// TODO: 由于 SegmentedControl 实现问题,暂时不展示会员图标 import { computed, signal } from "@preact/signals"; +import { + Card, + Column, + Grid, + NumberInput, + Row, + Switch, + Text, +} from "@sscreator/ui"; import type { JSX } from "preact/jsx-runtime"; -import SSCard from "../components/SSCard"; -import SSNumberInput from "../components/SSNumberInput"; -import SSSegmentedControl from "../components/SSSegmentedControl"; -import SSText from "../components/SSText"; -import { RoundFloat } from "../utils/numberHelper"; -// import VIPBadgeBronzeURL from "/vip_badges/vip_badge_bronze.png"; -// import VIPBadgeGoldURL from "/vip_badges/vip_badge_gold.png"; -// import VIPBadgePlatinaURL from "/vip_badges/vip_badge_platina.png"; -// import VIPBadgeSilverURL from "/vip_badges/vip_badge_silver.png"; +import { roundFloat } from "../utils/numberHelper"; +import VIPBadgeBronzeURL from "/vip_badges/vip_badge_bronze.png"; +import VIPBadgeGoldURL from "/vip_badges/vip_badge_gold.png"; +import VIPBadgePlatinaURL from "/vip_badges/vip_badge_platina.png"; +import VIPBadgeSilverURL from "/vip_badges/vip_badge_silver.png"; type VIPLevelType = "bronze" | "silver" | "gold" | "platina"; @@ -27,12 +31,52 @@ const VIPLevelToPrice: Record = { platina: 64980, }; -// const VIPLevelToBadgeImageURL: Record = { -// bronze: VIPBadgeBronzeURL, -// silver: VIPBadgeSilverURL, -// gold: VIPBadgeGoldURL, -// platina: VIPBadgePlatinaURL, -// }; +const VIPSwitchData = [ + { + label: "铜牌", + value: "bronze", + leftIcon: ( + 铜牌会员图标 + ), + }, + { + label: "银牌", + value: "silver", + leftIcon: ( + 银牌会员图标 + ), + }, + { + label: "金牌", + value: "gold", + leftIcon: ( + 金牌会员图标 + ), + }, + { + label: "白金", + value: "platina", + leftIcon: ( + 白金会员图标 + ), + }, +]; const VIPLevelToBaseEarningRate: Record = { bronze: 0.048, @@ -99,13 +143,6 @@ const promoterLevelToLevel2MembersFPEarningRate: Record< supreme: 0.012, }; -const VIPLevelSCData: Record = { - 铜牌: "bronze", - 银牌: "silver", - 金牌: "gold", - 白金: "platina", -}; - const VIPLevel = signal("bronze"); const VIPText = computed(() => VIPLevelToText[VIPLevel.value]); const VIPPrice = computed(() => VIPLevelToPrice[VIPLevel.value]); @@ -135,7 +172,7 @@ const promoterLevelEarningRateFactor = computed( () => promoterLevelToPromoterEarningRateFactor[promoterLevel.value], ); const earningRate = computed(() => - RoundFloat( + roundFloat( baseEarningRate.value * FPCountEarningRateFactor.value * promoterLevelEarningRateFactor.value, @@ -168,12 +205,12 @@ const annualEarning = computed(() => { } nowFPCount += earningFromLevel1Members.value; nowFPCount += earningFromLevel2Members.value; - return RoundFloat(nowFPCount - FPCount.value, 2); + return roundFloat(nowFPCount - FPCount.value, 2); }); const pureAnnualEarning = computed(() => annualEarning.value - VIPPrice.value); const pureMonthlyEarning = computed(() => pureAnnualEarning.value / 12); const returnRate = computed(() => - RoundFloat(pureAnnualEarning.value / (FPCount.value + VIPPrice.value), 4), + roundFloat(pureAnnualEarning.value / (FPCount.value + VIPPrice.value), 4), ); const canGetMoneyBack = computed(() => pureAnnualEarning.value >= 0); @@ -210,17 +247,15 @@ function ResultItem({ } return ( -
- + + {label} - - {description.length !== 0 && `(${description})`} - - - + {description.length !== 0 && `(${description})`} + + {valuePart} - -
+ + ); } @@ -231,35 +266,28 @@ interface ResultGroupProps { function ResultGroup({ children, label }: ResultGroupProps) { return ( - -
{children}
-
+ + + + {label} + + {children} + + ); } export default function VIPProfitCompute() { return (
- - - - - - + + + + + + -
+ - + 1. 收益计算已考虑复利,但未考虑持钻量增加对收益率的提升,计算结果可能偏低。 - - - 2. 每月净收益为平均值,由于持钻量上升,实际收益逐月增长。 - - 3. 全部数值单位均为简书贝。 - 本工具不作为投资参考。 + + 2. 每月净收益为平均值,由于持钻量上升,实际收益逐月增长。 + 3. 全部数值单位均为简书贝。 + 本工具不作为投资参考。 -
+
); } diff --git a/frontend/src/thanks.json b/frontend/src/thanks.json index 8d2d9b4..4f8e707 100644 --- a/frontend/src/thanks.json +++ b/frontend/src/thanks.json @@ -204,23 +204,18 @@ }, { "name": "Sanic", - "desc": "API 服务框架", - "url": "https://github.com/sanic-org/sanic" + "desc": "后端框架", + "url": "https://github.com/litestar-org/litestar" }, { - "name": "Pydantic", + "name": "Msgspec", "desc": "数据校验", - "url": "https://github.com/pydantic/pydantic" + "url": "https://github.com/jcrist/msgspec" }, { - "name": "PyMongo", + "name": "Motor", "desc": "MongoDB 数据库操作", - "url": "https://github.com/mongodb/mongo-python-driver" - }, - { - "name": "PyYAML", - "desc": "YAML 文件读取", - "url": "https://github.com/yaml/pyyaml" + "url": "https://github.com/mongodb/motor" }, { "name": "SSpeedup", diff --git a/frontend/src/utils/errorHandler.ts b/frontend/src/utils/errorHandler.ts index a8816e5..6d83a5a 100644 --- a/frontend/src/utils/errorHandler.ts +++ b/frontend/src/utils/errorHandler.ts @@ -1,11 +1,46 @@ import { toastError, toastWarning } from "./toastHelper"; +import type { ErrorCallbackArgs } from "./sendRequest"; -export function commonAPIErrorHandler(code: number, message: string) { - // 参数异常,一般是用户问题 - if (code === 412) { - toastWarning(message); +export function commonAPIErrorHandler({ + httpCode, + httpMsg, + ApiCode, + ApiMsg, + error, +}: ErrorCallbackArgs) { + // 请求超时 + if (error?.name === "AbortError") { + toastError({ + message: "请求超时,请重试或更换网络环境", + }); return; } - toastError(`API 请求失败(${code})\n${message}`); + // 其它阻止请求正常发送的异常 + if (error && !httpCode && !ApiCode) { + toastError({ + message: "网络异常,请重试或更换网络环境", + }); + return; + } + + // BAD ARGUMENTS,一般是用户传入参数无效导致 + if (ApiCode && ApiMsg && ApiCode === 203) { + toastWarning({ + message: ApiMsg, + }); + return; + } + + if (ApiCode && ApiMsg) { + toastError({ + message: `${ApiMsg}\n(HTTP ${httpCode} / API ${ApiCode})`, + }); + } + + if (httpCode && httpMsg && !ApiCode && !ApiMsg) { + toastError({ + message: `未知错误\n${httpMsg}(HTTP ${httpCode})`, + }); + } } diff --git a/frontend/src/utils/fetchData.ts b/frontend/src/utils/fetchData.ts deleted file mode 100644 index 010e18d..0000000 --- a/frontend/src/utils/fetchData.ts +++ /dev/null @@ -1,99 +0,0 @@ -import type { Signal } from "@preact/signals"; -import type { Response } from "../models/base"; -import { getBaseURL } from "./URLHelper"; -import { toastError } from "./toastHelper"; - -const baseURL = getBaseURL(); -const defaultTimeout = 5000; - -export async function fetchData( - method: "GET" | "POST", - url: string, - data: TRequest, - onOK: (data: TResponse) => void, - onError: (code: number, message: string) => void, - isLoading?: Signal, - timeout?: number, -) { - if (isLoading) { - // 如果数据正在加载,不再发起新的请求 - if (isLoading.value === true) { - return; - } - - // 否则,标记为正在加载 - isLoading.value = true; - } - - // 如果是 GET 请求,从 data 对象构建查询字符串 - url = `${baseURL}/api${url}`; - if (method === "GET") { - const params: string[] = []; - Object.entries(data as object).forEach(([key, value]) => - params.push(`${key}=${value}`), - ); - url = `${url}?${params.join("&")}`; - } - - let response; - const controller = new AbortController(); - try { - const timeoutID = setTimeout( - () => controller.abort(), - timeout ?? defaultTimeout, - ); - - response = await fetch(url, { - method, - headers: - method !== "GET" ? { "Content-Type": "application/json" } : undefined, - body: method !== "GET" ? JSON.stringify(data) : undefined, - credentials: "omit", - redirect: "error", - signal: controller.signal, - }); - clearTimeout(timeoutID); - } catch (error) { - // 请求未正常完成 - if (isLoading) { - isLoading.value = false; - } - - if ((error as any).name === "AbortError") { - toastError( - `请求超时(${ - timeout ?? defaultTimeout - }ms)\n请尝试刷新页面,如该问题反复出现,请向开发者反馈`, - ); - return; - } - - toastError("网络异常\n请尝试刷新页面,如该问题反复出现,请向开发者反馈"); - return; - } - - if (!response.ok) { - // 请求完成但 HTTP 状态码异常 - if (isLoading) { - isLoading.value = false; - } - - toastError( - `API 请求失败\nHTTP ${response.status}(${response.statusText})`, - ); - return; - } - - const responseJSON = (await response.json()) as Response; - if (responseJSON.ok) { - // API 状态码正常 - onOK(responseJSON.data); - } else { - // API 状态码异常 - onError(responseJSON.code, responseJSON.message); - } - - if (isLoading) { - isLoading.value = false; - } -} diff --git a/frontend/src/utils/keyHelper.ts b/frontend/src/utils/keyHelper.ts deleted file mode 100644 index 4b00d9e..0000000 --- a/frontend/src/utils/keyHelper.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function whenEnterOrSpace(event: KeyboardEvent, callback: () => void) { - if (event.key === "Enter" || event.key === "Space") { - callback(); - } -} diff --git a/frontend/src/utils/numberHelper.ts b/frontend/src/utils/numberHelper.ts index 70cd040..970e07c 100644 --- a/frontend/src/utils/numberHelper.ts +++ b/frontend/src/utils/numberHelper.ts @@ -1,3 +1,3 @@ -export function RoundFloat(number: number, ndigits: number) { +export function roundFloat(number: number, ndigits: number) { return Math.round(number * 10 ** ndigits) / 10 ** ndigits; } diff --git a/frontend/src/utils/sendRequest.ts b/frontend/src/utils/sendRequest.ts new file mode 100644 index 0000000..9717b8a --- /dev/null +++ b/frontend/src/utils/sendRequest.ts @@ -0,0 +1,171 @@ +import type { Signal } from "@preact/signals"; +import type { ResponseStruct } from "../models/responseStruct"; +import { getBaseURL } from "./URLHelper"; +import { commonAPIErrorHandler } from "./errorHandler"; + +const BASE_URL = `${getBaseURL()}/api`; +const DEFAULT_TIMEOUT = 5000; + +interface SuccessCallbackArgs { + code: number; + msg: string; + data: TResponse; +} + +export interface ErrorCallbackArgs { + error?: Error; + httpCode?: number; + httpMsg?: string; + ApiCode?: number; + ApiMsg?: string; +} + +interface SendRequestArgs< + TRequest extends Record, + TResponse extends Record, +> { + endpoint: string; + method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; + body?: TRequest; + queryArgs?: TRequest; + onSuccess?: (data: SuccessCallbackArgs) => void; + onError?: (data: ErrorCallbackArgs) => void; + isLoading?: Signal; + timeout?: number; +} + +export async function sendRequest< + TRequest extends Record, + TResponse extends Record, +>({ + endpoint, + method, + body, + queryArgs, + onSuccess, + onError = commonAPIErrorHandler, + isLoading, + timeout = DEFAULT_TIMEOUT, +}: SendRequestArgs) { + if (isLoading && isLoading.value) { + // 正在加载,不再重复发起请求 + return; + } + + // 标记为正在加载 + if (isLoading) { + isLoading.value = true; + } + + let url = `${BASE_URL}${endpoint}`; + // 如果是 GET 请求,构建并拼接 Query Args + if (method === "GET" && queryArgs) { + const params = new URLSearchParams(); + Object.entries(queryArgs).forEach(([key, value]) => { + // 剔除值为 undefined 的 Query Args + if (value === undefined) { + return; + } + // 对于数组类型,多次添加相同 key 的参数 + if (Array.isArray(value)) { + value.forEach((x) => params.append(key, x)); + } else { + params.append(key, value); + } + }); + url = params.toString().length === 0 ? url : `${url}?${params.toString()}`; + } else if (body) { + // 剔除值为 undefined 的 Body 键值对 + body = Object.fromEntries( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + Object.entries(body).filter(([_, value]) => value != null), + ) as TRequest; + } + + let response: Response; + const controller = new AbortController(); + try { + const timeoutID = setTimeout(() => controller.abort(), timeout); + + response = await fetch(url, { + method, + headers: + body !== undefined ? { "Content-Type": "application/json" } : undefined, + body: body !== undefined ? JSON.stringify(body) : undefined, + credentials: "omit", + signal: controller.signal, + }); + clearTimeout(timeoutID); + + // 发生异常 + } catch (error) { + // 取消加载状态 + if (isLoading && isLoading.value) { + isLoading.value = false; + } + + if (onError) { + onError({ + error: error as Error, + }); + } + + return; + } + + // 请求完成,取消加载状态 + if (isLoading && isLoading.value) { + isLoading.value = false; + } + + // HTTP 状态码异常 + if (!response.ok) { + try { + // 有 API 返回数据 + const { code, msg } = + (await response.json()) as ResponseStruct; + + if (onError) { + onError({ + httpCode: response.status, + httpMsg: response.statusText, + ApiCode: code, + ApiMsg: msg, + }); + } + } catch { + // 无 API 返回数据 + if (onError) { + onError({ + httpCode: response.status, + httpMsg: response.statusText, + }); + } + } + return; + } + + // HTTP 状态码正常 + const responseJson = (await response.json()) as ResponseStruct; + const { ok, code, msg, data } = responseJson; + + // API 错误 + if (!ok && onError) { + onError({ + httpCode: response.status, + httpMsg: response.statusText, + ApiCode: code, + ApiMsg: msg, + }); + + return; + } + + if (onSuccess) { + onSuccess({ + code, + msg, + data, + }); + } +} diff --git a/frontend/src/utils/timeHelper.ts b/frontend/src/utils/timeHelper.ts index 49d81f4..e003c36 100644 --- a/frontend/src/utils/timeHelper.ts +++ b/frontend/src/utils/timeHelper.ts @@ -31,7 +31,7 @@ dayjs.updateLocale("zh-cn", { export function parseTime(timeInt: number): Dayjs { // 时间加八小时,处理时区问题 - return dayjs.unix(timeInt); + return dayjs(timeInt); } export function getDatetime(dateObj: Dayjs) { diff --git a/frontend/src/utils/toastHelper.tsx b/frontend/src/utils/toastHelper.tsx index 0483a18..b5fcfb0 100644 --- a/frontend/src/utils/toastHelper.tsx +++ b/frontend/src/utils/toastHelper.tsx @@ -1,26 +1,59 @@ +import { Text, getColorScheme } from "@sscreator/ui"; import { toast } from "react-hot-toast"; -import { RiErrorWarningFill } from "react-icons/ri"; -import SSText from "../components/SSText"; +import { IoMdCloseCircle } from "react-icons/io"; +import { MdCheckCircle, MdOutlineError } from "react-icons/md"; -export function toastSuccess(message: string, duration?: number) { - toast.success(message, { +export { Toaster } from "react-hot-toast"; + +interface ToastFunctionProps { + message: string; + duration?: number; +} + +export function toastSuccess({ message, duration = 2000 }: ToastFunctionProps) { + const colorScheme = getColorScheme(); + + toast({message}, { duration, + icon: ( + + + + ), + style: { + backgroundColor: colorScheme === "dark" ? "#27272a" : undefined, + }, }); } -export function toastWarning(message: string, duration?: number) { - toast(message, { +export function toastWarning({ message, duration = 4000 }: ToastFunctionProps) { + const colorScheme = getColorScheme(); + + toast({message}, { duration, icon: ( - - - + + + ), + style: { + backgroundColor: colorScheme === "dark" ? "#27272a" : undefined, + }, }); } -export function toastError(message: string, duration?: number) { - toast.error(message, { +export function toastError({ message, duration = 4000 }: ToastFunctionProps) { + const colorScheme = getColorScheme(); + + toast({message}, { duration, + icon: ( + + + + ), + style: { + backgroundColor: colorScheme === "dark" ? "#27272a" : undefined, + }, }); } diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 464998a..2291ceb 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -63,7 +63,8 @@ export default defineConfig({ server: { proxy: { "/api": { - target: "http://localhost:8902", + target: "http://localhost:8902/", + rewrite: (path) => path.replace(/^\/api/, ""), }, }, },