From 1b8ab2857fc3c608fae585585c43d0c36579e79a Mon Sep 17 00:00:00 2001 From: Amritanshu Date: Thu, 22 Jan 2026 16:54:12 +0000 Subject: [PATCH] Mostly working with Product + Version and Sku + Version. There will still be many errors. But this is working somewhat --- .vscode/settings.json | 12 +- barker/alembic/versions/32c508eed4df_skus.py | 215 + barker/barker/db/base.py | 117 +- barker/barker/main.py | 5 +- barker/barker/models/bill.py | 6 +- barker/barker/models/customer.py | 4 +- barker/barker/models/customer_discount.py | 8 +- barker/barker/models/device.py | 10 +- barker/barker/models/food_table.py | 8 +- barker/barker/models/guest_book.py | 10 +- barker/barker/models/inventory.py | 32 +- barker/barker/models/inventory_modifier.py | 6 +- barker/barker/models/kot.py | 10 +- barker/barker/models/login_history.py | 6 +- barker/barker/models/menu_category.py | 6 +- barker/barker/models/modifier.py | 4 +- barker/barker/models/modifier_category.py | 6 +- barker/barker/models/permission.py | 4 +- barker/barker/models/product.py | 10 +- barker/barker/models/product_version.py | 61 +- barker/barker/models/regime.py | 6 +- barker/barker/models/reprint.py | 6 +- barker/barker/models/role.py | 4 +- barker/barker/models/sale_category.py | 6 +- barker/barker/models/section.py | 4 +- barker/barker/models/section_printer.py | 8 +- barker/barker/models/settlement.py | 4 +- barker/barker/models/sku_version.py | 93 + barker/barker/models/stock_keeping_unit.py | 46 + barker/barker/models/tax.py | 8 +- barker/barker/models/voucher.py | 20 +- barker/barker/printing/__init__.py | 48 + barker/barker/printing/bill.py | 51 +- barker/barker/printing/kot.py | 40 +- barker/barker/printing/product_sale_report.py | 3 +- barker/barker/routers/menu_category.py | 12 +- barker/barker/routers/modifier_category.py | 64 +- barker/barker/routers/product.py | 746 +-- barker/barker/routers/role.py | 3 +- .../barker/routers/update_product_prices.py | 1 + barker/barker/routers/user.py | 3 +- barker/barker/routers/voucher/__init__.py | 23 +- barker/barker/routers/voucher/merge_move.py | 10 +- barker/barker/routers/voucher/save.py | 85 +- barker/barker/routers/voucher/show.py | 66 +- barker/barker/routers/voucher/update.py | 54 +- barker/barker/schemas/menu_category.py | 1 + .../schemas/modifier_category_for_product.py | 16 + barker/barker/schemas/product.py | 24 +- barker/barker/schemas/product_query.py | 32 + barker/barker/schemas/stock_keeping_unit.py | 55 + barker/barker/schemas/voucher.py | 2 +- barker/barker/schemas/voucher_out.py | 14 +- barker/barker/tasks/printing.py | 2 +- barker/pyproject.toml | 34 +- bookie/package.json | 1 - bookie/src/app/app.config.ts | 3 - bookie/src/app/core/bill-view-item.ts | 4 +- bookie/src/app/core/menu-category.ts | 2 +- bookie/src/app/core/product.ts | 46 +- bookie/src/app/core/stock-keeping-unit.ts | 41 + .../modifier-category-detail.component.ts | 2 +- .../modifier-category.service.ts | 4 +- .../product-detail-datasource.ts | 16 + .../product-detail.component.css | 11 + .../product-detail.component.html | 144 +- .../product-detail.component.ts | 196 +- .../src/app/product/product-list.resolver.ts | 2 +- .../product-list/product-list-datasource.ts | 35 +- .../product-list/product-list.component.html | 57 +- .../product-list/product-list.component.ts | 21 +- bookie/src/app/product/product-new.service.ts | 85 + bookie/src/app/product/product.resolver.ts | 2 +- bookie/src/app/product/product.service.ts | 19 +- .../sale-category/product-list.resolver.ts | 2 +- .../sale-category-detail-datasource.ts | 2 +- .../sale-category-detail.component.ts | 2 +- bookie/src/app/sales/bill.service.ts | 60 +- .../app/sales/bills/bill-selection-item.ts | 4 +- .../src/app/sales/bills/bills.component.html | 2 +- bookie/src/app/sales/bills/bills.component.ts | 16 +- bookie/src/app/sales/bills/inventory.ts | 6 +- bookie/src/app/sales/product.ts | 41 + .../sales/products/products.component.html | 2 +- .../app/sales/products/products.component.ts | 6 +- .../app/sales/products/products.resolver.ts | 2 +- .../temporal-product-detail.component.ts | 2 +- .../temporal-product-list.resolver.ts | 2 +- .../temporal-product-list-datasource.ts | 2 +- .../temporal-product-list.component.ts | 2 +- .../temporal-product.resolver.ts | 2 +- .../temporal-product.service.ts | 2 +- .../update-product-prices.service.ts | 2 +- bookie/yarn.lock | 4106 ++++++++++------- frank/printing.py | 40 +- 95 files changed, 4506 insertions(+), 2624 deletions(-) create mode 100644 barker/alembic/versions/32c508eed4df_skus.py create mode 100644 barker/barker/models/sku_version.py create mode 100644 barker/barker/models/stock_keeping_unit.py create mode 100644 barker/barker/schemas/modifier_category_for_product.py create mode 100644 barker/barker/schemas/product_query.py create mode 100644 barker/barker/schemas/stock_keeping_unit.py create mode 100644 bookie/src/app/core/stock-keeping-unit.ts create mode 100644 bookie/src/app/product/product-detail/product-detail-datasource.ts create mode 100644 bookie/src/app/product/product-new.service.ts create mode 100644 bookie/src/app/sales/product.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 713288de..c866d1cc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "python.defaultInterpreterPath": "/home/tanshu/.cache/pypoetry/virtualenvs/barker-3ndhMgBR-py3.13/bin/python", + "python.defaultInterpreterPath": "/home/tanshu/.cache/pypoetry/virtualenvs/barker-3ndhMgBR-py3.14/bin/python", "files.exclude": { "**/__pycache__": true, "**/.mypy_cache": true, @@ -13,5 +13,13 @@ "**/node_modules": true, "**/package-lock.json": true, }, - "makefile.configureOnOpen": false + "makefile.configureOnOpen": false, + "python-envs.pythonProjects": [], + /* --- Pylance: keep IntelliSense, disable type checking --- */ + "python.analysis.typeCheckingMode": "off", + // "python.analysis.diagnosticMode": "openFilesOnly", + + /* --- mypy: source of truth for typing --- */ + "python.linting.enabled": true, + "python.linting.mypyEnabled": true } diff --git a/barker/alembic/versions/32c508eed4df_skus.py b/barker/alembic/versions/32c508eed4df_skus.py new file mode 100644 index 00000000..720c160e --- /dev/null +++ b/barker/alembic/versions/32c508eed4df_skus.py @@ -0,0 +1,215 @@ +"""add stock_keeping_units + sku_versions""" + +import sqlalchemy as sa + +from sqlalchemy.dialects import postgresql + +from alembic import op + + +# revision identifiers, used by Alembic. +revision = "32c508eed4df" +down_revision = "7e9944b430d6" +branch_labels = None +depends_on = None + + +def upgrade(): + # --------------------------------------------------------------------- + # 1) stock_keeping_units + # --------------------------------------------------------------------- + op.create_table( + "stock_keeping_units", + sa.Column("id", sa.Uuid(), server_default=sa.text("gen_random_uuid()"), nullable=False), + sa.Column("product_id", sa.Uuid(), nullable=False), + sa.Column("is_not_available", sa.Boolean(), nullable=False, server_default=sa.text("false")), + sa.ForeignKeyConstraint( + ["product_id"], ["products.id"], name=op.f("fk_stock_keeping_units_product_id_products") + ), + sa.PrimaryKeyConstraint("id", name=op.f("pk_stock_keeping_units")), + ) + + # --------------------------------------------------------------------- + # 2) sku_versions + # --------------------------------------------------------------------- + op.create_table( + "sku_versions", + sa.Column("id", sa.Uuid(), server_default=sa.text("gen_random_uuid()"), nullable=False), + sa.Column("sku_id", sa.Uuid(), nullable=False), + sa.Column("units", sa.Unicode(), nullable=False), + sa.Column("fraction", sa.Numeric(precision=15, scale=5), nullable=False), + sa.Column("product_yield", sa.Numeric(precision=15, scale=5), nullable=False), + sa.Column("cost_price", sa.Numeric(precision=15, scale=2), nullable=False), + sa.Column("sale_price", sa.Numeric(precision=15, scale=2), nullable=False), + sa.Column("has_happy_hour", sa.Boolean(), nullable=False), + sa.Column("sort_order", sa.Integer(), nullable=False), + sa.Column("menu_category_id", sa.Uuid(), nullable=False), + sa.Column("valid_from", sa.Date(), nullable=True), + sa.Column("valid_till", sa.Date(), nullable=True), + postgresql.ExcludeConstraint( + (sa.column("sku_id"), "="), + (sa.text("daterange(valid_from, valid_till, '[]')"), "&&"), + using="gist", + name=op.f("uq_sku_versions_sku_id"), + ), + # postgresql.ExcludeConstraint((sa.column('units'), '='), (sa.text("daterange(valid_from, valid_till, '[]')"), '&&'), using='gist', name=op.f('uq_sku_versions_units')), + sa.ForeignKeyConstraint( + ["menu_category_id"], ["menu_categories.id"], name=op.f("fk_sku_versions_menu_category_id_menu_categories") + ), + sa.ForeignKeyConstraint( + ["sku_id"], ["stock_keeping_units.id"], name=op.f("fk_sku_versions_sku_id_stock_keeping_units") + ), + sa.PrimaryKeyConstraint("id", name=op.f("pk_sku_versions")), + sa.CheckConstraint("length(trim(units)) > 0", name="ck_sku_versions_units_not_blank"), + ) + + # --------------------------------------------------------------------- + # 3) Data migration + # - Create exactly 1 SKU per product. + # - Migrate existing product_versions rows into sku_versions rows. + # --------------------------------------------------------------------- + + # 3a) Insert a SKU for every product + products = sa.table("products", sa.column("id", postgresql.UUID(as_uuid=True))) + + stock_keeping_units = sa.table( + "stock_keeping_units", + sa.column("id", postgresql.UUID(as_uuid=True)), + sa.column("product_id", postgresql.UUID(as_uuid=True)), + sa.column("is_not_available", sa.Boolean()), + ) + + op.execute( + stock_keeping_units.insert().from_select( + ["id", "product_id", "is_not_available"], + sa.select( + sa.func.gen_random_uuid(), + products.c.id, + sa.false(), + ), + ) + ) + + # 3b) Migrate product_versions -> sku_versions, mapping by product_id to the single SKU + # NOTE: this assumes product_versions still has the legacy SKU-ish columns. + pv = sa.table( + "product_versions", + sa.column("id", postgresql.UUID(as_uuid=True)), + sa.column("product_id", postgresql.UUID(as_uuid=True)), + sa.column("units", sa.Unicode()), + sa.column("price", sa.Numeric(15, 2)), + sa.column("quantity", sa.Numeric(15, 2)), + sa.column("has_happy_hour", sa.Boolean()), + sa.column("is_not_available", sa.Boolean()), + sa.column("sort_order", sa.Integer()), + sa.column("menu_category_id", postgresql.UUID(as_uuid=True)), + sa.column("valid_from", sa.Date()), + sa.column("valid_till", sa.Date()), + ) + + # Insert one sku_versions row per product_versions row + sku_versions = sa.table( + "sku_versions", + sa.column("id", postgresql.UUID(as_uuid=True)), + sa.column("sku_id", postgresql.UUID(as_uuid=True)), + sa.column("units", sa.Unicode()), + sa.column("fraction", sa.Numeric(15, 5)), + sa.column("product_yield", sa.Numeric(15, 5)), + sa.column("cost_price", sa.Numeric(15, 2)), + sa.column("sale_price", sa.Numeric(15, 2)), + sa.column("has_happy_hour", sa.Boolean()), + sa.column("sort_order", sa.Integer()), + sa.column("menu_category_id", postgresql.UUID(as_uuid=True)), + sa.column("valid_from", sa.Date()), + sa.column("valid_till", sa.Date()), + ) + + # Join: product_versions.product_id -> stock_keeping_units.product_id (single SKU per product) + # Mapping rules (based on old vs new models you showed): + # - units -> units + # - fraction -> 1.0 (since old PV had quantity/units rather than fraction) + # - product_yield -> quantity (old PV.quantity) + # - cost_price -> 0.0 (not present in old PV) + # - sale_price -> price (old PV.price) + # - has_happy_hour -> has_happy_hour + # - sort_order -> sort_order + # - menu_category_id -> menu_category_id + # - valid_from/till -> valid_from/till + # + # Also propagate is_not_available to the SKU row: + op.execute( + sa.text( + """ + UPDATE stock_keeping_units sku + SET is_not_available = pv.is_not_available + FROM product_versions pv + WHERE pv.product_id = sku.product_id + AND pv.valid_till IS NULL + """ + ) + ) + + op.execute( + sku_versions.insert().from_select( + [ + "id", + "sku_id", + "units", + "fraction", + "product_yield", + "cost_price", + "sale_price", + "has_happy_hour", + "sort_order", + "menu_category_id", + "valid_from", + "valid_till", + ], + sa.select( + sa.func.gen_random_uuid(), + stock_keeping_units.c.id, + pv.c.units, + sa.cast(1.0, sa.Numeric(15, 5)), + sa.cast(1.0, sa.Numeric(15, 5)), + sa.cast(0.0, sa.Numeric(15, 2)), + sa.cast(pv.c.price, sa.Numeric(15, 2)), + pv.c.has_happy_hour, + pv.c.sort_order, + pv.c.menu_category_id, + pv.c.valid_from, + pv.c.valid_till, + ).select_from(pv.join(stock_keeping_units, stock_keeping_units.c.product_id == pv.c.product_id)), + ) + ) + + # --------------------------------------------------------------------- + # 4) Update foreign keys from product_versions to sku_version + # --------------------------------------------------------------------- + op.drop_constraint(op.f("fk_inventories_product_id_products"), "inventories", type_="foreignkey") + op.alter_column("inventories", "product_id", new_column_name="sku_id") + op.execute( + sa.text( + """ + UPDATE inventories i + SET sku_id = sku.id + FROM stock_keeping_units sku + WHERE i.sku_id = sku.product_id + """ + ) + ) + op.create_foreign_key( + op.f("fk_inventories_sku_id_stock_keeping_units"), "inventories", "stock_keeping_units", ["sku_id"], ["id"] + ) + + # --------------------------------------------------------------------- + # 5) Drop old columns from product_versions + # --------------------------------------------------------------------- + op.alter_column("product_versions", "units", new_column_name="fraction_units") + op.drop_constraint(op.f("fk_products_menu_category_id_menu_categories"), "product_versions", type_="foreignkey") + for col in ["price", "quantity", "has_happy_hour", "is_not_available", "menu_category_id"]: + op.drop_column("product_versions", col) + + +def downgrade(): + # You can implement if you need it; left explicit to avoid accidental data loss assumptions. + raise NotImplementedError("Downgrade not implemented") diff --git a/barker/barker/db/base.py b/barker/barker/db/base.py index 61d8c49a..2316f3e7 100644 --- a/barker/barker/db/base.py +++ b/barker/barker/db/base.py @@ -1,39 +1,84 @@ # Import all the models, so that Base has them before being # imported by Alembic -from ..models.bill import Bill # noqa: F401 -from ..models.customer import Customer # noqa: F401 -from ..models.customer_discount import CustomerDiscount # noqa: F401 -from ..models.db_setting import DbSetting # noqa: F401 -from ..models.device import Device # noqa: F401 -from ..models.food_table import FoodTable # noqa: F401 -from ..models.guest_book import GuestBook # noqa: F401 -from ..models.inventory import Inventory # noqa: F401 -from ..models.inventory_modifier import InventoryModifier # noqa: F401 -from ..models.kot import Kot # noqa: F401 -from ..models.login_history import LoginHistory # noqa: F401 -from ..models.menu_category import MenuCategory # noqa: F401 -from ..models.modifier import Modifier # noqa: F401 -from ..models.modifier_category import ModifierCategory # noqa: F401 -from ..models.modifier_category_product import ModifierCategoryProduct # noqa: F401 -from ..models.overview import Overview # noqa: F401 -from ..models.overview_status import OverviewStatus # noqa: F401 -from ..models.permission import Permission # noqa: F401 -from ..models.printer import Printer # noqa: F401 -from ..models.product import Product # noqa: F401 -from ..models.product_version import ProductVersion # noqa: F401 -from ..models.regime import Regime # noqa: F401 -from ..models.reporting_level import ReportingLevel # noqa: F401 -from ..models.reprint import Reprint # noqa: F401 -from ..models.role import Role # noqa: F401 -from ..models.role_permission import RolePermission # noqa: F401 -from ..models.sale_category import SaleCategory # noqa: F401 -from ..models.section import Section # noqa: F401 -from ..models.section_printer import SectionPrinter # noqa: F401 -from ..models.settle_option import SettleOption # noqa: F401 -from ..models.settlement import Settlement # noqa: F401 -from ..models.tax import Tax # noqa: F401 -from ..models.user import User # noqa: F401 -from ..models.user_role import UserRole # noqa: F401 +from ..models.bill import Bill +from ..models.customer import Customer +from ..models.customer_discount import CustomerDiscount +from ..models.db_setting import DbSetting +from ..models.device import Device +from ..models.food_table import FoodTable +from ..models.guest_book import GuestBook +from ..models.inventory import Inventory +from ..models.inventory_modifier import InventoryModifier +from ..models.kot import Kot +from ..models.login_history import LoginHistory +from ..models.menu_category import MenuCategory +from ..models.modifier import Modifier +from ..models.modifier_category import ModifierCategory +from ..models.modifier_category_product import ModifierCategoryProduct +from ..models.overview import Overview +from ..models.overview_status import OverviewStatus +from ..models.permission import Permission +from ..models.printer import Printer +from ..models.product import Product +from ..models.product_version import ProductVersion +from ..models.regime import Regime +from ..models.reporting_level import ReportingLevel +from ..models.reprint import Reprint +from ..models.role import Role +from ..models.role_permission import RolePermission +from ..models.sale_category import SaleCategory +from ..models.section import Section +from ..models.section_printer import SectionPrinter +from ..models.settle_option import SettleOption +from ..models.settlement import Settlement +from ..models.sku_version import SkuVersion +from ..models.stock_keeping_unit import StockKeepingUnit +from ..models.tax import Tax +from ..models.user import User +from ..models.user_role import UserRole from ..models.voucher import Voucher # noqa -from ..models.voucher_type import VoucherType # noqa: F401 -from .base_class import reg # noqa: F401 +from ..models.voucher_type import VoucherType +from .base_class import reg + + +__all__ = [ + "Bill", + "Customer", + "CustomerDiscount", + "DbSetting", + "Device", + "FoodTable", + "GuestBook", + "Inventory", + "InventoryModifier", + "Kot", + "LoginHistory", + "MenuCategory", + "Modifier", + "ModifierCategory", + "ModifierCategoryProduct", + "Overview", + "OverviewStatus", + "Permission", + "Printer", + "Product", + "ProductVersion", + "Regime", + "ReportingLevel", + "Reprint", + "Role", + "RolePermission", + "SaleCategory", + "Section", + "SectionPrinter", + "SettleOption", + "Settlement", + "SkuVersion", + "StockKeepingUnit", + "Tax", + "User", + "UserRole", + "Voucher", + "VoucherType", + "reg", +] diff --git a/barker/barker/main.py b/barker/barker/main.py index d6b7dbf9..fe635742 100644 --- a/barker/barker/main.py +++ b/barker/barker/main.py @@ -1,7 +1,8 @@ import uvicorn from fastapi import FastAPI -from fastapi.staticfiles import StaticFiles + +# from fastapi.staticfiles import StaticFiles from starlette.middleware.sessions import SessionMiddleware from .core.config import settings @@ -119,7 +120,7 @@ app.include_router(split.router, prefix="/api", tags=["voucher"]) app.include_router(change.router, prefix="/api/voucher", tags=["voucher"]) app.include_router(health.router, prefix="/health", tags=["health"]) -app.mount("/static", StaticFiles(directory="static"), name="static") +# app.mount("/static", StaticFiles(directory="static"), name="static") def init() -> None: diff --git a/barker/barker/models/bill.py b/barker/barker/models/bill.py index 58aa4d03..c6f22877 100644 --- a/barker/barker/models/bill.py +++ b/barker/barker/models/bill.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from typing import TYPE_CHECKING @@ -27,8 +29,8 @@ class Bill: is_valid: Mapped[bool] = mapped_column(Boolean, nullable=False) bill_number: Mapped[int] = mapped_column(Integer, nullable=False) - voucher: Mapped["Voucher"] = relationship(back_populates="bills") - regime: Mapped["Regime"] = relationship(back_populates="bills") + voucher: Mapped[Voucher] = relationship(back_populates="bills") + regime: Mapped[Regime] = relationship(back_populates="bills") def __init__(self, regime_id: int, is_valid: bool, bill_number: int): self.regime_id = regime_id diff --git a/barker/barker/models/customer.py b/barker/barker/models/customer.py index c26be20f..e17d9a6b 100644 --- a/barker/barker/models/customer.py +++ b/barker/barker/models/customer.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from typing import TYPE_CHECKING @@ -24,7 +26,7 @@ class Customer: print_in_bill: Mapped[bool] = mapped_column(Boolean, server_default=expression.false(), nullable=False) - discounts: Mapped[list["CustomerDiscount"]] = relationship(back_populates="customer") + discounts: Mapped[list[CustomerDiscount]] = relationship(back_populates="customer") def __init__(self, name: str, phone: str, address: str | None, print_in_bill: bool, id_: uuid.UUID | None = None): self.name = name diff --git a/barker/barker/models/customer_discount.py b/barker/barker/models/customer_discount.py index 1b0d0f7f..d77a6e9d 100644 --- a/barker/barker/models/customer_discount.py +++ b/barker/barker/models/customer_discount.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from datetime import UTC, datetime @@ -25,8 +27,8 @@ class CustomerDiscount: sale_category_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("sale_categories.id"), nullable=False) discount: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=5), nullable=False) - customer: Mapped["Customer"] = relationship(back_populates="discounts") - sale_category: Mapped["SaleCategory"] = relationship("SaleCategory") + customer: Mapped[Customer] = relationship(back_populates="discounts") + sale_category: Mapped[SaleCategory] = relationship("SaleCategory") def __init__( self, @@ -34,7 +36,7 @@ class CustomerDiscount: discount: Decimal, id_: uuid.UUID | None = None, customer_id: uuid.UUID | None = None, - customer: "Customer | None" = None, + customer: Customer | None = None, ): self.sale_category_id = sale_category_id self.discount = discount diff --git a/barker/barker/models/device.py b/barker/barker/models/device.py index afa36e5a..f8f852ac 100644 --- a/barker/barker/models/device.py +++ b/barker/barker/models/device.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import random import string import uuid @@ -26,10 +28,8 @@ class Device: section_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("sections.id"), nullable=False) creation_date: Mapped[datetime] = mapped_column(DateTime(), nullable=False) - section: Mapped["Section"] = relationship(back_populates="devices") - login_history: Mapped[list["LoginHistory"]] = relationship( - order_by=desc(LoginHistory.date), back_populates="device" - ) + section: Mapped[Section] = relationship(back_populates="devices") + login_history: Mapped[list[LoginHistory]] = relationship(order_by=desc(LoginHistory.date), back_populates="device") def __init__( self, @@ -47,7 +47,7 @@ class Device: self.id = id_ @classmethod - def create(cls, db: Session) -> "Device": + def create(cls, db: Session) -> Device: main_section = uuid.UUID("3f13f6e7-dc76-4fca-8fdb-b2bbf29b35df") name = "".join(random.choices(string.ascii_lowercase + string.digits, k=6)) device = Device(name, False, main_section) diff --git a/barker/barker/models/food_table.py b/barker/barker/models/food_table.py index d72c87d0..483c9eda 100644 --- a/barker/barker/models/food_table.py +++ b/barker/barker/models/food_table.py @@ -1,6 +1,8 @@ +from __future__ import annotations + import uuid -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING from sqlalchemy import Boolean, ForeignKey, Integer, Text, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -24,8 +26,8 @@ class FoodTable: is_active: Mapped[bool] = mapped_column(Boolean, nullable=False) sort_order: Mapped[int] = mapped_column(Integer, nullable=False) - section: Mapped["Section"] = relationship("Section", foreign_keys=section_id) - status: Mapped[Optional["Overview"]] = relationship(back_populates="food_table", uselist=False) + section: Mapped[Section] = relationship("Section", foreign_keys=section_id) + status: Mapped[Overview | None] = relationship(back_populates="food_table", uselist=False) def __init__( self, diff --git a/barker/barker/models/guest_book.py b/barker/barker/models/guest_book.py index 31e2aa97..154c0f48 100644 --- a/barker/barker/models/guest_book.py +++ b/barker/barker/models/guest_book.py @@ -1,7 +1,9 @@ +from __future__ import annotations + import uuid from datetime import UTC, datetime -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING from sqlalchemy import ( CheckConstraint, @@ -38,8 +40,8 @@ class GuestBook: notes: Mapped[str | None] = mapped_column(Text, nullable=True) type_: Mapped[GuestBookType] = mapped_column("type", Enum(GuestBookType), nullable=False) - customer: Mapped["Customer"] = relationship("Customer") - status: Mapped[Optional["Overview"]] = relationship(back_populates="guest", uselist=False) + customer: Mapped[Customer] = relationship("Customer") + status: Mapped[Overview | None] = relationship(back_populates="guest", uselist=False) def __init__( self, @@ -49,7 +51,7 @@ class GuestBook: notes: str | None, type_: GuestBookType, customer_id: uuid.UUID | None = None, - customer: "Customer | None " = None, + customer: Customer | None = None, id_: uuid.UUID | None = None, ): if customer_id is not None: diff --git a/barker/barker/models/inventory.py b/barker/barker/models/inventory.py index f6bdb4a4..d2dea1ae 100644 --- a/barker/barker/models/inventory.py +++ b/barker/barker/models/inventory.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from decimal import Decimal @@ -20,23 +22,23 @@ from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg -from .product import Product +from .tax import Tax if TYPE_CHECKING: from .inventory_modifier import InventoryModifier from .kot import Kot - from .tax import Tax + from .stock_keeping_unit import StockKeepingUnit @reg.mapped_as_dataclass(unsafe_hash=True) class Inventory: __tablename__ = "inventories" - __table_args__ = (UniqueConstraint("kot_id", "product_id", "is_happy_hour", "price"),) + __table_args__ = (UniqueConstraint("kot_id", "sku_id", "is_happy_hour", "price"),) id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, server_default=text("gen_random_uuid()")) kot_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("kots.id"), nullable=False, index=True) - product_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("products.id"), nullable=False) + sku_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("stock_keeping_units.id"), nullable=False) quantity: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) price: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) is_happy_hour: Mapped[bool] = mapped_column(Boolean, nullable=False) @@ -45,16 +47,16 @@ class Inventory: discount: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=5), nullable=False) sort_order: Mapped[int] = mapped_column(Integer, nullable=False) - kot: Mapped["Kot"] = relationship(back_populates="inventories") - tax: Mapped["Tax"] = relationship(back_populates="inventories") - product: Mapped["Product"] = relationship(back_populates="inventories") + kot: Mapped[Kot] = relationship(back_populates="inventories") + tax: Mapped[Tax] = relationship(back_populates="inventories") + sku: Mapped[StockKeepingUnit] = relationship(back_populates="inventories") - modifiers: Mapped[list["InventoryModifier"]] = relationship(back_populates="inventory") + modifiers: Mapped[list[InventoryModifier]] = relationship(back_populates="inventory") def __init__( self, kot_id: uuid.UUID, - product_id: uuid.UUID | None, + sku_id: uuid.UUID | None, quantity: Decimal, price: Decimal, discount: Decimal, @@ -62,12 +64,12 @@ class Inventory: tax_id: uuid.UUID | None, tax_rate: Decimal, sort_order: int, - product: "Product | None" = None, - tax: "Tax | None" = None, + sku: StockKeepingUnit | None = None, + tax: Tax | None = None, ): self.kot_id = kot_id - if product_id is not None: - self.product_id = product_id + if sku_id is not None: + self.sku_id = sku_id self.quantity = quantity self.price = price self.discount = discount @@ -76,8 +78,8 @@ class Inventory: self.tax_id = tax_id self.tax_rate = tax_rate self.sort_order = sort_order - if product is not None: - self.product = product + if sku is not None: + self.sku = sku if tax is not None: self.tax = tax diff --git a/barker/barker/models/inventory_modifier.py b/barker/barker/models/inventory_modifier.py index 98106624..3adf8152 100644 --- a/barker/barker/models/inventory_modifier.py +++ b/barker/barker/models/inventory_modifier.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from decimal import Decimal @@ -24,8 +26,8 @@ class InventoryModifier: modifier_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("modifiers.id"), nullable=False) price: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) - inventory: Mapped["Inventory"] = relationship(back_populates="modifiers") - modifier: Mapped["Modifier"] = relationship("Modifier") + inventory: Mapped[Inventory] = relationship(back_populates="modifiers") + modifier: Mapped[Modifier] = relationship("Modifier") def __init__(self, inventory_id: uuid.UUID | None, modifier_id: uuid.UUID | None, price: Decimal): if inventory_id is not None: diff --git a/barker/barker/models/kot.py b/barker/barker/models/kot.py index 3a6ed6ca..076796cb 100644 --- a/barker/barker/models/kot.py +++ b/barker/barker/models/kot.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from datetime import datetime @@ -36,10 +38,10 @@ class Kot: date: Mapped[datetime] = mapped_column(DateTime, nullable=False, index=True) user_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("users.id"), nullable=False) - voucher: Mapped["Voucher"] = relationship(back_populates="kots") - user: Mapped["User"] = relationship(backref="kots") - food_table: Mapped["FoodTable"] = relationship(backref="kots") - inventories: Mapped[list["Inventory"]] = relationship(back_populates="kot") + voucher: Mapped[Voucher] = relationship(back_populates="kots") + user: Mapped[User] = relationship(backref="kots") + food_table: Mapped[FoodTable] = relationship(backref="kots") + inventories: Mapped[list[Inventory]] = relationship(back_populates="kot") def __init__( self, diff --git a/barker/barker/models/login_history.py b/barker/barker/models/login_history.py index 6fe06ba0..1a53794c 100644 --- a/barker/barker/models/login_history.py +++ b/barker/barker/models/login_history.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from datetime import UTC, datetime @@ -27,8 +29,8 @@ class LoginHistory: ) date: Mapped[datetime] = mapped_column(DateTime(), nullable=False) - device: Mapped["Device"] = relationship(back_populates="login_history") - user: Mapped["User"] = relationship(back_populates="login_history") + device: Mapped[Device] = relationship(back_populates="login_history") + user: Mapped[User] = relationship(back_populates="login_history") def __init__( self, diff --git a/barker/barker/models/menu_category.py b/barker/barker/models/menu_category.py index c433be5a..f660d768 100644 --- a/barker/barker/models/menu_category.py +++ b/barker/barker/models/menu_category.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from typing import TYPE_CHECKING @@ -9,7 +11,7 @@ from ..db.base_class import reg if TYPE_CHECKING: - from .product_version import ProductVersion + from .sku_version import SkuVersion @reg.mapped_as_dataclass(unsafe_hash=True) @@ -23,7 +25,7 @@ class MenuCategory: is_fixture: Mapped[bool] = mapped_column(Boolean, nullable=False) sort_order: Mapped[int] = mapped_column(Integer, nullable=False) - products: Mapped[list["ProductVersion"]] = relationship(back_populates="menu_category") + skus: Mapped[list[SkuVersion]] = relationship(back_populates="menu_category") def __init__( self, name: str, is_active: bool, sort_order: int, is_fixture: bool = False, id_: uuid.UUID | None = None diff --git a/barker/barker/models/modifier.py b/barker/barker/models/modifier.py index 55c31f9e..fd9e1c96 100644 --- a/barker/barker/models/modifier.py +++ b/barker/barker/models/modifier.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from decimal import Decimal @@ -28,7 +30,7 @@ class Modifier: nullable=False, ) - modifier_category: Mapped["ModifierCategory"] = relationship(back_populates="modifiers") + modifier_category: Mapped[ModifierCategory] = relationship(back_populates="modifiers") def __init__( self, diff --git a/barker/barker/models/modifier_category.py b/barker/barker/models/modifier_category.py index 4307c9c8..e3dc943f 100644 --- a/barker/barker/models/modifier_category.py +++ b/barker/barker/models/modifier_category.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from typing import TYPE_CHECKING @@ -25,11 +27,11 @@ class ModifierCategory: is_active: Mapped[bool] = mapped_column(Boolean, nullable=False) sort_order: Mapped[int] = mapped_column(Integer, nullable=False) - products: Mapped[list["Product"]] = relationship( + products: Mapped[list[Product]] = relationship( secondary=ModifierCategoryProduct.__table__, back_populates="modifier_categories", ) - modifiers: Mapped[list["Modifier"]] = relationship(back_populates="modifier_category") + modifiers: Mapped[list[Modifier]] = relationship(back_populates="modifier_category") def __init__( self, diff --git a/barker/barker/models/permission.py b/barker/barker/models/permission.py index 1f084f31..bdff9335 100644 --- a/barker/barker/models/permission.py +++ b/barker/barker/models/permission.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from typing import TYPE_CHECKING @@ -20,7 +22,7 @@ class Permission: id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, server_default=text("gen_random_uuid()")) name: Mapped[str] = mapped_column(Text, unique=True, nullable=False) - roles: Mapped[list["Role"]] = relationship( + roles: Mapped[list[Role]] = relationship( secondary=RolePermission.__table__, back_populates="permissions", ) diff --git a/barker/barker/models/product.py b/barker/barker/models/product.py index 04a50767..7faff96a 100644 --- a/barker/barker/models/product.py +++ b/barker/barker/models/product.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from typing import TYPE_CHECKING @@ -10,18 +12,18 @@ from .modifier_category_product import ModifierCategoryProduct if TYPE_CHECKING: - from .inventory import Inventory from .modifier_category import ModifierCategory from .product_version import ProductVersion + from .stock_keeping_unit import StockKeepingUnit @reg.mapped_as_dataclass(unsafe_hash=True) class Product: __tablename__ = "products" id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, server_default=text("gen_random_uuid()")) - versions: Mapped[list["ProductVersion"]] = relationship(back_populates="product") - inventories: Mapped[list["Inventory"]] = relationship(back_populates="product") - modifier_categories: Mapped[list["ModifierCategory"]] = relationship( + versions: Mapped[list[ProductVersion]] = relationship(back_populates="product") + skus: Mapped[list[StockKeepingUnit]] = relationship("StockKeepingUnit", back_populates="product") + modifier_categories: Mapped[list[ModifierCategory]] = relationship( "ModifierCategory", secondary=ModifierCategoryProduct.__table__, order_by="ModifierCategory.sort_order", diff --git a/barker/barker/models/product_version.py b/barker/barker/models/product_version.py index db7549c6..a0178c17 100644 --- a/barker/barker/models/product_version.py +++ b/barker/barker/models/product_version.py @@ -1,31 +1,27 @@ +from __future__ import annotations + import uuid from datetime import date -from decimal import Decimal from typing import TYPE_CHECKING from sqlalchemy import ( - Boolean, Date, ForeignKey, Integer, - Numeric, Text, Uuid, - case, func, text, ) from sqlalchemy.dialects import postgresql -from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg -from .product import Product if TYPE_CHECKING: - from .menu_category import MenuCategory + from .product import Product from .sale_category import SaleCategory @@ -35,40 +31,28 @@ class ProductVersion: id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, server_default=text("gen_random_uuid()")) product_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("products.id"), nullable=False) name: Mapped[str] = mapped_column(Text, nullable=False) - units: Mapped[str] = mapped_column(Text, nullable=False) - menu_category_id: Mapped[uuid.UUID] = mapped_column( - Uuid, - ForeignKey("menu_categories.id"), - nullable=False, - ) + fraction_units: Mapped[str] = mapped_column(Text, nullable=False) sale_category_id: Mapped[uuid.UUID] = mapped_column( Uuid, ForeignKey("sale_categories.id"), nullable=False, ) - price: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) - has_happy_hour: Mapped[bool] = mapped_column(Boolean, nullable=False) - is_not_available: Mapped[bool] = mapped_column(Boolean, nullable=False) - quantity: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) sort_order: Mapped[int] = mapped_column(Integer, nullable=False) valid_from: Mapped[date | None] = mapped_column(Date(), nullable=True) valid_till: Mapped[date | None] = mapped_column(Date(), nullable=True) - menu_category: Mapped["MenuCategory"] = relationship(back_populates="products") - sale_category: Mapped["SaleCategory"] = relationship(back_populates="products") + sale_category: Mapped[SaleCategory] = relationship(back_populates="products") - product: Mapped["Product"] = relationship(back_populates="versions") + product: Mapped[Product] = relationship(back_populates="versions") __table_args__ = ( postgresql.ExcludeConstraint( (name, "="), - (units, "="), (func.daterange(valid_from, valid_till, text("'[]'")), "&&"), ), postgresql.ExcludeConstraint( (product_id, "="), - (units, "="), (func.daterange(valid_from, valid_till, text("'[]'")), "&&"), ), ) @@ -76,38 +60,21 @@ class ProductVersion: def __init__( self, product_id: uuid.UUID, - name: str, - units: str, - menu_category_id: uuid.UUID, - sale_category_id: uuid.UUID, - price: Decimal, - has_happy_hour: bool, - is_not_available: bool, - quantity: Decimal, - valid_from: date | None, - valid_till: date | None, + name: str = "", + fraction_units: str = "", + sale_category_id: uuid.UUID | None = None, + valid_from: date | None = None, + valid_till: date | None = None, sort_order: int = 0, id_: uuid.UUID | None = None, ): self.product_id = product_id self.name = name - self.units = units - self.menu_category_id = menu_category_id - self.sale_category_id = sale_category_id - self.price = price - self.has_happy_hour = has_happy_hour - self.is_not_available = is_not_available - self.quantity = quantity + self.fraction_units = fraction_units + if sale_category_id is not None: + self.sale_category_id = sale_category_id self.valid_from = valid_from self.valid_till = valid_till self.sort_order = sort_order if id_ is not None: self.id = id_ - - @hybrid_property - def full_name(self) -> str: - return f"{self.name} ({self.units})" if self.units else self.name - - @full_name.inplace.expression - def _full_name_expression(cls): - return cls.name + case((cls.units != "", " (" + cls.units + ")"), else_="") diff --git a/barker/barker/models/regime.py b/barker/barker/models/regime.py index 69d100cc..249b948d 100644 --- a/barker/barker/models/regime.py +++ b/barker/barker/models/regime.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING from sqlalchemy import Boolean, Integer, Text @@ -21,8 +23,8 @@ class Regime: prefix: Mapped[str] = mapped_column(Text, nullable=False, unique=True) is_fixture: Mapped[bool] = mapped_column(Boolean, nullable=False) - taxes: Mapped[list["Tax"]] = relationship(back_populates="regime") - bills: Mapped[list["Bill"]] = relationship(back_populates="regime") + taxes: Mapped[list[Tax]] = relationship(back_populates="regime") + bills: Mapped[list[Bill]] = relationship(back_populates="regime") def __init__(self, id: int, name: str, header: str, prefix: str, is_fixture: bool = False): self.id = id diff --git a/barker/barker/models/reprint.py b/barker/barker/models/reprint.py index 520869f5..c9851389 100644 --- a/barker/barker/models/reprint.py +++ b/barker/barker/models/reprint.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from datetime import UTC, datetime @@ -28,8 +30,8 @@ class Reprint: ) user_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("users.id"), nullable=False) - user: Mapped["User"] = relationship(backref="reprints") - voucher: Mapped["Voucher"] = relationship(back_populates="reprints") + user: Mapped[User] = relationship(backref="reprints") + voucher: Mapped[Voucher] = relationship(back_populates="reprints") def __init__(self, voucher_id: uuid.UUID, user_id: uuid.UUID, id_: uuid.UUID | None = None): if id_ is not None: diff --git a/barker/barker/models/role.py b/barker/barker/models/role.py index 8f1b7eba..abc8f729 100644 --- a/barker/barker/models/role.py +++ b/barker/barker/models/role.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from typing import TYPE_CHECKING @@ -20,7 +22,7 @@ class Role: id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, server_default=text("gen_random_uuid()")) name: Mapped[str] = mapped_column(Text, unique=True, nullable=False) - permissions: Mapped[list["Permission"]] = relationship( + permissions: Mapped[list[Permission]] = relationship( "Permission", secondary=RolePermission.__table__, back_populates="roles", diff --git a/barker/barker/models/sale_category.py b/barker/barker/models/sale_category.py index 273a9807..63e73d59 100644 --- a/barker/barker/models/sale_category.py +++ b/barker/barker/models/sale_category.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from decimal import Decimal @@ -23,8 +25,8 @@ class SaleCategory: discount_limit: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=5), nullable=False) tax_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("taxes.id"), nullable=False) - tax: Mapped["Tax"] = relationship(back_populates="sale_categories") - products: Mapped[list["ProductVersion"]] = relationship(back_populates="sale_category") + tax: Mapped[Tax] = relationship(back_populates="sale_categories") + products: Mapped[list[ProductVersion]] = relationship(back_populates="sale_category") def __init__(self, name: str, discount_limit: Decimal, tax_id: uuid.UUID, id_: uuid.UUID | None = None): self.name = name diff --git a/barker/barker/models/section.py b/barker/barker/models/section.py index 5858f69a..dc41538e 100644 --- a/barker/barker/models/section.py +++ b/barker/barker/models/section.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from typing import TYPE_CHECKING @@ -20,7 +22,7 @@ class Section: name: Mapped[str] = mapped_column(Text, unique=True, nullable=False) is_fixture: Mapped[bool] = mapped_column(Boolean, nullable=False, insert_default=False) - devices: Mapped[list["Device"]] = relationship(back_populates="section") + devices: Mapped[list[Device]] = relationship(back_populates="section") def __init__(self, name: str, is_fixture: bool = False, id_: uuid.UUID | None = None): if id_ is not None: diff --git a/barker/barker/models/section_printer.py b/barker/barker/models/section_printer.py index 33415aa1..8cf5b60e 100644 --- a/barker/barker/models/section_printer.py +++ b/barker/barker/models/section_printer.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from typing import TYPE_CHECKING @@ -25,9 +27,9 @@ class SectionPrinter: printer_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("printers.id"), nullable=False) copies: Mapped[int] = mapped_column(Integer, nullable=False) - sale_category: Mapped["SaleCategory"] = relationship(backref="section_printers") - section: Mapped["Section"] = relationship(backref="section_printers") - printer: Mapped["Printer"] = relationship(backref="section_printers") + sale_category: Mapped[SaleCategory] = relationship(backref="section_printers") + section: Mapped[Section] = relationship(backref="section_printers") + printer: Mapped[Printer] = relationship(backref="section_printers") def __init__( self, diff --git a/barker/barker/models/settlement.py b/barker/barker/models/settlement.py index e9f065d3..03b158fb 100644 --- a/barker/barker/models/settlement.py +++ b/barker/barker/models/settlement.py @@ -29,8 +29,8 @@ class Settlement: settled: Mapped[int] = mapped_column(Integer, ForeignKey("settle_options.id"), nullable=False) amount: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) - settle_option: Mapped["SettleOption"] = relationship("SettleOption") - voucher: Mapped["Voucher"] = relationship(back_populates="settlements") + settle_option: Mapped[SettleOption] = relationship("SettleOption") + voucher: Mapped[Voucher] = relationship(back_populates="settlements") def __init__(self, voucher_id: uuid.UUID, settled: int, amount: Decimal, id_: uuid.UUID | None = None): if id_ is not None: diff --git a/barker/barker/models/sku_version.py b/barker/barker/models/sku_version.py new file mode 100644 index 00000000..900971b4 --- /dev/null +++ b/barker/barker/models/sku_version.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +import uuid + +from datetime import date +from decimal import Decimal +from typing import TYPE_CHECKING + +from sqlalchemy import Boolean, Date, ForeignKey, Integer, Numeric, Unicode, Uuid, func, text +from sqlalchemy.dialects import postgresql +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from ..db.base_class import reg + + +if TYPE_CHECKING: + from .menu_category import MenuCategory + from .stock_keeping_unit import StockKeepingUnit + + +@reg.mapped_as_dataclass(unsafe_hash=True) +class SkuVersion: + __tablename__ = "sku_versions" + + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) + sku_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("stock_keeping_units.id"), nullable=False) + units: Mapped[str] = mapped_column( + Unicode, nullable=False + ) # Need to have logic in the application to handle unit uniqueness since we don't have product_id here + fraction: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=5), nullable=False) + product_yield: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=5), nullable=False) + cost_price: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) + sale_price: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) + has_happy_hour: Mapped[bool] = mapped_column(Boolean, nullable=False) + sort_order: Mapped[int] = mapped_column(Integer, nullable=False) + menu_category_id: Mapped[uuid.UUID] = mapped_column( + Uuid, + ForeignKey("menu_categories.id"), + nullable=False, + ) + + valid_from: Mapped[date | None] = mapped_column(Date(), nullable=True) + valid_till: Mapped[date | None] = mapped_column(Date(), nullable=True) + + menu_category: Mapped[MenuCategory] = relationship(back_populates="skus") + sku: Mapped[StockKeepingUnit] = relationship("StockKeepingUnit", back_populates="versions") + + __table_args__ = ( + postgresql.ExcludeConstraint( + (units, "="), + (func.daterange(valid_from, valid_till, text("'[]'")), "&&"), + ), + postgresql.ExcludeConstraint( + (sku_id, "="), + (func.daterange(valid_from, valid_till, text("'[]'")), "&&"), + ), + ) + + def __init__( + self, + units: str = "", + fraction: Decimal = Decimal("1.0"), + product_yield: Decimal = Decimal("1.0"), + cost_price: Decimal = Decimal("0.0"), + sale_price: Decimal = Decimal("0.0"), + has_happy_hour: bool = False, + sort_order: int = 0, + menu_category_id: uuid.UUID | None = None, + sku_id: uuid.UUID | None = None, + sku: StockKeepingUnit | None = None, + id_: uuid.UUID | None = None, + valid_from: date | None = None, + valid_till: date | None = None, + ) -> None: + if sku_id is not None: + self.sku_id = sku_id + self.units = units + self.fraction = fraction + self.product_yield = product_yield + self.cost_price = cost_price + self.sale_price = sale_price + self.has_happy_hour = has_happy_hour + self.sort_order = sort_order + if menu_category_id is not None: + self.menu_category_id = menu_category_id + if id_ is not None: + self.id = id_ + if sku is not None: + self.sku = sku + self.valid_from = valid_from + self.valid_till = valid_till diff --git a/barker/barker/models/stock_keeping_unit.py b/barker/barker/models/stock_keeping_unit.py new file mode 100644 index 00000000..96592595 --- /dev/null +++ b/barker/barker/models/stock_keeping_unit.py @@ -0,0 +1,46 @@ +from __future__ import annotations + +import uuid + +from typing import TYPE_CHECKING + +from sqlalchemy import Boolean, ForeignKey, Uuid, text +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from ..db.base_class import reg + + +if TYPE_CHECKING: + from .inventory import Inventory + from .product import Product + from .sku_version import SkuVersion + + +@reg.mapped_as_dataclass(unsafe_hash=True) +class StockKeepingUnit: + __tablename__ = "stock_keeping_units" + + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) + product_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("products.id"), nullable=False) + is_not_available: Mapped[bool] = mapped_column(Boolean, nullable=False) + + product: Mapped[Product] = relationship("Product", back_populates="skus") + inventories: Mapped[list[Inventory]] = relationship(back_populates="sku") + versions: Mapped[list[SkuVersion]] = relationship(back_populates="sku") + + def __init__( + self, + is_not_available: bool = False, + product_id: uuid.UUID | None = None, + product: Product | None = None, + id_: uuid.UUID | None = None, + ) -> None: + self.is_not_available = is_not_available + if product_id is not None: + self.product_id = product_id + if id_ is not None: + self.id = id_ + if product is not None: + self.product = product diff --git a/barker/barker/models/tax.py b/barker/barker/models/tax.py index d7ca0fac..04f87b99 100644 --- a/barker/barker/models/tax.py +++ b/barker/barker/models/tax.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import uuid from decimal import Decimal @@ -25,9 +27,9 @@ class Tax: regime_id: Mapped[int] = mapped_column(Integer, ForeignKey("regimes.id"), nullable=False) is_fixture: Mapped[bool] = mapped_column(Boolean, nullable=False) - sale_categories: Mapped[list["SaleCategory"]] = relationship(back_populates="tax") - inventories: Mapped[list["Inventory"]] = relationship(back_populates="tax") - regime: Mapped["Regime"] = relationship(back_populates="taxes") + sale_categories: Mapped[list[SaleCategory]] = relationship(back_populates="tax") + inventories: Mapped[list[Inventory]] = relationship(back_populates="tax") + regime: Mapped[Regime] = relationship(back_populates="taxes") def __init__( self, name: str, rate: Decimal, regime_id: int, is_fixture: bool = False, id_: uuid.UUID | None = None diff --git a/barker/barker/models/voucher.py b/barker/barker/models/voucher.py index dbb9590c..2f8994ee 100644 --- a/barker/barker/models/voucher.py +++ b/barker/barker/models/voucher.py @@ -1,8 +1,10 @@ +from __future__ import annotations + import uuid from datetime import datetime from decimal import Decimal -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING from sqlalchemy import DateTime, Enum, ForeignKey, Integer, Text, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -43,28 +45,28 @@ class Voucher: voucher_type: Mapped[VoucherType] = mapped_column(Enum(VoucherType), nullable=False) user_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("users.id"), nullable=False) - user: Mapped["User"] = relationship(backref="vouchers") - food_table: Mapped["FoodTable"] = relationship(backref="vouchers") - customer: Mapped["Customer | None"] = relationship(backref="vouchers") + user: Mapped[User] = relationship(backref="vouchers") + food_table: Mapped[FoodTable] = relationship(backref="vouchers") + customer: Mapped[Customer | None] = relationship(backref="vouchers") - bills: Mapped[list["Bill"]] = relationship( + bills: Mapped[list[Bill]] = relationship( back_populates="voucher", cascade="delete, delete-orphan", ) - kots: Mapped[list["Kot"]] = relationship( + kots: Mapped[list[Kot]] = relationship( back_populates="voucher", cascade="delete, delete-orphan", order_by=Kot.code, ) - settlements: Mapped[list["Settlement"]] = relationship( + settlements: Mapped[list[Settlement]] = relationship( back_populates="voucher", cascade="delete, delete-orphan", ) - reprints: Mapped[list["Reprint"]] = relationship( + reprints: Mapped[list[Reprint]] = relationship( back_populates="voucher", cascade="delete, delete-orphan", ) - status: Mapped[Optional["Overview"]] = relationship(back_populates="voucher", uselist=False) + status: Mapped[Overview | None] = relationship(back_populates="voucher", uselist=False) def __init__( self, diff --git a/barker/barker/printing/__init__.py b/barker/barker/printing/__init__.py index 58ba0ce6..68a7cb14 100644 --- a/barker/barker/printing/__init__.py +++ b/barker/barker/printing/__init__.py @@ -1,7 +1,17 @@ import locale +import uuid +from datetime import date from decimal import Decimal +from sqlalchemy import and_, or_, select +from sqlalchemy.orm import Session, contains_eager + +from ..models.product import Product +from ..models.product_version import ProductVersion +from ..models.sku_version import SkuVersion +from ..models.stock_keeping_unit import StockKeepingUnit + def currency_format(amount: Decimal | int) -> str: return locale.currency(amount, symbol=False, grouping=True) @@ -9,3 +19,41 @@ def currency_format(amount: Decimal | int) -> str: def format_no_decimals(amount: Decimal | int) -> str: return locale.format_string("%d", amount, grouping=True, monetary=True) + + +def get_product_name(sku_id: uuid.UUID, date_: date, db: Session) -> str: + item = get_product(sku_id, date_, db) + return f"{item.sku.product.versions[0].name} ({item.units})" + + +def get_product(sku_id: uuid.UUID, date_: date, db: Session) -> SkuVersion: + product_version_onclause = and_( + ProductVersion.product_id == Product.id, + or_( + ProductVersion.valid_from == None, # noqa: E711 + ProductVersion.valid_from <= date_, + ), + or_( + ProductVersion.valid_till == None, # noqa: E711 + ProductVersion.valid_till >= date_, + ), + ) + sku_version_onclause = and_( + SkuVersion.sku_id == StockKeepingUnit.id, + or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711 + or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= date_), # noqa: E711 + ) + return ( + db.execute( + select(SkuVersion) + .join(StockKeepingUnit, onclause=sku_version_onclause) + .join(StockKeepingUnit.product) + .join(ProductVersion, onclause=product_version_onclause) + .where(SkuVersion.sku_id == sku_id) + .options( + contains_eager(SkuVersion.sku).contains_eager(StockKeepingUnit.product).contains_eager(Product.versions) + ) + ) + .unique() + .scalar_one() + ) diff --git a/barker/barker/printing/bill.py b/barker/barker/printing/bill.py index 547c6221..1ede7b1a 100644 --- a/barker/barker/printing/bill.py +++ b/barker/barker/printing/bill.py @@ -7,7 +7,7 @@ from datetime import timedelta from decimal import Decimal from arq import ArqRedis, create_pool -from sqlalchemy import and_, or_, select +from sqlalchemy import select from sqlalchemy.orm import Session from ..core.arq import settings as redis_settings @@ -16,11 +16,10 @@ from ..models.bill import Bill from ..models.db_setting import DbSetting from ..models.inventory import Inventory from ..models.printer import Printer -from ..models.product_version import ProductVersion from ..models.section_printer import SectionPrinter from ..models.voucher import Voucher from ..models.voucher_type import VoucherType -from . import currency_format, format_no_decimals +from . import currency_format, format_no_decimals, get_product_name def print_bill(voucher_id: uuid.UUID, db: Session) -> None: @@ -66,7 +65,7 @@ def get_inventories(voucher: Voucher) -> list[Inventory]: items_dict: dict[tuple[uuid.UUID, bool, Decimal, frozenset[uuid.UUID]], Inventory] = {} for i in [i for k in voucher.kots for i in k.inventories]: key = ( - i.product_id, + i.sku_id, i.is_happy_hour, i.discount, frozenset(m.modifier_id for m in i.modifiers if m.modifier.show_in_bill), @@ -75,13 +74,13 @@ def get_inventories(voucher: Voucher) -> list[Inventory]: items_dict[key].quantity += i.quantity else: items_dict[key] = Inventory( - product_id=i.product_id, + sku_id=i.sku_id, quantity=i.quantity, price=i.price, discount=i.discount, is_hh=i.is_happy_hour, tax_rate=i.tax_rate, - product=i.product, + sku=i.sku, tax=i.tax, kot_id=i.kot_id, tax_id=i.tax_id, @@ -133,7 +132,7 @@ def design_bill( db: Session, ) -> str: # Header - s = "\n\r" + db.execute(select(DbSetting).where(DbSetting.name == "Header")).scalar_one().data["Text"] + s = "\n\r" + header(db) # Bill Regime bill_object: Bill = db.execute( select(Bill) @@ -152,22 +151,8 @@ def design_bill( s += "\n\r" + "Qty. Particulars Price Amount" s += "\n\r" + "-" * 42 for inv in inventories: - product: ProductVersion = db.execute( - select(ProductVersion).where( - and_( - ProductVersion.product_id == inv.product_id, - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= product_date, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= product_date, - ), - ) - ) - ).scalar_one() - name = "H H " + product.full_name if inv.is_happy_hour else product.full_name + name = get_product_name(inv.sku_id, product_date, db) + name = "H H " + name if inv.is_happy_hour else name s += ( f"\n\r" f"{inv.quantity: >5.2f} {name:<22.22} {format_no_decimals(inv.price): >6}" @@ -204,7 +189,7 @@ def design_bill( s += "\n\r" + "-" * 42 s += "\n\r" + "Cashier : " + voucher.user.name - s += "\n\r" + db.execute(select(DbSetting).where(DbSetting.name == "Footer")).scalar_one().data["Text"] + s += "\n\r" + footer(db) return s @@ -214,7 +199,7 @@ def design_total( db: Session, ) -> str: # Header - s = "\n\r" + db.execute(select(DbSetting).where(DbSetting.name == "Header")).scalar_one().data["Text"] + s = "\n\r" + header(db) voucher_date = voucher.date + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES) s += "\n\r" + f"{voucher_date:%d-%b-%Y %H:%M} Table No.: {voucher.food_table.name} " @@ -234,5 +219,19 @@ def design_total( s += "\n\r" + "------------------------------------------" s += f"\n\r{'Total Amount :': >32} {currency_format(round(voucher.amount)): >9}" s += "\n\r" + "-" * 42 - s += "\n\r" + db.execute(select(DbSetting).where(DbSetting.name == "Footer")).scalar_one().data["Text"] + s += "\n\r" + footer(db) return s + + +def header(db: Session) -> str: + header = db.execute(select(DbSetting).where(DbSetting.name == "Header")).scalar_one().data["Text"] + if not isinstance(header, str): + raise ValueError('DbSetting "Header" is missing "Text" (str)') + return header + + +def footer(db: Session) -> str: + footer = db.execute(select(DbSetting).where(DbSetting.name == "Footer")).scalar_one().data["Text"] + if not isinstance(footer, str): + raise ValueError('DbSetting "Footer" is missing "Text" (str)') + return footer diff --git a/barker/barker/printing/kot.py b/barker/barker/printing/kot.py index 5201b68e..7f64d672 100644 --- a/barker/barker/printing/kot.py +++ b/barker/barker/printing/kot.py @@ -5,7 +5,7 @@ from datetime import timedelta from typing import Any from arq import ArqRedis, create_pool -from sqlalchemy import and_, or_, select +from sqlalchemy import or_, select from sqlalchemy.orm import Session from ..core.arq import settings as redis_settings @@ -13,9 +13,9 @@ from ..core.config import settings from ..models.inventory import Inventory from ..models.kot import Kot from ..models.printer import Printer -from ..models.product_version import ProductVersion from ..models.section_printer import SectionPrinter from ..models.voucher import Voucher +from . import get_product, get_product_name def design_kot(voucher: Voucher, kot: Kot, items: list[Inventory], copy_number: int, db: Session) -> str: @@ -41,22 +41,8 @@ def design_kot(voucher: Voucher, kot: Kot, items: list[Inventory], copy_number: + "".ljust(42, "-") ) for item in items: - product: ProductVersion = db.execute( - select(ProductVersion).where( - and_( - ProductVersion.product_id == item.product_id, - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= product_date, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= product_date, - ), - ) - ) - ).scalar_one() - name = "H H " + product.full_name if item.is_happy_hour else product.full_name + name = get_product_name(item.sku_id, product_date, db) + name = "H H " + name if item.is_happy_hour else name s += "\n\r" + f"{item.quantity:6.2} x {name:<33}" for m in item.modifiers: s += "\n\r" + f" --- {m.modifier.name:<32}" @@ -72,21 +58,7 @@ def print_kot(voucher_id: uuid.UUID, db: Session) -> None: voucher.date + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES - settings.NEW_DAY_OFFSET_MINUTES) ).date() for item in kot.inventories: - product: ProductVersion = db.execute( - select(ProductVersion).where( - and_( - ProductVersion.product_id == item.product_id, - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= product_date, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= product_date, - ), - ) - ) - ).scalar_one() + product = get_product(item.sku_id, product_date, db) row = db.execute( select(Printer, SectionPrinter.copies) @@ -94,7 +66,7 @@ def print_kot(voucher_id: uuid.UUID, db: Session) -> None: .where(SectionPrinter.section_id == voucher.food_table.section_id) .where( or_( - SectionPrinter.sale_category_id == product.sale_category_id, + SectionPrinter.sale_category_id == product.sku.product.versions[0].sale_category_id, SectionPrinter.sale_category_id == None, # noqa: E711 ) ) diff --git a/barker/barker/printing/product_sale_report.py b/barker/barker/printing/product_sale_report.py index adb1dc62..251c8f7d 100644 --- a/barker/barker/printing/product_sale_report.py +++ b/barker/barker/printing/product_sale_report.py @@ -13,10 +13,11 @@ from ..core.config import settings from ..models.device import Device from ..models.printer import Printer from ..models.section_printer import SectionPrinter +from ..schemas.menu_engineering_report import MeReport from ..schemas.product_sale_report import ProductSaleReport -def print_product_sale_report(report: ProductSaleReport, device_id: uuid.UUID, db: Session) -> None: +def print_product_sale_report(report: ProductSaleReport | MeReport, device_id: uuid.UUID, db: Session) -> None: locale.setlocale(locale.LC_MONETARY, "en_IN") data = design_product_sale_report(report) section_id = db.execute(select(Device.section_id).where(Device.id == device_id)).scalar_one() diff --git a/barker/barker/routers/menu_category.py b/barker/barker/routers/menu_category.py index 8d439753..3cd297b6 100644 --- a/barker/barker/routers/menu_category.py +++ b/barker/barker/routers/menu_category.py @@ -10,7 +10,7 @@ from sqlalchemy.exc import SQLAlchemyError from ..core.security import get_current_active_user as get_user from ..db.session import SessionFuture from ..models.menu_category import MenuCategory -from ..models.product_version import ProductVersion +from ..models.sku_version import SkuVersion from ..schemas import menu_category as schemas from ..schemas.user_token import UserToken from . import effective_date @@ -118,15 +118,15 @@ def show_list( user: UserToken = Depends(get_user), ) -> list[schemas.MenuCategory]: if p: - sq = select(distinct(ProductVersion.menu_category_id)).where( + sq = select(distinct(SkuVersion.menu_category_id)).where( and_( or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= date_, + SkuVersion.valid_from == None, # noqa: E711 + SkuVersion.valid_from <= date_, ), or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= date_, + SkuVersion.valid_till == None, # noqa: E711 + SkuVersion.valid_till >= date_, ), ) ) diff --git a/barker/barker/routers/modifier_category.py b/barker/barker/routers/modifier_category.py index f466c6c1..b27fd549 100644 --- a/barker/barker/routers/modifier_category.py +++ b/barker/barker/routers/modifier_category.py @@ -15,6 +15,9 @@ from ..models.modifier_category import ModifierCategory from ..models.product import Product from ..models.product_version import ProductVersion from ..schemas import modifier_category as schemas +from ..schemas.menu_category import MenuCategoryLink +from ..schemas.modifier_category_for_product import ModifierCategoryForProduct, ModifierLink +from ..schemas.product_link import ProductLink from ..schemas.product_link import ProductLink as ProductLinkSchema from ..schemas.user_token import UserToken from . import effective_date @@ -101,7 +104,9 @@ def show_blank( @router.get("/list") -def show_list(date_: date = Depends(effective_date), user: UserToken = Depends(get_user)): +def show_list( + date_: date = Depends(effective_date), user: UserToken = Depends(get_user) +) -> list[schemas.ModifierCategory]: with SessionFuture() as db: product_version_onclause = and_( ProductVersion.menu_category_id == MenuCategory.id, @@ -133,25 +138,24 @@ def show_list(date_: date = Depends(effective_date), user: UserToken = Depends(g modifier_categories = [] for item in list_: products = [x.id for x in item.products] - modifier_category = { - "id": item.id, - "name": item.name, - "minimum": item.minimum, - "maximum": item.maximum, - "isActive": item.is_active, - "menuCategories": [ - { - "id": mc.id, - "name": mc.name, - "enabled": reduce(lambda x, y: x and (y.product_id in products), mc.products, True), - "products": [{"id": p.id, "name": p.name} for p in mc.products if p.product_id in products], - } + modifier_category = schemas.ModifierCategory( + id_=item.id, + name=item.name, + minimum=item.minimum, + maximum=item.maximum, + is_active=item.is_active, + sort_order=item.sort_order, + menu_categories=[ + schemas.MenuCategoryLink( + id_=mc.id, + name=mc.name, + enabled=reduce(lambda x, y: x and (y.product_id in products), mc.products, True), + products=[ProductLink(id_=p.id, name=p.name) for p in mc.products if p.product_id in products], + ) for mc in menu_categories ], - } - modifier_category["menuCategories"] = [ - i for i in modifier_category["menuCategories"] if len(i["products"]) > 0 - ] + ) + modifier_category.menu_categories = [i for i in modifier_category.menu_categories if len(i.products) > 0] modifier_categories.append(modifier_category) return modifier_categories @@ -161,21 +165,21 @@ def for_product( id_: uuid.UUID, date_: date = Depends(effective_date), user: UserToken = Security(get_user), -): +) -> list[ModifierCategoryForProduct]: with SessionFuture() as db: product: Product = db.execute(select(Product).where(Product.id == id_)).scalar_one() return [ - { - "id": item.id, - "name": item.name, - "minimum": item.minimum, - "maximum": item.maximum, - "isActive": item.is_active, - "modifiers": [ - {"id": m.id, "name": m.name, "price": m.price} for m in item.modifiers if m.is_active is True + ModifierCategoryForProduct( + id_=item.id, + name=item.name, + minimum=item.minimum, + maximum=item.maximum, + is_active=item.is_active, + modifiers=[ + ModifierLink(id_=m.id, name=m.name, price=m.price) for m in item.modifiers if m.is_active is True ], - } + ) for item in product.modifier_categories if item.is_active is True ] @@ -280,9 +284,7 @@ def modifier_category_blank(date_: date, db: Session) -> schemas.ModifierCategor ) -def add_products( - modifier_category: ModifierCategory, menu_categories: list[schemas.MenuCategoryLink], db: Session -) -> None: +def add_products(modifier_category: ModifierCategory, menu_categories: list[MenuCategoryLink], db: Session) -> None: for mc in menu_categories: for p in mc.products: old = next((x for x in modifier_category.products if x.id == p.id_), None) diff --git a/barker/barker/routers/product.py b/barker/barker/routers/product.py index 9875d7a3..324585be 100644 --- a/barker/barker/routers/product.py +++ b/barker/barker/routers/product.py @@ -20,8 +20,14 @@ from ..models.modifier_category_product import ModifierCategoryProduct from ..models.product import Product from ..models.product_version import ProductVersion from ..models.sale_category import SaleCategory +from ..models.sku_version import SkuVersion +from ..models.stock_keeping_unit import StockKeepingUnit from ..models.voucher import Voucher from ..schemas import product as schemas +from ..schemas.menu_category import MenuCategoryLink +from ..schemas.product_query import ProductQuery +from ..schemas.sale_category import SaleCategoryLink +from ..schemas.tax import TaxLink from ..schemas.user_token import UserToken from . import effective_date @@ -77,26 +83,47 @@ def save( ) -> None: try: with SessionFuture() as db: - item = Product() - db.add(item) - db.flush() - product_version = ProductVersion( - product_id=item.id, + product = Product() + db.add(product) + db.flush() # so product.id is available + version = ProductVersion( + product_id=product.id, name=data.name, - units=data.units, - menu_category_id=data.menu_category.id_, + fraction_units=data.fraction_units, sale_category_id=data.sale_category.id_, - price=data.price, - has_happy_hour=data.has_happy_hour, - is_not_available=data.is_not_available, - quantity=data.quantity, + sort_order=data.sort_order, valid_from=date_, valid_till=None, ) - db.add(product_version) - add_modifiers(item.id, product_version.menu_category_id, date_, db) + db.add(version) + if not len(data.skus): + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="Not enough stock keeping units.", + ) + for sku in data.skus: + s = StockKeepingUnit(product=product, is_not_available=sku.is_not_available) + # product.skus.append(s) + db.add(s) + db.flush() # So sku.id is available + sver = SkuVersion( + sku_id=s.id, + units=sku.units, + fraction=round(sku.fraction, 5), + product_yield=round(sku.product_yield, 5), + cost_price=round(sku.cost_price, 2), + sale_price=round(sku.sale_price, 2), + has_happy_hour=sku.has_happy_hour, + menu_category_id=sku.menu_category.id_, + valid_from=date_, + valid_till=None, + sku=s, + ) + # s.versions.append(sver) + db.add(sver) + for p_sku in version.product.skus: + add_modifiers(p_sku.id, product.id, p_sku.versions[0].menu_category_id, date_, db) db.commit() - return except SQLAlchemyError as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, @@ -104,23 +131,13 @@ def save( ) -def add_modifiers(product_id: uuid.UUID, menu_category_id: uuid.UUID, date_: date, db: Session) -> None: - products_in_category = db.execute( - select(count(ProductVersion.id)).where( - and_( - ProductVersion.menu_category_id == menu_category_id, - ProductVersion.product_id != product_id, - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= date_, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= date_, - ), - ) - ) - ).scalar() +def add_modifiers( + sku_id: uuid.UUID, product_id: uuid.UUID, menu_category_id: uuid.UUID, date_: date, db: Session +) -> None: + sv_active = and_( + or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711 + or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= date_), # noqa: E711 + ) product_version_onclause = and_( ProductVersion.product_id == Product.id, or_( @@ -132,13 +149,31 @@ def add_modifiers(product_id: uuid.UUID, menu_category_id: uuid.UUID, date_: dat ProductVersion.valid_till >= date_, ), ) + # how many DISTINCT products (excluding current product via sku_id) are in this menu category today? + products_in_category = db.execute( + select(func.count(func.distinct(StockKeepingUnit.product_id))) + .select_from(SkuVersion) + .join(SkuVersion.sku) # -> StockKeepingUnit + .where( + and_( + sv_active, + SkuVersion.menu_category_id == menu_category_id, + SkuVersion.sku_id != sku_id, + ) + ) + ).scalar_one() + # for each modifier category, how many DISTINCT products (today) have it? categories = db.execute( - select(count(ProductVersion.id), ModifierCategory.id) + select( + func.count(func.distinct(ProductVersion.product_id)).label("c"), + ModifierCategory.id, + ) .select_from(ProductVersion) .join(Product, onclause=product_version_onclause) .join(Product.modifier_categories) .group_by(ModifierCategory.id) ).all() + for c, mc in categories: if c == products_in_category: db.execute(insert(ModifierCategoryProduct).values(product_id=product_id, modifier_category_id=mc)) @@ -153,74 +188,136 @@ def update_route( ) -> None: try: with SessionFuture() as db: - item: ProductVersion = db.execute( - select(ProductVersion).where( - and_( - ProductVersion.product_id == id_, - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= date_, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= date_, - ), - ) - ) + product_version_onclause = and_( + ProductVersion.product_id == Product.id, + or_( + ProductVersion.valid_from == None, # noqa: E711 + ProductVersion.valid_from <= date_, + ), + or_( + ProductVersion.valid_till == None, # noqa: E711 + ProductVersion.valid_till >= date_, + ), + ) + sku_version_onclause = and_( + SkuVersion.sku_id == StockKeepingUnit.id, + or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711 + or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= date_), # noqa: E711 + ) + version: ProductVersion = db.execute( + select(ProductVersion) + .join(Product, onclause=product_version_onclause) + .options(contains_eager(ProductVersion.product)) + .where(ProductVersion.product_id == id_) ).scalar_one() - if ( - item.name == data.name - and item.units == data.units - and item.menu_category_id == data.menu_category.id_ - and item.sale_category_id == data.sale_category.id_ - and item.price == data.price - and item.has_happy_hour == data.has_happy_hour - and item.is_not_available == data.is_not_available - ): - if item.quantity != data.quantity or item.sort_order != data.sort_order: - item.quantity = data.quantity - item.sort_order = data.sort_order - db.commit() - # The product is identical. No need for a new one - return None - if item.valid_till is not None: - # Allow adding a product here splitting the valid from and to, but not implemented right now - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail="Product has been invalidated", - ) - if item.valid_from == date_: # Update the product as valid from the the same - item.name = data.name - item.units = data.units - item.menu_category_id = data.menu_category.id_ - item.sale_category_id = data.sale_category.id_ - item.price = data.price - item.has_happy_hour = data.has_happy_hour - item.is_not_available = data.is_not_available - item.quantity = data.quantity - item.sort_order = data.sort_order - db.commit() - return None - else: # Create a new version of the product from the new details - item.valid_till = date_ - timedelta(days=1) - product_version = ProductVersion( - product_id=item.product_id, - name=data.name, - units=data.units, - menu_category_id=data.menu_category.id_, - sale_category_id=data.sale_category.id_, - price=data.price, - has_happy_hour=data.has_happy_hour, - is_not_available=data.is_not_available, - quantity=data.quantity, - valid_from=date_, - valid_till=None, - sort_order=item.sort_order, + pv_changed = ( + version.name != data.name + or version.fraction_units != data.fraction_units + or version.sale_category_id != data.sale_category.id_ + ) + if pv_changed: + if version.valid_from == date_: + # Safe to mutate current version + version.name = data.name + version.fraction_units = data.fraction_units + version.sale_category_id = data.sale_category.id_ + version.sort_order = data.sort_order + else: + # Close current and create a new version effective today + version.valid_till = date_ - timedelta(days=1) + new_version = ProductVersion( + product_id=id_, + name=data.name, + fraction_units=data.fraction_units, + sale_category_id=data.sale_category.id_, + sort_order=data.sort_order, + valid_from=date_, + valid_till=None, + ) + db.add(new_version) + if not len(data.skus): + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="Not enough stock keeping units.", ) - db.add(product_version) + old_svers = ( + db.execute( + select(SkuVersion) + .join(StockKeepingUnit, onclause=sku_version_onclause) + .join(SkuVersion.menu_category) + .options( + contains_eager(SkuVersion.sku), + contains_eager(SkuVersion.menu_category), + ) + .where(StockKeepingUnit.product_id == id_) + .order_by(SkuVersion.sort_order, SkuVersion.units) + ) + .scalars() + .all() + ) + + for i in range(len(old_svers), 0, -1): + sku: SkuVersion = old_svers[i - 1] + index = next((idx for (idx, d) in enumerate(data.skus) if d.id_ == sku.id), None) + if index is None: + sku.valid_till = date_ - timedelta(days=1) + continue + new_data_sku = data.skus.pop(index) + sku_changed = ( + new_data_sku.units != sku.units + or Decimal(new_data_sku.fraction).quantize(Decimal("0.00001")) != sku.fraction + or Decimal(new_data_sku.product_yield).quantize(Decimal("0.00001")) != sku.product_yield + or Decimal(new_data_sku.cost_price).quantize(Decimal("0.01")) != sku.cost_price + or Decimal(new_data_sku.sale_price).quantize(Decimal("0.01")) != sku.sale_price + or new_data_sku.has_happy_hour != sku.has_happy_hour + or new_data_sku.menu_category.id_ != sku.menu_category_id + ) + print(f"SKU Changed: {sku_changed} for {sku.id}") + if sku_changed: + if sku.valid_from == date_: + # Safe to mutate current version + sku.units = new_data_sku.units + sku.fraction = round(new_data_sku.fraction, 5) + sku.product_yield = round(new_data_sku.product_yield, 5) + sku.cost_price = round(new_data_sku.cost_price, 2) + sku.sale_price = round(new_data_sku.sale_price, 2) + sku.has_happy_hour = new_data_sku.has_happy_hour + sku.menu_category_id = new_data_sku.menu_category.id_ + else: + sku.valid_till = date_ - timedelta(days=1) + new_sku = SkuVersion( + sku_id=sku.sku_id, + valid_from=date_, + units=new_data_sku.units, + fraction=round(new_data_sku.fraction, 5), + product_yield=round(new_data_sku.product_yield, 5), + cost_price=round(new_data_sku.cost_price, 2), + sale_price=round(new_data_sku.sale_price, 2), + has_happy_hour=new_data_sku.has_happy_hour, + sort_order=sku.sort_order, + menu_category_id=new_data_sku.menu_category.id_, + ) + db.add(new_sku) + # Create a new version effective today + + for data_sku in data.skus: + new_s = StockKeepingUnit(product_id=version.product_id) + version.product.skus.append(new_s) + db.add(new_s) + db.flush() # So sku.id is available + new_sku = SkuVersion( + units=data_sku.units, + fraction=round(data_sku.fraction, 5), + product_yield=round(data_sku.product_yield, 5), + cost_price=round(data_sku.cost_price, 2), + sale_price=round(data_sku.sale_price, 2), + has_happy_hour=data_sku.has_happy_hour, + menu_category_id=data_sku.menu_category.id_, + sku=new_s, + ) + db.add(new_sku) db.commit() - return None except SQLAlchemyError as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, @@ -235,7 +332,29 @@ def delete_route( user: UserToken = Security(get_user, scopes=["products"]), ) -> None: with SessionFuture() as db: - item: ProductVersion = db.execute( + # Active SkuVersion filter + sv_onclause = and_( + SkuVersion.sku_id == StockKeepingUnit.id, + or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711 + or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= date_), # noqa: E711 + ) + day = func.cast( + Voucher.date + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES - settings.NEW_DAY_OFFSET_MINUTES), Date + ).label("day") + billed = db.execute( + select(count(Inventory.id)) + .join(Inventory.kot) + .join(Kot.voucher) + .join(Inventory.sku) + .where(StockKeepingUnit.product_id == id_, day >= date_) + ).scalar_one() + if billed > 0: + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="The cannot delete this product as it was billed", + ) + + pv_active: ProductVersion = db.execute( select(ProductVersion).where( and_( ProductVersion.product_id == id_, @@ -250,25 +369,26 @@ def delete_route( ) ) ).scalar_one() - day = func.cast( - Voucher.date + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES - settings.NEW_DAY_OFFSET_MINUTES), Date - ).label("day") - billed = db.execute( - select(count(Inventory.id)) - .join(Inventory.kot) - .join(Kot.voucher) - .where(Inventory.product_id == id_, day >= date_) - ).scalar_one() - if billed > 0: - raise HTTPException( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, - detail="The cannot delete this product as it was billed", - ) - - if item.valid_from == date_: - db.delete(item) + if pv_active.valid_from == date_: + db.delete(pv_active) else: - item.valid_till = date_ - timedelta(days=1) + pv_active.valid_till = date_ - timedelta(days=1) + + sv_active = ( + db.execute( + select(SkuVersion) + .join(StockKeepingUnit, onclause=sv_onclause) # -> StockKeepingUnit + .where(StockKeepingUnit.product_id == id_) + ) + .scalars() + .all() + ) + + for sv in sv_active: + if sv.valid_from == date_: + db.delete(sv) + else: + sv.valid_till = date_ - timedelta(days=1) db.commit() @@ -276,16 +396,7 @@ def delete_route( def show_blank( user: UserToken = Security(get_user, scopes=["products"]), ) -> schemas.ProductBlank: - return schemas.ProductBlank( - name="", - units="", - price=Decimal(0), - has_happy_hour=False, - is_not_available=False, - is_active=True, - sort_order=0, - quantity=Decimal(0), - ) + return product_blank() @router.get("/list", response_model=list[schemas.Product]) @@ -295,36 +406,64 @@ def show_list(date_: date = Depends(effective_date), user: UserToken = Depends(g def product_list(date_: date, db: Session) -> list[schemas.Product]: - return [ - product_info(item) - for item in db.execute( + # Active ProductVersion filter + pv_active = and_( + or_(ProductVersion.valid_from == None, ProductVersion.valid_from <= date_), # noqa: E711 + or_(ProductVersion.valid_till == None, ProductVersion.valid_till >= date_), # noqa: E711 + ) + + # Active SkuVersion filter + sv_onclause = and_( + SkuVersion.sku_id == StockKeepingUnit.id, + or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711 + or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= date_), # noqa: E711 + ) + + rows = ( + db.execute( select(ProductVersion) - .join(ProductVersion.menu_category) - .join(ProductVersion.sale_category) - .where( - and_( - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= date_, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= date_, - ), - ) + .join(ProductVersion.sale_category) # ProductVersion has sale_category + .join(ProductVersion.product) + .join(Product.skus) + .join(SkuVersion, sv_onclause) + .join(SkuVersion.menu_category) # Menu category lives here + .where(pv_active) + .order_by( + MenuCategory.sort_order, + MenuCategory.name, + ProductVersion.sort_order, + ProductVersion.name, + SkuVersion.sort_order, + SkuVersion.units, ) - .order_by(MenuCategory.sort_order) - .order_by(MenuCategory.name) - .order_by(ProductVersion.sort_order) - .order_by(ProductVersion.name) .options( - contains_eager(ProductVersion.menu_category), + contains_eager( + ProductVersion.product, Product.skus, StockKeepingUnit.versions, SkuVersion.menu_category + ), contains_eager(ProductVersion.sale_category), ) ) + .unique() .scalars() .all() - ] + ) + + return [product_info(row) for row in rows] + + # # Group SKUs under their ProductVersion + # grouped: dict[uuid.UUID, dict[str, object]] = {} + # for version, sku in rows: + # entry = grouped.get(version.product_id) + # if entry is None: + # entry = {"version": version, "skus": []} + # grouped[version.product_id] = entry + # if sku is not None: + # entry["skus"].append(sku) + + # return [ + # product_info(entry["version"], entry["skus"]) # type: ignore[arg-type] + # for entry in grouped.values() + # ] @router.get("/query") @@ -334,58 +473,70 @@ def show_term( date_: date = Depends(effective_date), current_user: UserToken = Depends(get_user), ): + product_version_onclause = and_( + ProductVersion.product_id == Product.id, + or_( + ProductVersion.valid_from == None, # noqa: E711 + ProductVersion.valid_from <= date_, + ), + or_( + ProductVersion.valid_till == None, # noqa: E711 + ProductVersion.valid_till >= date_, + ), + ) + sku_version_onclause = and_( + SkuVersion.sku_id == StockKeepingUnit.id, + or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711 + or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= date_), # noqa: E711 + ) print(f"Fetching products for MenuCategory: {mc}, SaleCategory: {sc}, Date: {date_}") - list_ = [] - query = select(ProductVersion) - if mc is not None: - query = query.join(ProductVersion.menu_category) - if sc is not None: - query = query.join(ProductVersion.menu_category).join(ProductVersion.sale_category).join(SaleCategory.tax) - query = query.where( - and_( - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= date_, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= date_, - ), + list_: list[ProductQuery] = [] + query = ( + select(SkuVersion) + .join(StockKeepingUnit, onclause=sku_version_onclause) + .join(StockKeepingUnit.product) + .join(ProductVersion, onclause=product_version_onclause) + # .join(SkuVersion.menu_category) + # .join(ProductVersion.sale_category) + .options( + contains_eager(SkuVersion.sku).contains_eager(StockKeepingUnit.product).contains_eager(Product.versions) ) ) if mc is not None: - query = query.where(ProductVersion.menu_category_id == mc).order_by( - ProductVersion.sort_order, ProductVersion.name - ) + query = query.join(SkuVersion.menu_category) + if sc is not None: + query = query.join(SkuVersion.menu_category).join(ProductVersion.sale_category).join(SaleCategory.tax) + if mc is not None: + query = query.where(SkuVersion.menu_category_id == mc).order_by(ProductVersion.sort_order, ProductVersion.name) if sc is not None: query = query.where(ProductVersion.sale_category_id == sc).order_by( MenuCategory.sort_order, ProductVersion.sort_order, ProductVersion.name ) + if mc is not None: + query = query.options( + contains_eager(SkuVersion.menu_category), + ) + if sc is not None: query = query.options( contains_eager(ProductVersion.sale_category).contains_eager(SaleCategory.tax), - contains_eager(ProductVersion.menu_category), - ) - - if mc is not None: - query = query.options( - contains_eager(ProductVersion.menu_category), ) with SessionFuture() as db: - for item in db.execute(query).scalars().all(): + for item in db.execute(query).unique().scalars().all(): if sc is not None: list_.append( - { - "id": item.product_id, - "name": item.full_name, - "menuCategory": { - "id": item.menu_category_id, - "name": item.menu_category.name, - }, - "price": item.price, - } + ProductQuery( + id_=item.sku_id, + name=f"{item.sku.product.versions[0].name} ({item.units})", + menu_category=MenuCategoryLink( + id_=item.menu_category_id, name=item.menu_category.name, products=[] + ), + price=item.sale_price, + has_happy_hour=item.has_happy_hour, + is_not_available=item.sku.is_not_available, + ) ) if mc is not None: list_.append(query_product_info(item, False)) @@ -394,37 +545,37 @@ def show_term( return list_ -def product_list_of_sale_category(date_: date, db: Session) -> list[schemas.Product]: - return [ - product_info(item) - for item in db.execute( - select(ProductVersion) - .join(ProductVersion.menu_category) - .join(ProductVersion.sale_category) - .where( - and_( - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= date_, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= date_, - ), - ) - ) - .order_by(MenuCategory.sort_order) - .order_by(MenuCategory.name) - .order_by(ProductVersion.sort_order) - .order_by(ProductVersion.name) - .options( - contains_eager(ProductVersion.menu_category), - contains_eager(ProductVersion.sale_category), - ) - ) - .scalars() - .all() - ] +# def product_list_of_sale_category(date_: date, db: Session) -> list[schemas.Product]: +# return [ +# product_info(item) +# for item in db.execute( +# select(ProductVersion) +# .join(ProductVersion.menu_category) +# .join(ProductVersion.sale_category) +# .where( +# and_( +# or_( +# ProductVersion.valid_from == None, # noqa: E711 +# ProductVersion.valid_from <= date_, +# ), +# or_( +# ProductVersion.valid_till == None, # noqa: E711 +# ProductVersion.valid_till >= date_, +# ), +# ) +# ) +# .order_by(MenuCategory.sort_order) +# .order_by(MenuCategory.name) +# .order_by(ProductVersion.sort_order) +# .order_by(ProductVersion.name) +# .options( +# contains_eager(ProductVersion.menu_category), +# contains_eager(ProductVersion.sale_category), +# ) +# ) +# .scalars() +# .all() +# ] @router.get("/{id_}", response_model=schemas.Product) @@ -433,69 +584,122 @@ def show_id( date_: date = Depends(effective_date), user: UserToken = Security(get_user, scopes=["products"]), ) -> schemas.Product: + pv_active = and_( + ProductVersion.product_id == id_, + or_(ProductVersion.valid_from == None, ProductVersion.valid_from <= date_), # noqa: E711 + or_(ProductVersion.valid_till == None, ProductVersion.valid_till >= date_), # noqa: E711 + ) + + sv_active = and_( + or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711 + or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= date_), # noqa: E711 + ) with SessionFuture() as db: - item: ProductVersion = db.execute( - select(ProductVersion) - .join(ProductVersion.sale_category) - .join(SaleCategory.tax) - .where( - and_( - ProductVersion.product_id == id_, - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= date_, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= date_, - ), + version: ProductVersion = ( + db.execute( + select(ProductVersion) + .join(ProductVersion.sale_category) + .join(ProductVersion.product) + .join(Product.skus) + .join(StockKeepingUnit.versions.and_(sv_active)) + .join(SkuVersion.menu_category) + .where(pv_active) + .order_by( + SkuVersion.sort_order, + SkuVersion.units, + ) + .options( + contains_eager(ProductVersion.sale_category), + contains_eager(ProductVersion.product) + .contains_eager(Product.skus) + .contains_eager(StockKeepingUnit.versions) + .contains_eager(SkuVersion.menu_category), ) ) - .order_by(ProductVersion.sort_order, ProductVersion.name) - .options( - contains_eager(ProductVersion.sale_category), - ) - ).scalar_one() - return product_info(item) + .unique() + .scalars() + .one() + ) + return product_info(version) -def query_product_info(item: ProductVersion, happy_hour: bool): - return { - "id": item.product_id, - "name": ("H H " if happy_hour else "") + item.full_name, - "saleCategory": { - "id": item.sale_category_id, - "name": item.sale_category.name, - }, - "tax": { - "id": item.sale_category.tax_id, - "name": item.sale_category.tax.name, - "rate": item.sale_category.tax.rate, - }, - "price": item.price, - "hasHappyHour": happy_hour, - "isNotAvailable": item.is_not_available, - "sortOrder": item.sort_order, - } - - -def product_info(item: ProductVersion) -> schemas.Product: - return schemas.Product( - id_=item.product_id, - version_id=item.id, - name=item.name, - units=item.units, - menu_category=schemas.MenuCategoryLink(id_=item.menu_category_id, name=item.menu_category.name, products=[]), - sale_category=schemas.SaleCategoryLink( - id_=item.sale_category_id, - name=item.sale_category.name, +def query_product_info(item: SkuVersion, happy_hour: bool) -> ProductQuery: + return ProductQuery( + id_=item.sku_id, + name=("H H " if happy_hour else "") + f"{item.sku.product.versions[0].name} ({item.units})", + sale_category=SaleCategoryLink( + id_=item.sku.product.versions[0].sale_category_id, + name=item.sku.product.versions[0].sale_category.name, ), - price=item.price, - has_happy_hour=item.has_happy_hour, - is_not_available=item.is_not_available, - quantity=item.quantity, - is_active=True, + tax=TaxLink( + id_=item.sku.product.versions[0].sale_category.tax.id, + name=item.sku.product.versions[0].sale_category.tax.name, + rate=item.sku.product.versions[0].sale_category.tax.rate, + ), + price=item.sale_price, + has_happy_hour=happy_hour, + is_not_available=item.sku.is_not_available, sort_order=item.sort_order, - valid_from=item.valid_from, - valid_till=item.valid_till, ) + + +def product_info(version: ProductVersion) -> schemas.Product: + return schemas.Product( + id_=version.product_id, + version_id=version.id, + name=version.name, + fraction_units=version.fraction_units, + sale_category=schemas.SaleCategoryLink( + id_=version.sale_category_id, + name=version.sale_category.name, + ), + skus=[ + schemas.StockKeepingUnit( + id_=sku.id, + units=sku_version.units, + fraction=sku_version.fraction, + product_yield=sku_version.product_yield, + cost_price=sku_version.cost_price, + sale_price=sku_version.sale_price, + has_happy_hour=sku_version.has_happy_hour, + is_not_available=sku_version.sku.is_not_available, + menu_category=MenuCategoryLink( + id_=sku_version.menu_category_id, name=sku_version.menu_category.name, products=[] + ), + sort_order=sku_version.sort_order, + ) + for sku in version.product.skus + for sku_version in sku.versions + ], + sort_order=version.sort_order, + ) + + +def product_blank() -> schemas.ProductBlank: + return schemas.ProductBlank( + name="", + fraction_units="", + skus=[], + sort_order=0, + enabled=True, + ) + + +# def product_info(item: ProductVersion) -> schemas.Product: +# return schemas.Product( +# id_=item.product_id, +# units=item.units, + +# sale_category=schemas.SaleCategoryLink( +# id_=item.sale_category_id, +# name=item.sale_category.name, +# ), +# price=item.price, +# has_happy_hour=item.has_happy_hour, +# is_not_available=item.is_not_available, +# quantity=item.quantity, +# is_active=True, +# sort_order=item.sort_order, +# valid_from=item.valid_from, +# valid_till=item.valid_till, +# ) diff --git a/barker/barker/routers/role.py b/barker/barker/routers/role.py index c40f22c1..4db61c59 100644 --- a/barker/barker/routers/role.py +++ b/barker/barker/routers/role.py @@ -13,6 +13,7 @@ from ..models.role import Role from ..models.role_permission import RolePermission from ..models.user_role import UserRole from ..schemas import role as schemas +from ..schemas.permission import PermissionItem from ..schemas.user_token import UserToken @@ -138,7 +139,7 @@ def role_blank(db: Session) -> schemas.RoleBlank: ) -def add_permissions(role: Role, permissions: list[schemas.PermissionItem], db: Session) -> None: +def add_permissions(role: Role, permissions: list[PermissionItem], db: Session) -> None: for permission in permissions: gp = next((p for p in role.permissions if p.id == permission.id_), None) if permission.enabled and gp is None: diff --git a/barker/barker/routers/update_product_prices.py b/barker/barker/routers/update_product_prices.py index 3a8fd08b..90d415de 100644 --- a/barker/barker/routers/update_product_prices.py +++ b/barker/barker/routers/update_product_prices.py @@ -126,6 +126,7 @@ def save_update_product_prices_id( def update_product(id_: uuid.UUID, price: Decimal, date_: date, db: Session) -> None: + raise NotImplementedError item: ProductVersion = db.execute( select(ProductVersion).where( and_( diff --git a/barker/barker/routers/user.py b/barker/barker/routers/user.py index be76ce63..c74a5bb7 100644 --- a/barker/barker/routers/user.py +++ b/barker/barker/routers/user.py @@ -15,6 +15,7 @@ from ..models.user import User from ..models.user_role import UserRole from ..models.voucher import Voucher from ..schemas import user as schemas +from ..schemas.role import RoleItem from ..schemas.user_token import UserToken @@ -91,7 +92,7 @@ def update_route( ) -def add_roles(user: User, roles: list[schemas.RoleItem], db: Session) -> None: +def add_roles(user: User, roles: list[RoleItem], db: Session) -> None: for role in roles: ug = next((g for g in user.roles if g.id == role.id_), None) if role.enabled and ug is None: diff --git a/barker/barker/routers/voucher/__init__.py b/barker/barker/routers/voucher/__init__.py index f58841c4..b41c5dbe 100644 --- a/barker/barker/routers/voucher/__init__.py +++ b/barker/barker/routers/voucher/__init__.py @@ -8,12 +8,11 @@ from sqlalchemy import func from sqlalchemy.orm import Session from sqlalchemy.sql import expression -from barker.models.guest_book_type import GuestBookType -from barker.models.overview_status import OverviewStatus - from ...models.bill import Bill from ...models.guest_book import GuestBook +from ...models.guest_book_type import GuestBookType from ...models.overview import Overview +from ...models.overview_status import OverviewStatus from ...models.regime import Regime from ...models.settle_option import SettleOption from ...models.settlement import Settlement @@ -156,15 +155,15 @@ def do_update_bill_numbers(voucher: Voucher, db: Session) -> bool: def happy_hour_items_balanced(inventories: list[schemas.Inventory]) -> bool: - happy = set((i.product.id_, i.quantity) for i in inventories if i.is_happy_hour) - products = set(i.product.id_ for i in inventories if i.is_happy_hour) - other = set((i.product.id_, i.quantity) for i in inventories if not i.is_happy_hour and i.product.id_ in products) + happy = set((i.sku.id_, i.quantity) for i in inventories if i.is_happy_hour) + products = set(i.sku.id_ for i in inventories if i.is_happy_hour) + other = set((i.sku.id_, i.quantity) for i in inventories if not i.is_happy_hour and i.sku.id_ in products) return happy == other def happy_hour_has_discount(inventories: list[schemas.Inventory]) -> bool: - happy = set(i.product.id_ for i in inventories if i.is_happy_hour) - offenders = [i for i in inventories if i.product.id_ in happy and i.discount != 0] + happy = set(i.sku.id_ for i in inventories if i.is_happy_hour) + offenders = [i for i in inventories if i.sku.id_ in happy and i.discount != 0] return len(offenders) > 0 @@ -174,10 +173,10 @@ def happy_hour_items_more_than_regular(kots: list[schemas.Kot]) -> bool: inventories = {} for kot in kots: for inventory in kot.inventories: - if inventory.product.id_ not in inventories: - inventories[inventory.product.id_] = {"normal": Decimal(0), "happy": Decimal(0)} + if inventory.sku.id_ not in inventories: + inventories[inventory.sku.id_] = {"normal": Decimal(0), "happy": Decimal(0)} if inventory.is_happy_hour: - inventories[inventory.product.id_]["happy"] += inventory.quantity + inventories[inventory.sku.id_]["happy"] += inventory.quantity else: - inventories[inventory.product.id_]["normal"] += inventory.quantity + inventories[inventory.sku.id_]["normal"] += inventory.quantity return any(value["happy"] > value["normal"] for value in inventories.values()) diff --git a/barker/barker/routers/voucher/merge_move.py b/barker/barker/routers/voucher/merge_move.py index 9d9e103d..c934fe46 100644 --- a/barker/barker/routers/voucher/merge_move.py +++ b/barker/barker/routers/voucher/merge_move.py @@ -184,9 +184,9 @@ def check_if_voucher_is_unprinted(voucher_id: uuid.UUID, db: Session) -> None: def has_negatives(kots: list[Kot]) -> bool: inv = [i for k in kots for i in k.inventories] - products = set((i.product_id, i.is_happy_hour) for i in inv) + products = set((i.sku_id, i.is_happy_hour) for i in inv) for id_, hh in products: - quantity = sum(i.quantity for i in inv if i.product_id == id_ and i.is_happy_hour == hh) + quantity = sum(i.quantity for i in inv if i.sku_id == id_ and i.is_happy_hour == hh) if quantity < 0: return True return False @@ -196,10 +196,10 @@ def has_negatives(kots: list[Kot]) -> bool: # This is pass okay in happy hours items balanced, but overall this is wrong. Hence this check def happy_hour_exceeds_regular(kots: list[Kot]) -> bool: inv = [i for k in kots for i in k.inventories] - products = set(i.product_id for i in inv if i.is_happy_hour) + products = set(i.sku_id for i in inv if i.is_happy_hour) for p in products: - r = sum(i.quantity for i in inv if i.product_id == p and not i.is_happy_hour) - h = sum(i.quantity for i in inv if i.product_id == p and i.is_happy_hour) + r = sum(i.quantity for i in inv if i.sku_id == p and not i.is_happy_hour) + h = sum(i.quantity for i in inv if i.sku_id == p and i.is_happy_hour) if r < h: return True return False diff --git a/barker/barker/routers/voucher/save.py b/barker/barker/routers/voucher/save.py index 7e52d597..cc5cd30a 100644 --- a/barker/barker/routers/voucher/save.py +++ b/barker/barker/routers/voucher/save.py @@ -16,7 +16,10 @@ from ...models.guest_book import GuestBook from ...models.inventory import Inventory from ...models.inventory_modifier import InventoryModifier from ...models.kot import Kot +from ...models.product import Product from ...models.product_version import ProductVersion +from ...models.sku_version import SkuVersion +from ...models.stock_keeping_unit import StockKeepingUnit from ...models.voucher import Voucher from ...models.voucher_type import VoucherType from ...printing.bill import print_bill @@ -117,50 +120,70 @@ def do_save( if round(i.quantity, 2) == 0: continue total_quantity: Decimal = round( - Decimal( - sum(inv.quantity for ko in data.kots for inv in ko.inventories if inv.product.id_ == i.product.id_) - ), + Decimal(sum(inv.quantity for ko in data.kots for inv in ko.inventories if inv.sku.id_ == i.sku.id_)), 2, ) - product: ProductVersion = db.execute( - select(ProductVersion) - .join(ProductVersion.sale_category) - .where( - and_( - ProductVersion.product_id == i.product.id_, - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= product_date, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= product_date, - ), + sku: StockKeepingUnit = ( + db.execute( + select(StockKeepingUnit) + .join(StockKeepingUnit.versions) + .join(StockKeepingUnit.product) + .join(Product.versions) + .join(ProductVersion.sale_category) + .where( + and_( + StockKeepingUnit.id == i.sku.id_, + or_( + SkuVersion.valid_from == None, # noqa: E711 + SkuVersion.valid_from <= product_date, + ), + or_( + SkuVersion.valid_till == None, # noqa: E711 + SkuVersion.valid_till >= product_date, + ), + and_( + or_( + ProductVersion.valid_from == None, # noqa: E711 + ProductVersion.valid_from <= product_date, + ), + or_( + ProductVersion.valid_till == None, # noqa: E711 + ProductVersion.valid_till >= product_date, + ), + ), + ) + ) + .options( + contains_eager(StockKeepingUnit.versions), + contains_eager(StockKeepingUnit.product) + .contains_eager(Product.versions) + .contains_eager(ProductVersion.sale_category), ) ) - .options(contains_eager(ProductVersion.sale_category)) - ).scalar_one() + .unique() + .scalar_one() + ) if total_quantity < 0: raise HTTPException( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, - detail=f"Quantity of {product.full_name} cannot be less than 0", + detail=f"Quantity of {sku.product.versions[0].name} ({sku.versions[0].units}) cannot be less than 0", ) if round(i.quantity, 2) < 0 and "edit-printed-product" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, - detail=f"You are not allowed to delete printed products.\n In this case {product.full_name}", + detail=f"You are not allowed to delete printed products.\n In this case {sku.product.versions[0].name} ({sku.versions[0].units})", ) - tax_rate = get_tax(product.sale_category.tax.rate, voucher_type) + tax_rate = get_tax(sku.product.versions[0].sale_category.tax.rate, voucher_type) inv = Inventory( - kot.id, - product.product_id, - round(i.quantity, 2), - product.price, - round(min(i.discount, product.sale_category.discount_limit), 5), - i.is_happy_hour, - product.sale_category.tax_id, - tax_rate, - index, + kot_id=kot.id, + sku_id=sku.id, + quantity=round(i.quantity, 2), + price=sku.versions[0].sale_price, + discount=round(min(i.discount, sku.product.versions[0].sale_category.discount_limit), 5), + is_hh=i.is_happy_hour, + tax_id=sku.product.versions[0].sale_category.tax_id, + tax_rate=tax_rate, + sort_order=index, ) kot.inventories.append(inv) db.add(inv) diff --git a/barker/barker/routers/voucher/show.py b/barker/barker/routers/voucher/show.py index 601eefe2..93976e09 100644 --- a/barker/barker/routers/voucher/show.py +++ b/barker/barker/routers/voucher/show.py @@ -19,6 +19,8 @@ from ...models.overview import Overview from ...models.product import Product from ...models.product_version import ProductVersion from ...models.regime import Regime +from ...models.sku_version import SkuVersion +from ...models.stock_keeping_unit import StockKeepingUnit from ...models.voucher import Voucher from ...models.voucher_type import VoucherType from ...schemas.user_token import UserToken @@ -65,6 +67,11 @@ def from_id( ProductVersion.valid_till >= day, ), ) + sku_version_onclause = and_( + SkuVersion.sku_id == StockKeepingUnit.id, + or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= day), # noqa: E711 + or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= day), # noqa: E711 + ) item: Voucher = ( db.execute( select(Voucher) @@ -72,7 +79,9 @@ def from_id( .join(Voucher.customer, isouter=True) .join(Voucher.kots) .join(Kot.inventories) - .join(Inventory.product) + .join(Inventory.sku) + .join(SkuVersion, onclause=sku_version_onclause) + .join(StockKeepingUnit.product) .join(ProductVersion, onclause=product_version_onclause) .where(Voucher.id == id_) .order_by(Kot.code) @@ -81,8 +90,13 @@ def from_id( contains_eager(Voucher.customer), contains_eager(Voucher.kots) .contains_eager(Kot.inventories) - .contains_eager(Inventory.product) + .contains_eager(Inventory.sku) + .contains_eager(StockKeepingUnit.product) .contains_eager(Product.versions), + contains_eager(Voucher.kots) + .contains_eager(Kot.inventories) + .contains_eager(Inventory.sku) + .contains_eager(StockKeepingUnit.versions), ) ) .unique() @@ -111,6 +125,11 @@ def from_bill( ProductVersion.valid_till >= day, ), ) + sku_version_onclause = and_( + SkuVersion.sku_id == StockKeepingUnit.id, + or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= day), # noqa: E711 + or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= day), # noqa: E711 + ) match = re.compile(r"^(\w+)-(\d+)$").match(id_) if not match or len(match.groups()) != 2: raise HTTPException( @@ -126,7 +145,9 @@ def from_bill( .join(Voucher.customer, isouter=True) .join(Voucher.kots) .join(Kot.inventories) - .join(Inventory.product) + .join(Inventory.sku) + .join(SkuVersion, onclause=sku_version_onclause) + .join(StockKeepingUnit.product) .join(ProductVersion, onclause=product_version_onclause) .where(Regime.prefix == match.group(1), Bill.bill_number == int(match.group(2))) .order_by(Kot.code) @@ -135,9 +156,13 @@ def from_bill( contains_eager(Voucher.customer), contains_eager(Voucher.kots) .contains_eager(Kot.inventories) - .contains_eager(Inventory.product) + .contains_eager(Inventory.sku) + .contains_eager(StockKeepingUnit.product) .contains_eager(Product.versions), - contains_eager(Voucher.bills).contains_eager(Bill.regime), + contains_eager(Voucher.kots) + .contains_eager(Kot.inventories) + .contains_eager(Inventory.sku) + .contains_eager(StockKeepingUnit.versions), ) ) .unique() @@ -173,6 +198,11 @@ def from_table( ProductVersion.valid_till >= day, ), ) + sku_version_onclause = and_( + SkuVersion.sku_id == StockKeepingUnit.id, + or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= day), # noqa: E711 + or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= day), # noqa: E711 + ) guest = None if g is None else db.execute(select(GuestBook).where(GuestBook.id == g)).scalar_one() if v is not None: overview = ( @@ -198,7 +228,9 @@ def from_table( .join(Voucher.customer, isouter=True) .join(Voucher.kots) .join(Kot.inventories) - .join(Inventory.product) + .join(Inventory.sku) + .join(SkuVersion, onclause=sku_version_onclause) + .join(StockKeepingUnit.product) .join(ProductVersion, onclause=product_version_onclause) .where(Voucher.id == v) .order_by(Kot.code) @@ -207,8 +239,13 @@ def from_table( contains_eager(Voucher.customer), contains_eager(Voucher.kots) .contains_eager(Kot.inventories) - .contains_eager(Inventory.product) + .contains_eager(Inventory.sku) + .contains_eager(StockKeepingUnit.product) .contains_eager(Product.versions), + contains_eager(Voucher.kots) + .contains_eager(Kot.inventories) + .contains_eager(Inventory.sku) + .contains_eager(StockKeepingUnit.versions), ) ) .unique() @@ -262,16 +299,17 @@ def voucher_info(item: Voucher, db: Session) -> VoucherOut: id_=i.id, sort_order=i.sort_order, product=InventoryProduct( - id_=i.product_id, - name=("H H " if i.is_happy_hour else "") + i.product.versions[0].full_name, + id_=i.sku_id, + name=("H H " if i.is_happy_hour else "") + + f"{i.sku.product.versions[0].name} ({i.sku.versions[0].units})", menu_category=ProductMenuCategory( - id_=i.product.versions[0].menu_category_id, - name=i.product.versions[0].menu_category.name, + id_=i.sku.versions[0].menu_category_id, + name=i.sku.versions[0].menu_category.name, ), sale_category=ProductSaleCategory( - id_=i.product.versions[0].sale_category_id, - name=i.product.versions[0].sale_category.name, - discount_limit=i.product.versions[0].sale_category.discount_limit, + id_=i.sku.product.versions[0].sale_category_id, + name=i.sku.product.versions[0].sale_category.name, + discount_limit=i.sku.product.versions[0].sale_category.discount_limit, ), ), quantity=i.quantity, diff --git a/barker/barker/routers/voucher/update.py b/barker/barker/routers/voucher/update.py index 2b105aef..4ea0ec4c 100644 --- a/barker/barker/routers/voucher/update.py +++ b/barker/barker/routers/voucher/update.py @@ -6,6 +6,7 @@ from decimal import Decimal from fastapi import APIRouter, HTTPException, Security, status from sqlalchemy import and_, func, or_, select from sqlalchemy.exc import SQLAlchemyError +from sqlalchemy.orm import contains_eager from ...core.config import settings from ...core.security import get_current_active_user as get_user @@ -13,7 +14,10 @@ from ...db.session import SessionFuture from ...models.inventory import Inventory from ...models.inventory_modifier import InventoryModifier from ...models.kot import Kot +from ...models.product import Product from ...models.product_version import ProductVersion +from ...models.sku_version import SkuVersion +from ...models.stock_keeping_unit import StockKeepingUnit from ...models.voucher import Voucher from ...models.voucher_type import VoucherType from ...printing.bill import print_bill @@ -119,27 +123,45 @@ def update_route( item.kots.append(kot) db.add(kot) for index, nki in enumerate(nk.inventories): - product: ProductVersion = db.execute( - select(ProductVersion).where( + sku: StockKeepingUnit = db.execute( + select(StockKeepingUnit) + .join(StockKeepingUnit.versions) + .join(StockKeepingUnit.product) + .join(Product.versions) + .where( and_( - ProductVersion.product_id == nki.product.id_, + StockKeepingUnit.id == nki.sku.id_, or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= product_date, + SkuVersion.valid_from == None, # noqa: E711 + SkuVersion.valid_from <= product_date, ), or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= product_date, + SkuVersion.valid_till == None, # noqa: E711 + SkuVersion.valid_till >= product_date, + ), + and_( + or_( + ProductVersion.valid_from == None, # noqa: E711 + ProductVersion.valid_from <= product_date, + ), + or_( + ProductVersion.valid_till == None, # noqa: E711 + ProductVersion.valid_till >= product_date, + ), ), ) ) + .options( + contains_eager(StockKeepingUnit.versions), + contains_eager(StockKeepingUnit.product).contains_eager(Product.versions), + ) ).scalar_one() if round(nki.quantity, 2) < 0: if "edit-printed-product" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail=f"You are not allowed to delete printed products." - f"\n In this case {product.full_name}", + f"\n In this case {sku.product.versions[0].name} ({sku.versions[0].units})", ) minimum: Decimal = round( Decimal( @@ -147,7 +169,7 @@ def update_route( inv.quantity for ko in item.kots for inv in ko.inventories - if ko.id is not None and inv.product_id == product.product_id + if ko.id is not None and inv.sku_id == sku.id ) ) * -1, @@ -156,20 +178,20 @@ def update_route( if round(nki.quantity, 2) < minimum: raise HTTPException( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, - detail=f"Quantity of {product.full_name} cannot be less than {minimum}", + detail=f"Quantity of {sku.product.versions[0].name} ({sku.versions[0].units}) cannot be less than {minimum}", ) - tax_rate = get_tax(product.sale_category.tax.rate, voucher_type) + tax_rate = get_tax(sku.product.versions[0].sale_category.tax.rate, voucher_type) inv = Inventory( kot_id=kot.id, - product_id=product.product_id, + sku_id=sku.id, quantity=round(nki.quantity, 2), - price=product.price, - discount=round(min(nki.discount, product.sale_category.discount_limit), 5), + price=sku.versions[0].sale_price, + discount=round(min(nki.discount, sku.product.versions[0].sale_category.discount_limit), 5), is_hh=nki.is_happy_hour, tax_rate=tax_rate, sort_order=index, - tax_id=product.sale_category.tax_id, - tax=product.sale_category.tax, + tax_id=sku.product.versions[0].sale_category.tax_id, + tax=sku.product.versions[0].sale_category.tax, ) kot.inventories.append(inv) db.add(inv) diff --git a/barker/barker/schemas/menu_category.py b/barker/barker/schemas/menu_category.py index 5cdc5ae7..6780aced 100644 --- a/barker/barker/schemas/menu_category.py +++ b/barker/barker/schemas/menu_category.py @@ -27,5 +27,6 @@ class MenuCategoryBlank(MenuCategoryIn): class MenuCategoryLink(BaseModel): id_: uuid.UUID = Field(...) name: str | None = None + enabled: bool | None = None products: list[ProductLink] model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True) diff --git a/barker/barker/schemas/modifier_category_for_product.py b/barker/barker/schemas/modifier_category_for_product.py new file mode 100644 index 00000000..02d3b472 --- /dev/null +++ b/barker/barker/schemas/modifier_category_for_product.py @@ -0,0 +1,16 @@ +import uuid + +from pydantic import BaseModel, ConfigDict, Field + +from . import to_camel +from .modifier import ModifierLink + + +class ModifierCategoryForProduct(BaseModel): + id_: uuid.UUID + name: str = Field(..., min_length=1) + minimum: int = Field(ge=0) + maximum: int | None = Field(ge=0) + is_active: bool + modifiers: list[ModifierLink] + model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) diff --git a/barker/barker/schemas/product.py b/barker/barker/schemas/product.py index 69cdc035..d0cf3eff 100644 --- a/barker/barker/schemas/product.py +++ b/barker/barker/schemas/product.py @@ -1,27 +1,22 @@ import uuid from datetime import date, datetime -from decimal import Decimal from typing import Any from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator -from . import Daf, to_camel -from .menu_category import MenuCategoryLink +from . import to_camel from .sale_category import SaleCategoryLink +from .stock_keeping_unit import StockKeepingUnit class ProductIn(BaseModel): name: str = Field(..., min_length=1) - units: str - menu_category: MenuCategoryLink = Field(...) + fraction_units: str = Field(..., min_length=1) sale_category: SaleCategoryLink = Field(...) - price: Daf # = Field(ge=0, default=0) - has_happy_hour: bool - is_not_available: bool - quantity: Daf = Field(ge=Decimal(0), default=Decimal(0)) - is_active: bool sort_order: int + skus: list[StockKeepingUnit] + model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) @@ -61,11 +56,8 @@ class Product(ProductIn): class ProductBlank(BaseModel): name: str - units: str - price: Daf - has_happy_hour: bool - is_not_available: bool - quantity: Daf - is_active: bool + fraction_units: str + skus: list[StockKeepingUnit] sort_order: int + enabled: bool model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) diff --git a/barker/barker/schemas/product_query.py b/barker/barker/schemas/product_query.py new file mode 100644 index 00000000..09f3aaf8 --- /dev/null +++ b/barker/barker/schemas/product_query.py @@ -0,0 +1,32 @@ +import uuid + +from decimal import Decimal + +from pydantic import BaseModel, ConfigDict, Field + +from . import Daf, to_camel +from .menu_category import MenuCategoryLink +from .sale_category import SaleCategoryLink +from .tax import TaxLink + + +class ProductQuery(BaseModel): + # one row per SKU version + id_: uuid.UUID = Field(..., description="SkuVersion ID") + # product_id: uuid.UUID = Field(..., description="Product ID") + + name: str = Field(..., min_length=1) + + # units: str = Field(..., min_length=1) + price: Daf = Field(ge=Decimal(0)) + + has_happy_hour: bool + is_not_available: bool + + sort_order: int = Field(ge=0, default=0) + + menu_category: MenuCategoryLink | None = None + sale_category: SaleCategoryLink | None = None + tax: TaxLink | None = None + + model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) diff --git a/barker/barker/schemas/stock_keeping_unit.py b/barker/barker/schemas/stock_keeping_unit.py new file mode 100644 index 00000000..cd2483b4 --- /dev/null +++ b/barker/barker/schemas/stock_keeping_unit.py @@ -0,0 +1,55 @@ +import uuid + +from datetime import date, datetime +from decimal import Decimal +from typing import Any + +from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator + +from . import Daf, to_camel +from .menu_category import MenuCategoryLink + + +class StockKeepingUnit(BaseModel): + id_: uuid.UUID | None = None + version_id: uuid.UUID | None = None + units: str = Field(..., min_length=1) + fraction: Daf = Field(ge=Decimal(1), default=Decimal(1)) + product_yield: Daf = Field(gt=Decimal(0), le=Decimal(1), default=Decimal(1)) + cost_price: Daf = Field(ge=Decimal(0), default=Decimal(0)) + sale_price: Daf = Field(ge=Decimal(0), default=Decimal(0)) + menu_category: MenuCategoryLink = Field(...) + sort_order: int = Field(ge=0, default=0) + + has_happy_hour: bool + is_not_available: bool + + valid_from: date | None = None + valid_till: date | None = None + model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) + + @field_validator("valid_from", mode="before") + @classmethod + def parse_valid_from(cls, value: str | date | None) -> date | None: + if value is None: + return None + if isinstance(value, date): + return value + return datetime.strptime(value, "%d-%b-%Y").date() + + @field_serializer("valid_from") + def serialize_valid_from(self, value: date | None, _info: Any) -> str | None: + return None if value is None else value.strftime("%d-%b-%Y") + + @field_validator("valid_till", mode="before") + @classmethod + def parse_valid_till(cls, value: str | date | None) -> date | None: + if value is None: + return None + if isinstance(value, date): + return value + return datetime.strptime(value, "%d-%b-%Y").date() + + @field_serializer("valid_till") + def serialize_valid_till(self, value: date | None, _info: Any) -> str | None: + return None if value is None else value.strftime("%d-%b-%Y") diff --git a/barker/barker/schemas/voucher.py b/barker/barker/schemas/voucher.py index a63a5b87..9c317956 100644 --- a/barker/barker/schemas/voucher.py +++ b/barker/barker/schemas/voucher.py @@ -14,7 +14,7 @@ from .tax import TaxLink class Inventory(BaseModel): id_: uuid.UUID | None = None - product: ProductLink + sku: ProductLink quantity: Daf price: Daf | None = None tax: TaxLink | None = None diff --git a/barker/barker/schemas/voucher_out.py b/barker/barker/schemas/voucher_out.py index 38e80cf0..95d74b9f 100644 --- a/barker/barker/schemas/voucher_out.py +++ b/barker/barker/schemas/voucher_out.py @@ -101,7 +101,7 @@ class Kot(BaseModel): model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True) @field_serializer("date_") - def serialize_date(self, value: datetime, _info): # type: ignore + def serialize_date(self, value: datetime, _info): return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S") @@ -140,25 +140,25 @@ class VoucherOut(BaseModel): ) @field_serializer("date_") - def serialize_date(self, value: datetime, _info): # type: ignore + def serialize_date(self, value: datetime, _info): return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M") @field_serializer("date_tip") - def serialize_date_tip(self, value: datetime, _info): # type: ignore + def serialize_date_tip(self, value: datetime, _info): return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S") @field_serializer("creation_date") - def serialize_creation_date(self, value: datetime, _info): # type: ignore + def serialize_creation_date(self, value: datetime, _info): return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M") @field_serializer("creation_date_tip") - def serialize_creation_date_tip(self, value: datetime, _info): # type: ignore + def serialize_creation_date_tip(self, value: datetime, _info): return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S") @field_serializer("last_edit_date") - def serialize_last_edit_date(self, value: datetime, _info): # type: ignore + def serialize_last_edit_date(self, value: datetime, _info): return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M") @field_serializer("last_edit_date_tip") - def serialize_last_edit_date_tip(self, value: datetime, _info): # type: ignore + def serialize_last_edit_date_tip(self, value: datetime, _info): return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S") diff --git a/barker/barker/tasks/printing.py b/barker/barker/tasks/printing.py index 9f730045..4d484f42 100644 --- a/barker/barker/tasks/printing.py +++ b/barker/barker/tasks/printing.py @@ -20,7 +20,7 @@ async def sent_to_printer(ctx: dict, data: str, address: str, cut_code: str): # retry the job with increasing back-off # delays will be 5s, 10s, 15s, 20s # after max_tries (default 5) the job will permanently fail - raise Retry(defer=ctx["job_try"] * 5) + raise Retry(defer=ctx["job_try"] * 5) from None # GS = "\x1d" # PAPER_CUT = GS + "V" diff --git a/barker/pyproject.toml b/barker/pyproject.toml index efa841c8..d46f78a0 100644 --- a/barker/pyproject.toml +++ b/barker/pyproject.toml @@ -21,6 +21,7 @@ arq = "^0.26.3" aiohttp = "^3.12.13" cryptography = "^45.0.4" gunicorn = "^23.0.0" +pydantic-settings = "^2.12.0" [tool.poetry.group.dev.dependencies] pre-commit = "^4.2.0" @@ -97,18 +98,31 @@ line-ending = "auto" [tool.mypy] # --strict -disallow_any_generics = true -disallow_subclassing_any = true -disallow_untyped_calls = true -disallow_untyped_defs = true -disallow_incomplete_defs = true -check_untyped_defs = true -disallow_untyped_decorators = true -no_implicit_optional = true -warn_redundant_casts = true -warn_unused_ignores = true + +# Good safety defaults warn_return_any = true warn_unused_configs = true +warn_redundant_casts = true +warn_unused_ignores = true +no_implicit_optional = true strict_equality = true + +# Practical ergonomics +pretty = true +show_error_codes = true +show_column_numbers = true +error_summary = true + +# These keep signal high in real-world FastAPI projects +disallow_any_generics = true +check_untyped_defs = true + +# Start here; tighten later +disallow_untyped_calls = true +disallow_incomplete_defs = true +disallow_subclassing_any = true +disallow_untyped_defs = true +disallow_untyped_decorators = true + plugins = ["sqlalchemy.ext.mypy.plugin"] # --strict end diff --git a/bookie/package.json b/bookie/package.json index 6a0efe93..ad2e905d 100644 --- a/bookie/package.json +++ b/bookie/package.json @@ -14,7 +14,6 @@ }, "private": true, "dependencies": { - "@angular/animations": "^20.0.6", "@angular/cdk": "^20.0.4", "@angular/common": "^20.0.6", "@angular/compiler": "^20.0.6", diff --git a/bookie/src/app/app.config.ts b/bookie/src/app/app.config.ts index f1f3f330..c915ca4c 100644 --- a/bookie/src/app/app.config.ts +++ b/bookie/src/app/app.config.ts @@ -18,7 +18,6 @@ import { MatSortModule } from '@angular/material/sort'; import { MatTableModule } from '@angular/material/table'; import { MatToolbarModule } from '@angular/material/toolbar'; import { BrowserModule } from '@angular/platform-browser'; -import { provideAnimations } from '@angular/platform-browser/animations'; import { provideRouter, withRouterConfig } from '@angular/router'; import { dateFormat } from './app.environment'; @@ -33,7 +32,6 @@ export const appConfig: ApplicationConfig = { importProvidersFrom( BrowserModule, MatButtonModule, - MatDialogModule, MatDividerModule, MatFormFieldModule, @@ -52,7 +50,6 @@ export const appConfig: ApplicationConfig = { { provide: LOCALE_ID, useValue: 'en-IN' }, AuthService, provideHttpClient(withInterceptors([refreshInterceptor, jwtInterceptor, authInterceptor])), - provideAnimations(), provideRouter( routes, withRouterConfig({ diff --git a/bookie/src/app/core/bill-view-item.ts b/bookie/src/app/core/bill-view-item.ts index 0d2e8b81..72571d0d 100644 --- a/bookie/src/app/core/bill-view-item.ts +++ b/bookie/src/app/core/bill-view-item.ts @@ -6,7 +6,7 @@ export class BillViewItem { isKot: boolean; info: string; - productId: string; + skuId: string; isHappyHour: boolean; isPrinted: boolean; quantity: number; @@ -24,7 +24,7 @@ export class BillViewItem { this.isKot = true; this.info = ''; this.kotId = ''; - this.productId = ''; + this.skuId = ''; this.isHappyHour = false; this.isPrinted = false; this.quantity = 0; diff --git a/bookie/src/app/core/menu-category.ts b/bookie/src/app/core/menu-category.ts index af873161..0eb4fa5e 100644 --- a/bookie/src/app/core/menu-category.ts +++ b/bookie/src/app/core/menu-category.ts @@ -1,4 +1,4 @@ -import { Product } from './product'; +import { StockKeepingUnit as Product } from './stock-keeping-unit'; export class MenuCategory { id: string | undefined; diff --git a/bookie/src/app/core/product.ts b/bookie/src/app/core/product.ts index 5e53af90..8a3165d4 100644 --- a/bookie/src/app/core/product.ts +++ b/bookie/src/app/core/product.ts @@ -2,18 +2,40 @@ import { MenuCategory } from './menu-category'; import { SaleCategory } from './sale-category'; import { Tax } from './tax'; +export class StockKeepingUnit { + id: string | undefined; + versionId?: string; + units: string; + fraction: number; + productYield: number; + costPrice: number; + salePrice: number; + menuCategory?: MenuCategory; + + sortOrder: number; + + hasHappyHour: boolean; + isNotAvailable: boolean; + + public constructor(init?: Partial) { + this.units = ''; + this.fraction = 1; + this.productYield = 1; + this.costPrice = 0; + this.salePrice = 0; + this.sortOrder = 0; + this.hasHappyHour = false; + this.isNotAvailable = false; + Object.assign(this, init); + } +} + export class Product { id: string | undefined; versionId?: string; name: string; - units: string; - menuCategory?: MenuCategory; + fractionUnits: string; saleCategory?: SaleCategory; - price: number; - hasHappyHour: boolean; - isNotAvailable: boolean; - quantity: number; - isActive: boolean; sortOrder: number; enabled: boolean; @@ -22,20 +44,18 @@ export class Product { validFrom: string | null; validTill: string | null; + skus: StockKeepingUnit[]; + public constructor(init?: Partial) { this.id = undefined; this.name = ''; - this.units = ''; - this.price = 0; - this.hasHappyHour = false; - this.isNotAvailable = false; - this.quantity = 0; - this.isActive = true; + this.fractionUnits = ''; this.sortOrder = 0; this.enabled = true; this.validFrom = null; this.validTill = null; this.tax = new Tax(); + this.skus = []; Object.assign(this, init); } } diff --git a/bookie/src/app/core/stock-keeping-unit.ts b/bookie/src/app/core/stock-keeping-unit.ts new file mode 100644 index 00000000..09276e03 --- /dev/null +++ b/bookie/src/app/core/stock-keeping-unit.ts @@ -0,0 +1,41 @@ +import { MenuCategory } from './menu-category'; +import { SaleCategory } from './sale-category'; +import { Tax } from './tax'; + +export class StockKeepingUnit { + id: string | undefined; + versionId?: string; + name: string; + units: string; + menuCategory?: MenuCategory; + saleCategory?: SaleCategory; + price: number; + hasHappyHour: boolean; + isNotAvailable: boolean; + quantity: number; + isActive: boolean; + sortOrder: number; + + enabled: boolean; + tax: Tax; + + validFrom: string | null; + validTill: string | null; + + public constructor(init?: Partial) { + this.id = undefined; + this.name = ''; + this.units = ''; + this.price = 0; + this.hasHappyHour = false; + this.isNotAvailable = false; + this.quantity = 0; + this.isActive = true; + this.sortOrder = 0; + this.enabled = true; + this.validFrom = null; + this.validTill = null; + this.tax = new Tax(); + Object.assign(this, init); + } +} diff --git a/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.ts b/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.ts index 6b4a5a5c..2eb6f66e 100644 --- a/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.ts +++ b/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.ts @@ -14,7 +14,7 @@ import { map } from 'rxjs/operators'; import { MenuCategory } from '../../core/menu-category'; import { ModifierCategory } from '../../core/modifier-category'; -import { Product } from '../../core/product'; +import { StockKeepingUnit as Product } from '../../core/stock-keeping-unit'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { ModifierCategoryService } from '../modifier-category.service'; import { NodeItem } from '../node-item'; diff --git a/bookie/src/app/modifier-categories/modifier-category.service.ts b/bookie/src/app/modifier-categories/modifier-category.service.ts index 3ffc0831..c9d64ef2 100644 --- a/bookie/src/app/modifier-categories/modifier-category.service.ts +++ b/bookie/src/app/modifier-categories/modifier-category.service.ts @@ -32,10 +32,10 @@ export class ModifierCategoryService { .pipe(catchError(this.log.handleError(serviceName, 'list'))) as Observable; } - listForProduct(id: string): Observable { + listForSku(id: string): Observable { return this.http .get(`${url}/for-product/${id}`) - .pipe(catchError(this.log.handleError(serviceName, 'listIsActiveOfProduct'))) as Observable; + .pipe(catchError(this.log.handleError(serviceName, 'listForSku'))) as Observable; } save(modifierCategory: ModifierCategory): Observable { diff --git a/bookie/src/app/product/product-detail/product-detail-datasource.ts b/bookie/src/app/product/product-detail/product-detail-datasource.ts new file mode 100644 index 00000000..fbaafeb8 --- /dev/null +++ b/bookie/src/app/product/product-detail/product-detail-datasource.ts @@ -0,0 +1,16 @@ +import { DataSource } from '@angular/cdk/collections'; +import { Observable } from 'rxjs'; + +import { StockKeepingUnit } from '../../core/product'; + +export class ProductDetailDatasource extends DataSource { + constructor(private data: Observable) { + super(); + } + + connect(): Observable { + return this.data; + } + + disconnect() {} +} diff --git a/bookie/src/app/product/product-detail/product-detail.component.css b/bookie/src/app/product/product-detail/product-detail.component.css index e69de29b..d4041d9d 100644 --- a/bookie/src/app/product/product-detail/product-detail.component.css +++ b/bookie/src/app/product/product-detail/product-detail.component.css @@ -0,0 +1,11 @@ +.nutrition-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 20px; + align-items: stretch; + justify-items: stretch; +} +.nutrition-grid > * { + width: 100%; + box-sizing: border-box; /* helps with padding */ +} diff --git a/bookie/src/app/product/product-detail/product-detail.component.html b/bookie/src/app/product/product-detail/product-detail.component.html index 240bbdf0..38c889e0 100644 --- a/bookie/src/app/product/product-detail/product-detail.component.html +++ b/bookie/src/app/product/product-detail/product-detail.component.html @@ -6,25 +6,52 @@ + Fraction Units + + + +
+ + Sale Category + + @for (sc of saleCategories; track sc) { + + {{ sc.name }} + + } + + + Enabled? +
+ +

Stock Keeping Units

+ +
+ Units -
-
+ - Price - + Fraction + + - Quantity - + Yield + -
-
- Has Happy Hour? - Is Not Available? -
-
+ + + Cost Price + + + + + Sale Price + + + Menu Category @@ -35,18 +62,87 @@ } - - Sale Category - - @for (sc of saleCategories; track sc) { - - {{ sc.name }} - - } - - -
- + + Has Happy Hour? + Not Available? + + + + + +
+ + + + Units + {{ row.units }} + + + + + Fraction + {{ row.fraction }} + + + + + Yield + {{ row.productYield }} + + + + + Cost Price + {{ row.costPrice | currency: 'INR' }} + + + + + Sale Price + {{ row.salePrice | currency: 'INR' }} + + + + + Menu Category + + {{ row.menuCategory?.name ?? row.menuCategory?.id ?? '' }} + + + + + + Happy Hour + + + + + + + + Not Available + + + + + + + + Action + + + + + + + + + +
@if (!!item.id) { diff --git a/bookie/src/app/product/product-detail/product-detail.component.ts b/bookie/src/app/product/product-detail/product-detail.component.ts index da69fae5..27638cb2 100644 --- a/bookie/src/app/product/product-detail/product-detail.component.ts +++ b/bookie/src/app/product/product-detail/product-detail.component.ts @@ -11,23 +11,30 @@ import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; import { MenuCategory } from '../../core/menu-category'; -import { Product } from '../../core/product'; +import { Product, StockKeepingUnit } from '../../core/product'; import { SaleCategory } from '../../core/sale-category'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { ProductService } from '../product.service'; +import { BehaviorSubject } from 'rxjs'; +import { ProductDetailDatasource } from './product-detail-datasource'; +import { MatTableModule } from '@angular/material/table'; +import { CurrencyPipe } from '@angular/common'; +import { MatIconModule } from '@angular/material/icon'; @Component({ selector: 'app-product-detail', templateUrl: './product-detail.component.html', styleUrls: ['./product-detail.component.css'], imports: [ + CurrencyPipe, MatButtonModule, - MatCheckboxModule, MatFormFieldModule, + MatIconModule, MatInputModule, MatOptionModule, MatSelectModule, + MatTableModule, ReactiveFormsModule, ], }) @@ -39,32 +46,53 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { private ser = inject(ProductService); @ViewChild('name', { static: true }) nameElement?: ElementRef; - form: FormGroup<{ + form: FormGroup<{ + // Product fields name: FormControl; - units: FormControl; - menuCategory: FormControl; + fractionUnits: FormControl; saleCategory: FormControl; - price: FormControl; - hasHappyHour: FormControl; - isNotAvailable: FormControl; - quantity: FormControl; + enabled: FormControl; + + // SKU add/edit row + addRow: FormGroup<{ + units: FormControl; + fraction: FormControl; + productYield: FormControl; + costPrice: FormControl; + salePrice: FormControl; + menuCategory: FormControl; + hasHappyHour: FormControl; + isNotAvailable: FormControl; + }>; }>; + menuCategories: MenuCategory[] = []; saleCategories: SaleCategory[] = []; + public skus = new BehaviorSubject([]); + dataSource: ProductDetailDatasource = new ProductDetailDatasource(this.skus); item: Product = new Product(); + displayedColumns = ['units', 'fraction', 'productYield', 'costPrice', 'salePrice', 'menuCategory', 'hasHappyHour', 'isNotAvailable', 'action']; + constructor() { // Create form - this.form = new FormGroup({ + this.form = new FormGroup({ name: new FormControl('', { nonNullable: true }), - units: new FormControl('', { nonNullable: true }), - menuCategory: new FormControl('', { nonNullable: true }), + fractionUnits: new FormControl('', { nonNullable: true }), saleCategory: new FormControl('', { nonNullable: true }), - price: new FormControl(0, { nonNullable: true }), - hasHappyHour: new FormControl(false, { nonNullable: true }), - isNotAvailable: new FormControl(false, { nonNullable: true }), - quantity: new FormControl(0, { nonNullable: true }), + enabled: new FormControl(true, { nonNullable: true }), + + addRow: new FormGroup({ + units: new FormControl('', { nonNullable: true }), + fraction: new FormControl(1, { nonNullable: true }), + productYield: new FormControl(1, { nonNullable: true }), + costPrice: new FormControl(0, { nonNullable: true }), + salePrice: new FormControl(0, { nonNullable: true }), + menuCategory: new FormControl('', { nonNullable: true }), + hasHappyHour: new FormControl(false, { nonNullable: true }), + isNotAvailable: new FormControl(false, { nonNullable: true }), + }), }); } @@ -85,14 +113,22 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { this.item = item; this.form.setValue({ name: this.item.name ?? '', - units: this.item.units ?? '', - menuCategory: this.item.menuCategory?.id ?? '', + fractionUnits: this.item.fractionUnits ?? '', saleCategory: this.item.saleCategory?.id ?? '', - price: this.item.price ?? 0, - hasHappyHour: this.item.hasHappyHour, - isNotAvailable: this.item.isNotAvailable, - quantity: this.item.quantity ?? 0, + enabled: this.item.enabled ?? true, + + addRow: { + units: '', + fraction: 1, + productYield: 1, + costPrice: 0, + salePrice: 0, + menuCategory: '', + hasHappyHour: false, + isNotAvailable: false, + }, }); + this.skus.next(this.item.skus); } ngAfterViewInit() { @@ -103,6 +139,87 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { }, 0); } + addRow() { + const formValue = this.form.value.addRow; + if (formValue === undefined) { + return; + } + const units = (formValue.units ?? '').trim(); + if (units.length < 1) { + this.snackBar.open('Units cannot be blank', 'Error'); + return; + } + const fraction = Number(formValue.fraction ?? 1); + if (Number.isNaN(fraction) || fraction < 1) { + this.snackBar.open('Fraction has to be >= 1', 'Error'); + return; + } + const productYield = Number(formValue.productYield ?? 1); + if (Number.isNaN(productYield) || productYield <= 0 || productYield > 1) { + this.snackBar.open('Product Yield has to be > 0 and <= 1', 'Error'); + return; + } + const costPrice = Number(formValue.costPrice ?? 0); + if (Number.isNaN(costPrice) || costPrice < 0) { + this.snackBar.open('Cost Price has to be >= 0', 'Error'); + return; + } + const salePrice = Number(formValue.salePrice ?? 0); + if (Number.isNaN(salePrice) || salePrice < 0) { + this.snackBar.open('Sale Price has to be >= 0', 'Error'); + return; + } + const menuCategoryId = formValue.menuCategory ?? ''; + if (!menuCategoryId) { + this.snackBar.open('Menu Category is required', 'Error'); + return; + } + const sku = new StockKeepingUnit({ + units, + fraction, + productYield, + costPrice, + salePrice, + menuCategory: new MenuCategory({ id: menuCategoryId, name: this.menuCategories.find((x) => x.id === menuCategoryId)?.name ?? '' }), + hasHappyHour: formValue.hasHappyHour ?? false, + isNotAvailable: formValue.isNotAvailable ?? false, + }); + this.item.skus.push(sku); + this.skus.next(this.item.skus); + this.resetAddRow(); + // console.log('Added SKU', sku, this.item.skus); + } + + resetAddRow() { + this.form.controls.addRow.reset(); + } + + editRow(row: StockKeepingUnit) { + // const dialogRef = this.dialog.open(ProductDetailDialogComponent, { + // width: '750px', + // data: { + // item: { ...row }, + // isSold: this.item.isSold, + // isPurchased: this.item.isPurchased, + // }, + // }); + + // dialogRef.afterClosed().subscribe((result: boolean | StockKeepingUnit) => { + // if (!result) { + // return; + // } + // const j = result as StockKeepingUnit; + // Object.assign(row, j); + // this.skus.next(this.item.skus); + // this.resetAddRow(); + // }); + } + + deleteRow(row: StockKeepingUnit) { + this.item.skus.splice(this.item.skus.indexOf(row), 1); + this.skus.next(this.item.skus); + } + save() { this.ser.saveOrUpdate(this.getItem()).subscribe({ next: () => { @@ -142,20 +259,35 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { getItem(): Product { const formModel = this.form.value; + this.item.name = formModel.name ?? ''; - this.item.units = formModel.units ?? ''; - if (this.item.menuCategory === null || this.item.menuCategory === undefined) { - this.item.menuCategory = new MenuCategory(); - } - this.item.menuCategory.id = formModel.menuCategory; + this.item.fractionUnits = formModel.fractionUnits ?? ''; + this.item.sortOrder = this.item.sortOrder ?? 0; + this.item.enabled = formModel.enabled ?? true; + + // Sale Category (by id) if (this.item.saleCategory === null || this.item.saleCategory === undefined) { this.item.saleCategory = new SaleCategory(); } - this.item.saleCategory.id = formModel.saleCategory; - this.item.price = formModel.price ?? 0; - this.item.hasHappyHour = formModel.hasHappyHour ?? false; - this.item.isNotAvailable = formModel.isNotAvailable ?? false; - this.item.quantity = formModel.quantity ?? 0; + this.item.saleCategory.id = formModel.saleCategory ?? ''; + + // Ensure skus list exists + if (!this.item.skus) { + this.item.skus = []; + } + return this.item; } } + + + + // if (this.item.menuCategory === null || this.item.menuCategory === undefined) { + // this.item.menuCategory = new MenuCategory(); + // } + // this.item.menuCategory.id = formModel.menuCategory; + + // this.item.price = formModel.price ?? 0; + // this.item.hasHappyHour = formModel.hasHappyHour ?? false; + // this.item.isNotAvailable = formModel.isNotAvailable ?? false; + // this.item.quantity = formModel.quantity ?? 0; diff --git a/bookie/src/app/product/product-list.resolver.ts b/bookie/src/app/product/product-list.resolver.ts index 6746a82b..68ee3e52 100644 --- a/bookie/src/app/product/product-list.resolver.ts +++ b/bookie/src/app/product/product-list.resolver.ts @@ -1,7 +1,7 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; -import { Product } from '../core/product'; +import { StockKeepingUnit as Product } from '../core/stock-keeping-unit'; import { ProductService } from './product.service'; export const productListResolver: ResolveFn = () => { diff --git a/bookie/src/app/product/product-list/product-list-datasource.ts b/bookie/src/app/product/product-list/product-list-datasource.ts index a4e1f1b2..4b0a97ca 100644 --- a/bookie/src/app/product/product-list/product-list-datasource.ts +++ b/bookie/src/app/product/product-list/product-list-datasource.ts @@ -52,22 +52,23 @@ export class ProductListDataSource extends DataSource { disconnect() {} private getFilteredData(data: Product[], search: string, menuCategory: string): Product[] { - return data - .filter( - (x: Product) => - search === null || - search === undefined || - search === '' || - `${x.name} ${x.units} ${x.saleCategory?.name} ${x.menuCategory?.name}` - .toLowerCase() - .indexOf(search.toLowerCase()) !== -1, - ) - .filter( - (x) => - menuCategory === null || - menuCategory === undefined || - menuCategory === '' || - (x.menuCategory as MenuCategory).id === menuCategory, - ); + return data; + // return data + // .filter( + // (x: Product) => + // search === null || + // search === undefined || + // search === '' || + // `${x.name} ${x.units} ${x.saleCategory?.name} ${x.menuCategory?.name}` + // .toLowerCase() + // .indexOf(search.toLowerCase()) !== -1, + // ) + // .filter( + // (x) => + // menuCategory === null || + // menuCategory === undefined || + // menuCategory === '' || + // (x.menuCategory as MenuCategory).id === menuCategory, + // ); } } diff --git a/bookie/src/app/product/product-list/product-list.component.html b/bookie/src/app/product/product-list/product-list.component.html index 10f8faf2..309084cc 100644 --- a/bookie/src/app/product/product-list/product-list.component.html +++ b/bookie/src/app/product/product-list/product-list.component.html @@ -46,21 +46,44 @@ Name - {{ row.name }} ({{ row.units }}) + + + Price - {{ row.price | currency: 'INR' }} + +
    + @for (sku of row.skus; track sku) { +
  • + {{ sku.salePrice | currency: 'INR' }} +
  • + } +
+
Menu Category - {{ row.menuCategory.name }} + +
    + @for (sku of row.skus; track sku) { +
  • + {{ sku.menuCategory.name }} +
  • + } +
+
@@ -73,12 +96,14 @@ Details -
+
    + @for (sku of row.skus; track sku) { +
  • - {{ row.hasHappyHour ? 'sentiment_satisfied_alt' : 'sentiment_dissatisfied' }} + {{ sku.hasHappyHour ? 'sentiment_satisfied_alt' : 'sentiment_dissatisfied' }} - {{ row.hasHappyHour ? 'Happy Hour' : 'Regular' }} + {{ sku.hasHappyHour ? 'Happy Hour' : 'Regular' }}
    @@ -86,14 +111,26 @@ {{ row.isNotAvailable ? 'Not Available' : 'Available' }}
    -
+ + } +
Quantity - {{ row.quantity | number: '1.2-2' }} + +
    + @for (sku of row.skus; track sku) { +
  • + {{ sku.fraction | number: '1.2-2' }}{{ row.fractionUnits }} +
  • + } +
+ + +
diff --git a/bookie/src/app/product/product-list/product-list.component.ts b/bookie/src/app/product/product-list/product-list.component.ts index 575b9636..fa34ac9f 100644 --- a/bookie/src/app/product/product-list/product-list.component.ts +++ b/bookie/src/app/product/product-list/product-list.component.ts @@ -30,7 +30,6 @@ import { ProductListDataSource } from './product-list-datasource'; DecimalPipe, DragDropModule, MatButtonModule, - MatFormFieldModule, MatIconModule, MatInputModule, @@ -103,16 +102,16 @@ export class ProductListComponent implements OnInit { } dropTable(event: CdkDragDrop) { - const prevIndex = this.dataSource.filteredData.indexOf(event.item.data); - moveItemInArray(this.dataSource.filteredData, prevIndex, event.currentIndex); - if (this.dataSource.menuCategory === undefined) { - this.list = this.dataSource.filteredData; - } else { - this.list = this.list - .filter((x) => (x.menuCategory as MenuCategory).id !== this.dataSource.menuCategory) - .concat(this.dataSource.filteredData); - } - this.data.next(this.list); + // const prevIndex = this.dataSource.filteredData.indexOf(event.item.data); + // moveItemInArray(this.dataSource.filteredData, prevIndex, event.currentIndex); + // if (this.dataSource.menuCategory === undefined) { + // this.list = this.dataSource.filteredData; + // } else { + // this.list = this.list + // .filter((x) => (x.menuCategory as MenuCategory).id !== this.dataSource.menuCategory) + // .concat(this.dataSource.filteredData); + // } + // this.data.next(this.list); } exportCsv() { diff --git a/bookie/src/app/product/product-new.service.ts b/bookie/src/app/product/product-new.service.ts new file mode 100644 index 00000000..8863a5f3 --- /dev/null +++ b/bookie/src/app/product/product-new.service.ts @@ -0,0 +1,85 @@ +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Injectable, inject } from '@angular/core'; +import { Observable } from 'rxjs'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; +import { StockKeepingUnit as Product } from '../core/stock-keeping-unit'; + +const httpOptions = { + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), +}; + +const url = '/api/products'; +const serviceName = 'ProductService'; + +@Injectable({ providedIn: 'root' }) +export class ProductService { + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); + + get(id: string | null): Observable { + const getUrl: string = id === null ? `${url}` : `${url}/${id}`; + return this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) as Observable; + } + + list(): Observable { + return this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) as Observable; + } + + listOfSaleCategory(id: string): Observable { + const options = { params: new HttpParams().set('sc', id) }; + return this.http + .get(`${url}/query`, options) + .pipe(catchError(this.log.handleError(serviceName, 'listOfSaleCategory'))) as Observable; + } + + listIsActiveOfCategory(id: string): Observable { + const options = { params: new HttpParams().set('mc', id) }; + return this.http + .get(`${url}/query`, options) + .pipe(catchError(this.log.handleError(serviceName, 'listIsActiveOfCategory'))) as Observable; + } + + save(product: Product): Observable { + return this.http + .post(`${url}`, product, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) as Observable; + } + + update(product: Product): Observable { + return this.http + .put(`${url}/${product.id}`, product, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) as Observable; + } + + updateSortOrder(list: Product[]): Observable { + return this.http + .post(`${url}/list`, list, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'updateSortOrder'))) as Observable; + } + + saveOrUpdate(product: Product): Observable { + if (!product.versionId) { + return this.save(product); + } + return this.update(product); + } + + delete(id: string): Observable { + return this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) as Observable; + } + + balance(id: string, date: string): Observable { + const options = { params: new HttpParams().set('d', date) }; + return this.http + .get(`${url}/balance`, options) + .pipe(catchError(this.log.handleError(serviceName, 'balance'))) as Observable; + } +} diff --git a/bookie/src/app/product/product.resolver.ts b/bookie/src/app/product/product.resolver.ts index ef916305..933331db 100644 --- a/bookie/src/app/product/product.resolver.ts +++ b/bookie/src/app/product/product.resolver.ts @@ -1,7 +1,7 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; -import { Product } from '../core/product'; +import { StockKeepingUnit as Product } from '../core/stock-keeping-unit'; import { ProductService } from './product.service'; export const productResolver: ResolveFn = (route) => { diff --git a/bookie/src/app/product/product.service.ts b/bookie/src/app/product/product.service.ts index cfc1b95f..3ca111fa 100644 --- a/bookie/src/app/product/product.service.ts +++ b/bookie/src/app/product/product.service.ts @@ -4,7 +4,8 @@ import { Observable } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; -import { Product } from '../core/product'; +import { StockKeepingUnit as Product } from '../core/stock-keeping-unit'; +import { Product as ProductNew } from '../core/product'; const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }), @@ -45,25 +46,25 @@ export class ProductService { .pipe(catchError(this.log.handleError(serviceName, 'listIsActiveOfCategory'))) as Observable; } - save(product: Product): Observable { + save(product: ProductNew): Observable { return this.http - .post(`${url}`, product, httpOptions) + .post(`${url}`, product, httpOptions) .pipe(catchError(this.log.handleError(serviceName, 'save'))) as Observable; } - update(product: Product): Observable { + update(product: ProductNew): Observable { return this.http - .put(`${url}/${product.id}`, product, httpOptions) + .put(`${url}/${product.id}`, product, httpOptions) .pipe(catchError(this.log.handleError(serviceName, 'update'))) as Observable; } - updateSortOrder(list: Product[]): Observable { + updateSortOrder(list: ProductNew[]): Observable { return this.http - .post(`${url}/list`, list, httpOptions) - .pipe(catchError(this.log.handleError(serviceName, 'updateSortOrder'))) as Observable; + .post(`${url}/list`, list, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'updateSortOrder'))) as Observable; } - saveOrUpdate(product: Product): Observable { + saveOrUpdate(product: ProductNew): Observable { if (!product.versionId) { return this.save(product); } diff --git a/bookie/src/app/sale-category/product-list.resolver.ts b/bookie/src/app/sale-category/product-list.resolver.ts index 9ec44178..b18d4eab 100644 --- a/bookie/src/app/sale-category/product-list.resolver.ts +++ b/bookie/src/app/sale-category/product-list.resolver.ts @@ -2,7 +2,7 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { of as observableOf } from 'rxjs'; -import { Product } from '../core/product'; +import { StockKeepingUnit as Product } from '../core/stock-keeping-unit'; import { ProductService } from '../product/product.service'; export const productListResolver: ResolveFn = (route) => { diff --git a/bookie/src/app/sale-category/sale-category-detail/sale-category-detail-datasource.ts b/bookie/src/app/sale-category/sale-category-detail/sale-category-detail-datasource.ts index 88f9363a..4a462e9c 100644 --- a/bookie/src/app/sale-category/sale-category-detail/sale-category-detail-datasource.ts +++ b/bookie/src/app/sale-category/sale-category-detail/sale-category-detail-datasource.ts @@ -2,7 +2,7 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; -import { Product } from '../../core/product'; +import { StockKeepingUnit as Product } from '../../core/stock-keeping-unit'; export class SaleCategoryDetailDatasource extends DataSource { private data: Product[] = []; diff --git a/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.ts b/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.ts index f86fb1a2..66c846a9 100644 --- a/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.ts +++ b/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.ts @@ -14,7 +14,7 @@ import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import { round } from 'mathjs'; import { BehaviorSubject } from 'rxjs'; -import { Product } from '../../core/product'; +import { StockKeepingUnit as Product } from '../../core/stock-keeping-unit'; import { SaleCategory } from '../../core/sale-category'; import { Tax } from '../../core/tax'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; diff --git a/bookie/src/app/sales/bill.service.ts b/bookie/src/app/sales/bill.service.ts index c408fa5a..8bd266e9 100644 --- a/bookie/src/app/sales/bill.service.ts +++ b/bookie/src/app/sales/bill.service.ts @@ -7,7 +7,7 @@ import { tap } from 'rxjs/operators'; import { BillViewItem } from '../core/bill-view-item'; import { ModifierCategory } from '../core/modifier-category'; -import { Product } from '../core/product'; +import { StockKeepingUnit } from '../core/stock-keeping-unit'; import { ReceivePaymentItem } from '../core/receive-payment-item'; import { SaleCategory } from '../core/sale-category'; import { Table } from '../core/table'; @@ -80,10 +80,10 @@ export class BillService { id: i.id, kotId: k.id, isKot: false, - productId: i.product.id, + skuId: i.sku.id, isHappyHour: i.isHappyHour, isPrinted: !!k.id, - info: `${i.product.name} @ ${i.price} - ${this.math.halfRoundEven(i.discount * 100, 2)}%`, + info: `${i.sku.name} @ ${i.price} - ${this.math.halfRoundEven(i.discount * 100, 2)}%`, quantity: i.quantity, modifiers: i.modifiers, }), @@ -101,22 +101,22 @@ export class BillService { this.displayBill(); } - minimum(productId: string, happyHour: boolean): number { + minimum(skuId: string, happyHour: boolean): number { return this.bill.kots.reduce( (t, k) => k.inventories.reduce( - (a, c) => (c.product.id === productId && c.isHappyHour === happyHour ? a + c.quantity : a), + (a, c) => (c.sku.id === skuId && c.isHappyHour === happyHour ? a + c.quantity : a), 0, ) + t, 0, ); } - addProduct(product: Product, quantity: number, discount: number): void { + addSku(sku: StockKeepingUnit, quantity: number, discount: number): void { const newKot = this.bill.kots.find((k) => k.id === undefined) as Kot; - const old = newKot.inventories.find((x) => x.product.id === product.id && x.isHappyHour === product.hasHappyHour); + const old = newKot.inventories.find((x) => x.sku.id === sku.id && x.isHappyHour === sku.hasHappyHour); if (quantity < 0) { - const minimum = this.minimum(product.id as string, product.hasHappyHour) + quantity; + const minimum = this.minimum(sku.id as string, sku.hasHappyHour) + quantity; if (minimum + quantity < 0) { this.snackBar.open('Total quantity cannot be negative!', 'Error'); return; @@ -126,17 +126,17 @@ export class BillService { old.quantity += quantity; } else { const item = new Inventory({ - product, + sku, quantity, - price: product.price, - isHappyHour: product.hasHappyHour, - taxRate: product.tax.rate, - tax: product.tax, + price: sku.price, + isHappyHour: sku.hasHappyHour, + taxRate: sku.tax.rate, + tax: sku.tax, discount, modifiers: [], }); newKot.inventories.push(item); - this.modifierCategoryService.listForProduct(product.id as string).subscribe((result) => { + this.modifierCategoryService.listForSku(sku.id as string).subscribe((result) => { if (result.reduce((a: number, c: ModifierCategory) => a + c.minimum, 0)) { this.showModifier(item); } @@ -155,7 +155,7 @@ export class BillService { maxWidth: 'none', maxHeight: 'none', data: { - list: this.modifierCategoryService.listForProduct(item.product.id as string), + list: this.modifierCategoryService.listForSku(item.sku.id as string), selected: Object.assign([], item.modifiers), }, }); @@ -171,7 +171,7 @@ export class BillService { addOne(item: BillViewItem): void { const newKot = this.bill.kots.find((k) => k.id === undefined) as Kot; const old = newKot.inventories.find( - (x) => x.product.id === item.productId && x.isHappyHour === item.isHappyHour, + (x) => x.sku.id === item.skuId && x.isHappyHour === item.isHappyHour, ) as Inventory; old.quantity += 1; this.displayBill(); @@ -180,7 +180,7 @@ export class BillService { quantity(item: BillViewItem, quantity: number): void { const newKot = this.bill.kots.find((k) => k.id === undefined) as Kot; const old = newKot.inventories.find( - (x) => x.product.id === item.productId && x.isHappyHour === item.isHappyHour, + (x) => x.sku.id === item.skuId && x.isHappyHour === item.isHappyHour, ) as Inventory; old.quantity = quantity; this.displayBill(); @@ -189,9 +189,9 @@ export class BillService { subtractOne(item: BillViewItem, canEdit: boolean): void { const newKot = this.bill.kots.find((k) => k.id === undefined) as Kot; const old = newKot.inventories.find( - (x) => x.product.id === item.productId && x.isHappyHour === item.isHappyHour, + (x) => x.sku.id === item.skuId && x.isHappyHour === item.isHappyHour, ) as Inventory; - if (item.quantity >= 1 || (canEdit && this.minimum(item.productId as string, item.isHappyHour) >= 1)) { + if (item.quantity >= 1 || (canEdit && this.minimum(item.skuId as string, item.isHappyHour) >= 1)) { old.quantity -= 1; } else if (item.quantity === 0) { newKot.inventories.splice(newKot.inventories.indexOf(old), 1); @@ -202,7 +202,7 @@ export class BillService { removeItem(item: BillViewItem): void { const newKot = this.bill.kots.find((k) => k.id === undefined) as Kot; const old = newKot.inventories.find( - (x) => x.product.id === item.productId && x.isHappyHour === item.isHappyHour, + (x) => x.sku.id === item.skuId && x.isHappyHour === item.isHappyHour, ) as Inventory; newKot.inventories.splice(newKot.inventories.indexOf(old), 1); this.displayBill(); @@ -211,17 +211,17 @@ export class BillService { modifier(item: BillViewItem): void { const newKot = this.bill.kots.find((k) => k.id === undefined) as Kot; const old = newKot.inventories.find( - (x) => x.product.id === item.productId && x.isHappyHour === item.isHappyHour, + (x) => x.sku.id === item.skuId && x.isHappyHour === item.isHappyHour, ) as Inventory; this.showModifier(old); } discount(discounts: { id: string; name: string; discount: number }[]): void { for (const kot of this.bill.kots) { - const noDiscount = kot.inventories.filter((x) => x.isHappyHour).map((x) => x.product.id as string); + const noDiscount = kot.inventories.filter((x) => x.isHappyHour).map((x) => x.sku.id as string); for (const inventory of kot.inventories) { - const e = discounts.find((d) => d.id === (inventory.product.saleCategory as SaleCategory).id); - if (e === undefined || noDiscount.indexOf(inventory.product.id as string) !== -1) { + const e = discounts.find((d) => d.id === (inventory.sku.saleCategory as SaleCategory).id); + if (e === undefined || noDiscount.indexOf(inventory.sku.id as string) !== -1) { continue; } inventory.discount = e.discount; @@ -264,11 +264,11 @@ export class BillService { printBill(guestBookId: string | null, voucherType: VoucherType): Observable { const item = JSON.parse(JSON.stringify(this.bill)); - const products = item.kots.reduce( + const skus = item.kots.reduce( (p: number, k: Kot) => p + k.inventories.filter((i) => i.quantity !== 0).length, 0, ); - if (products === 0) { + if (skus === 0) { return throwError(() => Error('Cannot print a blank Bill\nPlease add some products!')); } if (!this.happyHourItemsBalanced() || this.happyHourItemsMoreThanRegular()) { @@ -364,7 +364,7 @@ export class BillService { const data: { move: string[]; keep: string[] } = { move: [], keep: [] }; for (const kot of this.bill.kots) { for (const inv of kot.inventories) { - if (saleCategories.indexOf(inv.product.saleCategory?.id as string) === -1) { + if (saleCategories.indexOf(inv.sku.saleCategory?.id as string) === -1) { data.keep.push(inv.id as string); } else { data.move.push(inv.id as string); @@ -378,10 +378,10 @@ export class BillService { for (const kot of this.bill.kots) { const happyHourItems = kot.inventories .filter((x) => x.isHappyHour) - .map((x) => ({ id: x.product.id as string, quantity: x.quantity })); + .map((x) => ({ id: x.sku.id as string, quantity: x.quantity })); for (const item of happyHourItems) { const q = kot.inventories.find( - (x) => !x.isHappyHour && x.product.id === item.id && x.quantity === item.quantity, + (x) => !x.isHappyHour && x.sku.id === item.id && x.quantity === item.quantity, ); if (q === undefined) { return false; @@ -397,7 +397,7 @@ export class BillService { const invs: Record = {}; for (const kot of this.bill.kots) { for (const inventory of kot.inventories) { - const pid = inventory.product.id as string; + const pid = inventory.sku.id as string; if (invs[pid] === undefined) { invs[pid] = { normal: 0, happy: 0 }; } diff --git a/bookie/src/app/sales/bills/bill-selection-item.ts b/bookie/src/app/sales/bills/bill-selection-item.ts index fe1997cc..1ab01d3d 100644 --- a/bookie/src/app/sales/bills/bill-selection-item.ts +++ b/bookie/src/app/sales/bills/bill-selection-item.ts @@ -1,13 +1,13 @@ export class BillSelectionItem { kotId?: string; inventoryId?: string; - productId: string; + skuId: string; isHappyHour: boolean; public constructor(init?: Partial) { this.kotId = undefined; this.inventoryId = undefined; - this.productId = ''; + this.skuId = ''; this.isHappyHour = false; Object.assign(this, init); } diff --git a/bookie/src/app/sales/bills/bills.component.html b/bookie/src/app/sales/bills/bills.component.html index 85b2ac69..16982dfc 100644 --- a/bookie/src/app/sales/bills/bills.component.html +++ b/bookie/src/app/sales/bills/bills.component.html @@ -1,6 +1,6 @@

Bill

- +
Bill / KOT number diff --git a/bookie/src/app/sales/bills/bills.component.ts b/bookie/src/app/sales/bills/bills.component.ts index e41ab080..d57f736a 100644 --- a/bookie/src/app/sales/bills/bills.component.ts +++ b/bookie/src/app/sales/bills/bills.component.ts @@ -112,7 +112,7 @@ export class BillsComponent implements OnInit { new BillSelectionItem({ kotId: kot.id, inventoryId: c.id, - productId: c.product.id, + skuId: c.sku.id, isHappyHour: c.isHappyHour, }), ), @@ -126,7 +126,7 @@ export class BillsComponent implements OnInit { new BillSelectionItem({ kotId: invView.kotId, inventoryId: invView.id, - productId: invView.productId, + skuId: invView.skuId, isHappyHour: invView.isHappyHour, }), ); @@ -138,7 +138,7 @@ export class BillsComponent implements OnInit { new BillSelectionItem({ kotId: invView.kotId, inventoryId: invView.id, - productId: invView.productId, + skuId: invView.skuId, isHappyHour: invView.isHappyHour, }), ); @@ -154,7 +154,7 @@ export class BillsComponent implements OnInit { new BillSelectionItem({ kotId: kot.id, inventoryId: item.id, - productId: item.product.id, + skuId: item.sku.id, isHappyHour: item.isHappyHour, }), ); @@ -174,7 +174,7 @@ export class BillsComponent implements OnInit { new BillSelectionItem({ kotId: kot.id, inventoryId: item.id, - productId: item.product.id, + skuId: item.sku.id, isHappyHour: item.isHappyHour, }), ); @@ -186,11 +186,11 @@ export class BillsComponent implements OnInit { } } - trackByKotProductId(index: number, row: BillViewItem): string { + trackByKotskuId(index: number, row: BillViewItem): string { // Fallbacks in case fields are undefined/null const kotId = row.kotId ?? ''; - const productId = row.productId ?? ''; - return `${kotId}_${productId}`; + const skuId = row.skuId ?? ''; + return `${kotId}_${skuId}`; } addOne(item: BillViewItem): void { diff --git a/bookie/src/app/sales/bills/inventory.ts b/bookie/src/app/sales/bills/inventory.ts index 5104ebfc..af8eab8e 100644 --- a/bookie/src/app/sales/bills/inventory.ts +++ b/bookie/src/app/sales/bills/inventory.ts @@ -1,10 +1,10 @@ import { Modifier } from '../../core/modifier'; -import { Product } from '../../core/product'; +import { StockKeepingUnit as Product } from '../../core/stock-keeping-unit'; import { Tax } from '../../core/tax'; export class Inventory { id: string | undefined; - product: Product; + sku: Product; quantity: number; price: number; isHappyHour: boolean; @@ -16,7 +16,7 @@ export class Inventory { public constructor(init?: Partial) { this.id = undefined; - this.product = new Product(); + this.sku = new Product(); this.quantity = 0; this.price = 0; this.isHappyHour = false; diff --git a/bookie/src/app/sales/product.ts b/bookie/src/app/sales/product.ts new file mode 100644 index 00000000..5e53af90 --- /dev/null +++ b/bookie/src/app/sales/product.ts @@ -0,0 +1,41 @@ +import { MenuCategory } from './menu-category'; +import { SaleCategory } from './sale-category'; +import { Tax } from './tax'; + +export class Product { + id: string | undefined; + versionId?: string; + name: string; + units: string; + menuCategory?: MenuCategory; + saleCategory?: SaleCategory; + price: number; + hasHappyHour: boolean; + isNotAvailable: boolean; + quantity: number; + isActive: boolean; + sortOrder: number; + + enabled: boolean; + tax: Tax; + + validFrom: string | null; + validTill: string | null; + + public constructor(init?: Partial) { + this.id = undefined; + this.name = ''; + this.units = ''; + this.price = 0; + this.hasHappyHour = false; + this.isNotAvailable = false; + this.quantity = 0; + this.isActive = true; + this.sortOrder = 0; + this.enabled = true; + this.validFrom = null; + this.validTill = null; + this.tax = new Tax(); + Object.assign(this, init); + } +} diff --git a/bookie/src/app/sales/products/products.component.html b/bookie/src/app/sales/products/products.component.html index 620e0689..547fd089 100644 --- a/bookie/src/app/sales/products/products.component.html +++ b/bookie/src/app/sales/products/products.component.html @@ -11,7 +11,7 @@ = (route) => { diff --git a/bookie/src/app/temporal-product/temporal-product-detail/temporal-product-detail.component.ts b/bookie/src/app/temporal-product/temporal-product-detail/temporal-product-detail.component.ts index afd8ca79..59c1416b 100644 --- a/bookie/src/app/temporal-product/temporal-product-detail/temporal-product-detail.component.ts +++ b/bookie/src/app/temporal-product/temporal-product-detail/temporal-product-detail.component.ts @@ -13,7 +13,7 @@ import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; import { MenuCategory } from '../../core/menu-category'; -import { Product } from '../../core/product'; +import { StockKeepingUnit as Product } from '../../core/stock-keeping-unit'; import { SaleCategory } from '../../core/sale-category'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { TemporalProductService } from '../temporal-product.service'; diff --git a/bookie/src/app/temporal-product/temporal-product-list.resolver.ts b/bookie/src/app/temporal-product/temporal-product-list.resolver.ts index 742b210b..5d669cfd 100644 --- a/bookie/src/app/temporal-product/temporal-product-list.resolver.ts +++ b/bookie/src/app/temporal-product/temporal-product-list.resolver.ts @@ -1,7 +1,7 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; -import { Product } from '../core/product'; +import { StockKeepingUnit as Product } from '../core/stock-keeping-unit'; import { TemporalProductService } from './temporal-product.service'; export const temporalProductListResolver: ResolveFn = () => { diff --git a/bookie/src/app/temporal-product/temporal-product-list/temporal-product-list-datasource.ts b/bookie/src/app/temporal-product/temporal-product-list/temporal-product-list-datasource.ts index b8ab6b67..b9b8a80a 100644 --- a/bookie/src/app/temporal-product/temporal-product-list/temporal-product-list-datasource.ts +++ b/bookie/src/app/temporal-product/temporal-product-list/temporal-product-list-datasource.ts @@ -3,7 +3,7 @@ import { merge, Observable } from 'rxjs'; import { map, tap } from 'rxjs/operators'; import { MenuCategory } from '../../core/menu-category'; -import { Product } from '../../core/product'; +import { StockKeepingUnit as Product } from '../../core/stock-keeping-unit'; import { SaleCategory } from '../../core/sale-category'; export class TemporalProductListDatasource extends DataSource { diff --git a/bookie/src/app/temporal-product/temporal-product-list/temporal-product-list.component.ts b/bookie/src/app/temporal-product/temporal-product-list/temporal-product-list.component.ts index 1fd31b4f..b49cd749 100644 --- a/bookie/src/app/temporal-product/temporal-product-list/temporal-product-list.component.ts +++ b/bookie/src/app/temporal-product/temporal-product-list/temporal-product-list.component.ts @@ -12,7 +12,7 @@ import { BehaviorSubject, Observable } from 'rxjs'; import { debounceTime, distinctUntilChanged } from 'rxjs/operators'; import { MenuCategory } from '../../core/menu-category'; -import { Product } from '../../core/product'; +import { StockKeepingUnit as Product } from '../../core/stock-keeping-unit'; import { SaleCategory } from '../../core/sale-category'; import { TemporalProductListDatasource } from './temporal-product-list-datasource'; diff --git a/bookie/src/app/temporal-product/temporal-product.resolver.ts b/bookie/src/app/temporal-product/temporal-product.resolver.ts index 1f3e067d..5c517527 100644 --- a/bookie/src/app/temporal-product/temporal-product.resolver.ts +++ b/bookie/src/app/temporal-product/temporal-product.resolver.ts @@ -1,7 +1,7 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; -import { Product } from '../core/product'; +import { StockKeepingUnit as Product } from '../core/stock-keeping-unit'; import { TemporalProductService } from './temporal-product.service'; export const temporalProductResolver: ResolveFn = (route) => { diff --git a/bookie/src/app/temporal-product/temporal-product.service.ts b/bookie/src/app/temporal-product/temporal-product.service.ts index 76a3817a..9e2bb589 100644 --- a/bookie/src/app/temporal-product/temporal-product.service.ts +++ b/bookie/src/app/temporal-product/temporal-product.service.ts @@ -4,7 +4,7 @@ import { Observable } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; -import { Product } from '../core/product'; +import { StockKeepingUnit as Product } from '../core/stock-keeping-unit'; const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }), diff --git a/bookie/src/app/update-product-prices/update-product-prices.service.ts b/bookie/src/app/update-product-prices/update-product-prices.service.ts index ec42e4e5..f841c1de 100644 --- a/bookie/src/app/update-product-prices/update-product-prices.service.ts +++ b/bookie/src/app/update-product-prices/update-product-prices.service.ts @@ -4,7 +4,7 @@ import { Observable } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; -import { Product } from '../core/product'; +import { StockKeepingUnit as Product } from '../core/stock-keeping-unit'; import { UpdateProductPrices } from './update-product-prices'; const url = '/api/update-product-prices'; diff --git a/bookie/yarn.lock b/bookie/yarn.lock index e545fb13..0a514ece 100644 --- a/bookie/yarn.lock +++ b/bookie/yarn.lock @@ -2,12 +2,138 @@ # yarn lockfile v1 +"@algolia/abtesting@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@algolia/abtesting/-/abtesting-1.1.0.tgz#32c84876956727dcdca8df03c567f12fb39edf0d" + integrity sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow== + dependencies: + "@algolia/client-common" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + +"@algolia/client-abtesting@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.35.0.tgz#e4cb9ad90357c8b26fb6fbcd0157cc8bd1b600ed" + integrity sha512-uUdHxbfHdoppDVflCHMxRlj49/IllPwwQ2cQ8DLC4LXr3kY96AHBpW0dMyi6ygkn2MtFCc6BxXCzr668ZRhLBQ== + dependencies: + "@algolia/client-common" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + +"@algolia/client-analytics@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.35.0.tgz#ff0b9d9cbda074472d727a2d0a6b18bcc47076be" + integrity sha512-SunAgwa9CamLcRCPnPHx1V2uxdQwJGqb1crYrRWktWUdld0+B2KyakNEeVn5lln4VyeNtW17Ia7V7qBWyM/Skw== + dependencies: + "@algolia/client-common" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + +"@algolia/client-common@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.35.0.tgz#1d72b36308ceaa53d7d488cd3a161506ddeb0c42" + integrity sha512-ipE0IuvHu/bg7TjT2s+187kz/E3h5ssfTtjpg1LbWMgxlgiaZIgTTbyynM7NfpSJSKsgQvCQxWjGUO51WSCu7w== + +"@algolia/client-insights@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.35.0.tgz#8fd51eead7d89925522d48b5c164b3d7b656707c" + integrity sha512-UNbCXcBpqtzUucxExwTSfAe8gknAJ485NfPN6o1ziHm6nnxx97piIbcBQ3edw823Tej2Wxu1C0xBY06KgeZ7gA== + dependencies: + "@algolia/client-common" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + +"@algolia/client-personalization@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.35.0.tgz#a661767851269b8ff091eaa900fe0b65b3937382" + integrity sha512-/KWjttZ6UCStt4QnWoDAJ12cKlQ+fkpMtyPmBgSS2WThJQdSV/4UWcqCUqGH7YLbwlj3JjNirCu3Y7uRTClxvA== + dependencies: + "@algolia/client-common" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + +"@algolia/client-query-suggestions@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.35.0.tgz#b8704f3cdb2b49b8f0348bb77a3821a5ffa5b73b" + integrity sha512-8oCuJCFf/71IYyvQQC+iu4kgViTODbXDk3m7yMctEncRSRV+u2RtDVlpGGfPlJQOrAY7OONwJlSHkmbbm2Kp/w== + dependencies: + "@algolia/client-common" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + +"@algolia/client-search@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.35.0.tgz#61441c4de212d8a1af93ab1406f46fd3386c35a0" + integrity sha512-FfmdHTrXhIduWyyuko1YTcGLuicVbhUyRjO3HbXE4aP655yKZgdTIfMhZ/V5VY9bHuxv/fGEh3Od1Lvv2ODNTg== + dependencies: + "@algolia/client-common" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + +"@algolia/ingestion@1.35.0": + version "1.35.0" + resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.35.0.tgz#fb263cc190da421756f8f52e3fe5e5afdc89f68c" + integrity sha512-gPzACem9IL1Co8mM1LKMhzn1aSJmp+Vp434An4C0OBY4uEJRcqsLN3uLBlY+bYvFg8C8ImwM9YRiKczJXRk0XA== + dependencies: + "@algolia/client-common" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + +"@algolia/monitoring@1.35.0": + version "1.35.0" + resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.35.0.tgz#6be2b3e2a48328b57d98827da9c85ec2b42d49da" + integrity sha512-w9MGFLB6ashI8BGcQoVt7iLgDIJNCn4OIu0Q0giE3M2ItNrssvb8C0xuwJQyTy1OFZnemG0EB1OvXhIHOvQwWw== + dependencies: + "@algolia/client-common" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + +"@algolia/recommend@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.35.0.tgz#03c3d1dbbd1b5b07dda98350b45640c819081211" + integrity sha512-AhrVgaaXAb8Ue0u2nuRWwugt0dL5UmRgS9LXe0Hhz493a8KFeZVUE56RGIV3hAa6tHzmAV7eIoqcWTQvxzlJeQ== + dependencies: + "@algolia/client-common" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + +"@algolia/requester-browser-xhr@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.35.0.tgz#b1c26fc9be80a0ddde6b2e45fb50d52c7c6c05f4" + integrity sha512-diY415KLJZ6x1Kbwl9u96Jsz0OstE3asjXtJ9pmk1d+5gPuQ5jQyEsgC+WmEXzlec3iuVszm8AzNYYaqw6B+Zw== + dependencies: + "@algolia/client-common" "5.35.0" + +"@algolia/requester-fetch@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.35.0.tgz#29815c5bf501148ea619ed96bae09c099a5cced4" + integrity sha512-uydqnSmpAjrgo8bqhE9N1wgcB98psTRRQXcjc4izwMB7yRl9C8uuAQ/5YqRj04U0mMQ+fdu2fcNF6m9+Z1BzDQ== + dependencies: + "@algolia/client-common" "5.35.0" + +"@algolia/requester-node-http@5.35.0": + version "5.35.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.35.0.tgz#9095b80a0ae77f574036261f44053636e31d1baf" + integrity sha512-RgLX78ojYOrThJHrIiPzT4HW3yfQa0D7K+MQ81rhxqaNyNBu4F1r+72LNHYH/Z+y9I1Mrjrd/c/Ue5zfDgAEjQ== + dependencies: + "@algolia/client-common" "5.35.0" + "@alloc/quick-lru@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== -"@ampproject/remapping@2.3.0", "@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.3.0": +"@ampproject/remapping@2.3.0", "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== @@ -15,181 +141,176 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@angular-devkit/architect@0.2000.5", "@angular-devkit/architect@>= 0.2000.0 < 0.2100.0": - version "0.2000.5" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.2000.5.tgz#c4c3f5e90f97aeea03820dbfa4f729bb4c6bfca6" - integrity sha512-9aPtMdRiOVP14PkbgxAKh3TivxXTBiOr66xYbxutP0cMBwzRX67ekyEpAxmTEiWnd+qmxV9tddWgGL5sWcEZgQ== +"@angular-devkit/architect@0.2003.13", "@angular-devkit/architect@>= 0.2000.0 < 0.2100.0": + version "0.2003.13" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.2003.13.tgz#0f4f527cfe7952c3bc680fe32ab6f3a293ee9872" + integrity sha512-JyH6Af6PNC1IHJToColFk1RaXDU87mpPjz7M5sWDfn8bC+KBipw6dSdRkCEuw0D9HY1lZkC9EBV9k9GhpvHjCQ== dependencies: - "@angular-devkit/core" "20.0.5" + "@angular-devkit/core" "20.3.13" rxjs "7.8.2" -"@angular-devkit/core@20.0.5", "@angular-devkit/core@>= 20.0.0 < 21.0.0": - version "20.0.5" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-20.0.5.tgz#062721c8bc07a6222089d50a811c494d4b78a9d4" - integrity sha512-bFaFP984GxqfC1WYlUEFuwkDO657ynxI51cE3J6yfwP92ykyF/MXzV0S9tRBhx5rcLVgCAiohxmzKdxPhoLWSA== +"@angular-devkit/core@20.3.13", "@angular-devkit/core@>= 20.0.0 < 21.0.0": + version "20.3.13" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-20.3.13.tgz#7a8faec8ceb49a4e9379229983db6b9b704b784f" + integrity sha512-/D84T1Caxll3I2sRihPDR9UaWBhF50M+tAX15PdP6uSh/TxwAlLl9p7Rm1bD0mPjPercqaEKA+h9a9qLP16hug== dependencies: ajv "8.17.1" ajv-formats "3.0.1" jsonc-parser "3.3.1" - picomatch "4.0.2" + picomatch "4.0.3" rxjs "7.8.2" - source-map "0.7.4" + source-map "0.7.6" -"@angular-devkit/schematics@20.0.5", "@angular-devkit/schematics@>= 20.0.0 < 21.0.0": - version "20.0.5" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-20.0.5.tgz#c2a87bd753a928356011aac297a5efeccd5f29ee" - integrity sha512-3bcYIk6x5mgDIC6K9z9HWqOJ450pglawZbKr4auME/Rt39xt0YT4IaTDhQYYuXU+NQ7mjKOSmqmOBwD2qcwsyw== +"@angular-devkit/schematics@20.3.13", "@angular-devkit/schematics@>= 20.0.0 < 21.0.0": + version "20.3.13" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-20.3.13.tgz#1e0f2ba9ce9084d05d5b9feb0800b8c75000ea5f" + integrity sha512-hdMKY4rUTko8xqeWYGnwwDYDomkeOoLsYsP6SdaHWK7hpGvzWsT6Q/aIv8J8NrCYkLu+M+5nLiKOooweUZu3GQ== dependencies: - "@angular-devkit/core" "20.0.5" + "@angular-devkit/core" "20.3.13" jsonc-parser "3.3.1" magic-string "0.30.17" ora "8.2.0" rxjs "7.8.2" -"@angular-eslint/builder@20.1.1": - version "20.1.1" - resolved "https://registry.yarnpkg.com/@angular-eslint/builder/-/builder-20.1.1.tgz#2f0fcf193012dc339d8b1fbb91adabdfda8751d7" - integrity sha512-pfCYfocX79CZ5nokZF4gVScUGyLWRKQHZsUkQ5V/1hsaGsahvzDRjxsYz0J9rO0ligSa2pwgUCXEwSY8hhHQBw== +"@angular-eslint/builder@20.7.0": + version "20.7.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/builder/-/builder-20.7.0.tgz#57df5635e287f3a583d495cabad0b1661d85aa87" + integrity sha512-qgf4Cfs1z0VsVpzF/OnxDRvBp60OIzeCsp4mzlckWYVniKo19EPIN6kFDol5eTAIOMPgiBQlMIwgQMHgocXEig== dependencies: "@angular-devkit/architect" ">= 0.2000.0 < 0.2100.0" "@angular-devkit/core" ">= 20.0.0 < 21.0.0" -"@angular-eslint/bundled-angular-compiler@20.1.1": - version "20.1.1" - resolved "https://registry.yarnpkg.com/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-20.1.1.tgz#aca45911806a21daf4b1c60aecadfd908f458fcb" - integrity sha512-hEWh/upyTj2bhyRmbNnGtlOXhBSEHwLg8/9YYhwmiNApQwKcvcg7lkstZMEVrKievNHZT6Wh4dWZvjRjMqLNSg== +"@angular-eslint/bundled-angular-compiler@20.7.0": + version "20.7.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-20.7.0.tgz#1bf24d6167ed699e0a3bc40ea6d78f22bd8b1e10" + integrity sha512-9KPz24YoiL0SvTtTX6sd1zmysU5cKOCcmpEiXkCoO3L2oYZGlVxmMT4hfSaHMt8qmfvV2KzQMoR6DZM84BwRzQ== -"@angular-eslint/eslint-plugin-template@20.1.1": - version "20.1.1" - resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-20.1.1.tgz#12f5b66b64aff756b3b9ca3cd6b6e55f39c77791" - integrity sha512-dRqfxYvgOC4DZqvRTmxoIUMeIqTzcIkRcMVEuP8qvR10KHAWDkV7xT4f7BAee9deI/lzoAk3tk5wkQg6POQo7Q== +"@angular-eslint/eslint-plugin-template@20.7.0": + version "20.7.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-20.7.0.tgz#3a536cc31bb9b861b3663eee7b83d484517d2b4f" + integrity sha512-WFmvW2vBR6ExsSKEaActQTteyw6ikWyuJau9XmWEPFd+2eusEt/+wO21ybjDn3uc5FTp1IcdhfYy+U5OdDjH5w== dependencies: - "@angular-eslint/bundled-angular-compiler" "20.1.1" - "@angular-eslint/utils" "20.1.1" + "@angular-eslint/bundled-angular-compiler" "20.7.0" + "@angular-eslint/utils" "20.7.0" aria-query "5.3.2" axobject-query "4.1.0" -"@angular-eslint/eslint-plugin@20.1.1": - version "20.1.1" - resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin/-/eslint-plugin-20.1.1.tgz#332e0d3efc0420abecf507fafc33effccc37217a" - integrity sha512-h+D6T35UGIuG0keYPH7dc6OTdfTVJ8GoIhCIpoAmVGhdIdfXIISvDvvX/QPiZtTcefik3vEZEGRiI/Nzc5xImw== +"@angular-eslint/eslint-plugin@20.7.0": + version "20.7.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin/-/eslint-plugin-20.7.0.tgz#c28ad8b66513ebcef48db7b9cf6f994d665f62b4" + integrity sha512-aHH2YTiaonojsKN+y2z4IMugCwdsH/dYIjYBig6kfoSPyf9rGK4zx+gnNGq/pGRjF3bOYrmFgIviYpQVb80inQ== dependencies: - "@angular-eslint/bundled-angular-compiler" "20.1.1" - "@angular-eslint/utils" "20.1.1" + "@angular-eslint/bundled-angular-compiler" "20.7.0" + "@angular-eslint/utils" "20.7.0" ts-api-utils "^2.1.0" -"@angular-eslint/schematics@20.1.1": - version "20.1.1" - resolved "https://registry.yarnpkg.com/@angular-eslint/schematics/-/schematics-20.1.1.tgz#2643b4e6ce7f30d4dc8f06b652b91be5f6308d71" - integrity sha512-4sXU0Gr/RhdW3xSBFRzjhTO9mk6ugXUhUIPc1FRta1pmNnbmkvx22ewnKZE8IeRl8PMyk6xJuxZHq19CW1oWOA== +"@angular-eslint/schematics@20.7.0": + version "20.7.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/schematics/-/schematics-20.7.0.tgz#610505927b0c088fcc08d7c1641fe2b90e00799c" + integrity sha512-S0onfRipDUIL6gFGTFjiWwUDhi42XYrBoi3kJ3wBbKBeIgYv9SP1ppTKDD4ZoDaDU9cQE8nToX7iPn9ifMw6eQ== dependencies: "@angular-devkit/core" ">= 20.0.0 < 21.0.0" "@angular-devkit/schematics" ">= 20.0.0 < 21.0.0" - "@angular-eslint/eslint-plugin" "20.1.1" - "@angular-eslint/eslint-plugin-template" "20.1.1" + "@angular-eslint/eslint-plugin" "20.7.0" + "@angular-eslint/eslint-plugin-template" "20.7.0" ignore "7.0.5" - semver "7.7.2" + semver "7.7.3" strip-json-comments "3.1.1" -"@angular-eslint/template-parser@20.1.1": - version "20.1.1" - resolved "https://registry.yarnpkg.com/@angular-eslint/template-parser/-/template-parser-20.1.1.tgz#9c3db7050e3e4bf48f87ffc775a30785fe7d8684" - integrity sha512-giIMYORf8P8MbBxh6EUfiR/7Y+omxJtK2C7a8lYTtLSOIGO0D8c8hXx9hTlPcdupVX+xZXDuZ85c9JDen+JSSA== +"@angular-eslint/template-parser@20.7.0": + version "20.7.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/template-parser/-/template-parser-20.7.0.tgz#dfda748270d3d40f2f71fff8d3f81b68cf91a55e" + integrity sha512-CVskZnF38IIxVVlKWi1VCz7YH/gHMJu2IY9bD1AVoBBGIe0xA4FRXJkW2Y+EDs9vQqZTkZZljhK5gL65Ro1PeQ== dependencies: - "@angular-eslint/bundled-angular-compiler" "20.1.1" - eslint-scope "^8.0.2" + "@angular-eslint/bundled-angular-compiler" "20.7.0" + eslint-scope "^9.0.0" -"@angular-eslint/utils@20.1.1": - version "20.1.1" - resolved "https://registry.yarnpkg.com/@angular-eslint/utils/-/utils-20.1.1.tgz#7f64edcc2aa0d1294c8e72d268960a30f253552d" - integrity sha512-hqbzGqa/0Ua90r4TMn4oZVnLuwIF6dqEfH7SlstB224h/7+nKoi67aHkmUq7VItWXpDDe+f1opeR01GKS9fNog== +"@angular-eslint/utils@20.7.0": + version "20.7.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/utils/-/utils-20.7.0.tgz#e0541034e2529c78ab9628a8bdc3f96d418f15a7" + integrity sha512-B6EJHbsk2W/lnS3kS/gm56VGvX735419z/DzgbRDcOvqMGMLwD1ILzv5OTEcL1rzpnB0AHW+IxOu6y/aCzSNUA== dependencies: - "@angular-eslint/bundled-angular-compiler" "20.1.1" - -"@angular/animations@^20.0.6": - version "20.0.6" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-20.0.6.tgz#cf9f2c93e61921b88deb9f8519d34af07f1e247a" - integrity sha512-OS37BTq9mhD6EuO7Pogl8e0eKGGuedWbcEDO23SdgCf0PL3rLgcubHWilOusfoLmGX+hTYHDq2AQhVgik9Z1Hg== - dependencies: - tslib "^2.3.0" + "@angular-eslint/bundled-angular-compiler" "20.7.0" "@angular/build@^20.0.5": - version "20.0.5" - resolved "https://registry.yarnpkg.com/@angular/build/-/build-20.0.5.tgz#d12800aec06d50d7236a01e3ca2ade90c46975cb" - integrity sha512-HQnKEuBhKURoaXkvTsgNbW8LyxVGYPMR/9e+KpJZv06NgJHXZumLtbkg1f1IF1d4d60SY1g+ienjFOu+Yj1FfQ== + version "20.3.13" + resolved "https://registry.yarnpkg.com/@angular/build/-/build-20.3.13.tgz#e64703cd3004165f5ef5ce526a0c41ec865d6688" + integrity sha512-/5pM3ZS+lLkZgA+n6TMmNV8I6t9Ow1C6Vkj6bXqWeOgFDH5LwnIEZFAKzEDBkCGos0m2gPKPcREcDD5tfp9h4g== dependencies: "@ampproject/remapping" "2.3.0" - "@angular-devkit/architect" "0.2000.5" - "@babel/core" "7.27.1" - "@babel/helper-annotate-as-pure" "7.27.1" + "@angular-devkit/architect" "0.2003.13" + "@babel/core" "7.28.3" + "@babel/helper-annotate-as-pure" "7.27.3" "@babel/helper-split-export-declaration" "7.24.7" - "@inquirer/confirm" "5.1.10" - "@vitejs/plugin-basic-ssl" "2.0.0" - beasties "0.3.4" + "@inquirer/confirm" "5.1.14" + "@vitejs/plugin-basic-ssl" "2.1.0" + beasties "0.3.5" browserslist "^4.23.0" - esbuild "0.25.5" + esbuild "0.25.9" https-proxy-agent "7.0.6" istanbul-lib-instrument "6.0.3" jsonc-parser "3.3.1" - listr2 "8.3.3" + listr2 "9.0.1" magic-string "0.30.17" mrmime "2.0.1" - parse5-html-rewriting-stream "7.1.0" - picomatch "4.0.2" - piscina "5.1.1" - rollup "4.40.2" - sass "1.88.0" + parse5-html-rewriting-stream "8.0.0" + picomatch "4.0.3" + piscina "5.1.3" + rollup "4.52.3" + sass "1.90.0" semver "7.7.2" source-map-support "0.5.21" - tinyglobby "0.2.13" - vite "6.3.5" - watchpack "2.4.2" + tinyglobby "0.2.14" + vite "7.1.11" + watchpack "2.4.4" optionalDependencies: - lmdb "3.3.0" + lmdb "3.4.2" "@angular/cdk@^20.0.4": - version "20.0.4" - resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-20.0.4.tgz#48d0746b4f357b8e5f10dffcc2c3f806341e2cd1" - integrity sha512-NCUuw0qQXwawLsT14JHApNB9or3XGs7D1pWXlOIix/fKqzHVfi4un9xHmpjH2Q1uCiwonuak7fDof8B+IXhbug== + version "20.2.14" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-20.2.14.tgz#5da8d29a0688cf0c6f58db77aee8afa0a05faaea" + integrity sha512-7bZxc01URbiPiIBWThQ69XwOxVduqEKN4PhpbF2AAyfMc/W8Hcr4VoIJOwL0O1Nkq5beS8pCAqoOeIgFyXd/kg== dependencies: - parse5 "^7.1.2" + parse5 "^8.0.0" tslib "^2.3.0" "@angular/cli@^20.0.5": - version "20.0.5" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-20.0.5.tgz#9fecf1b92aede336550800e6aa6c873d2f9eaac8" - integrity sha512-NbpVdgtMz0tQpDGULw+X6d1w7TWFSYfKY2UI6V4YoBuvg81k/O9splzsbG707UwaeK0hhjca0B2dDa+ASFuDVg== + version "20.3.13" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-20.3.13.tgz#97755372ca667d3e836cf56936688873bc83fb69" + integrity sha512-G78I/HDJULloS2LSqfUfbmBlhDCbcWujIRWfuMnGsRf82TyGA2OEPe3IA/F8MrJfeOzPQim2fMyn24MqHL40Vg== dependencies: - "@angular-devkit/architect" "0.2000.5" - "@angular-devkit/core" "20.0.5" - "@angular-devkit/schematics" "20.0.5" - "@inquirer/prompts" "7.5.1" - "@listr2/prompt-adapter-inquirer" "2.0.22" - "@schematics/angular" "20.0.5" + "@angular-devkit/architect" "0.2003.13" + "@angular-devkit/core" "20.3.13" + "@angular-devkit/schematics" "20.3.13" + "@inquirer/prompts" "7.8.2" + "@listr2/prompt-adapter-inquirer" "3.0.1" + "@modelcontextprotocol/sdk" "1.24.0" + "@schematics/angular" "20.3.13" "@yarnpkg/lockfile" "1.1.0" + algoliasearch "5.35.0" ini "5.0.0" jsonc-parser "3.3.1" - listr2 "8.3.3" - npm-package-arg "12.0.2" - npm-pick-manifest "10.0.0" + listr2 "9.0.1" + npm-package-arg "13.0.0" pacote "21.0.0" resolve "1.22.10" semver "7.7.2" - yargs "17.7.2" + yargs "18.0.0" + zod "4.1.13" "@angular/common@^20.0.6": - version "20.0.6" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-20.0.6.tgz#b123bf7ad10932c0dd265df7f090fbdf0a8cef62" - integrity sha512-NRsq2gI4CH8nEy8yEZFySEmZ4U+1Y1yGzdIFubrKmtE2NXxR4KFGvQCkBLCLh6hNQXQx+Soe126bqByA6oIaFw== + version "20.3.15" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-20.3.15.tgz#a261e9bb14124db6e791a59ca17f0dea2f938b1c" + integrity sha512-k4mCXWRFiOHK3bUKfWkRQQ8KBPxW8TAJuKLYCsSHPCpMz6u0eA1F0VlrnOkZVKWPI792fOaEAWH2Y4PTaXlUHw== dependencies: tslib "^2.3.0" "@angular/compiler-cli@^20.0.6": - version "20.0.6" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-20.0.6.tgz#a37f20780e7bd0a51977f3cd9845278afa0bd0da" - integrity sha512-A1H/Haq3O7SlMuH14Clj6Z6YhA9FtYQXpKnW1FrFbWOaTp1MpYFIVunL4duDOyRhrr3M9+AtEabbJu3fS7/XyA== + version "20.3.15" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-20.3.15.tgz#71c30ac343ee708efabb99d08305c4b3e8e6899a" + integrity sha512-8sJoxodxsfyZ8eJ5r6Bx7BCbazXYgsZ1+dE8t5u5rTQ6jNggwNtYEzkyReoD5xvP+MMtRkos3xpwq4rtFnpI6A== dependencies: - "@babel/core" "7.27.7" + "@babel/core" "7.28.3" "@jridgewell/sourcemap-codec" "^1.4.14" chokidar "^4.0.0" convert-source-map "^1.5.1" @@ -199,63 +320,63 @@ yargs "^18.0.0" "@angular/compiler@^20.0.6": - version "20.0.6" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-20.0.6.tgz#33e4fdb0225f3dcefba4f404b6b8501e26ea67e9" - integrity sha512-pgkOUnufEtzuEnjrL4BqFJCCayp1Si8cT5ZBq8CsYoQUETiYFMT2kf1OEV09vPNH4owxuzE42Wa4fEyWMRWdbA== + version "20.3.15" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-20.3.15.tgz#4220734ef6a59b28a23bb5dde376d5f341dfc227" + integrity sha512-lMicIAFAKZXa+BCZWs3soTjNQPZZXrF/WMVDinm8dQcggNarnDj4UmXgKSyXkkyqK5SLfnLsXVzrX6ndVT6z7A== dependencies: tslib "^2.3.0" "@angular/core@^20.0.6": - version "20.0.6" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-20.0.6.tgz#c4ef738760e84d992f40b9e1bf65e1d16bf2bea9" - integrity sha512-PLSRl8vM8I+HOlAJFiTcRMNbRj2Clb7lpQqUfkeBSk8bBWOy9fLlscoY3JOk0tXoUTnW6lbRB1LmAFuYAQZzAA== + version "20.3.15" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-20.3.15.tgz#a3984ccbb21f85df9ff7482f1c90dbdf62f5de67" + integrity sha512-NMbX71SlTZIY9+rh/SPhRYFJU0pMJYW7z/TBD4lqiO+b0DTOIg1k7Pg9ydJGqSjFO1Z4dQaA6TteNuF99TJCNw== dependencies: tslib "^2.3.0" "@angular/forms@^20.0.6": - version "20.0.6" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-20.0.6.tgz#74b70175d7730cebd8660ce470b6b42f72973f0b" - integrity sha512-/SZB2g0Nd4zRHTXEnhG9Xnr0BcSPIbKwpanvkiOyyQlh8ab/DxGVoX/y8ovVw7lhxIXS0+cvloKpIbGCVmQHdw== + version "20.3.15" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-20.3.15.tgz#64e8deb982c0ac5ea2036d1c0ab556777db0382e" + integrity sha512-gS5hQkinq52pm/7mxz4yHPCzEcmRWjtUkOVddPH0V1BW/HMni/p4Y6k2KqKBeGb9p8S5EAp6PDxDVLOPukp3mg== dependencies: tslib "^2.3.0" "@angular/language-service@^20.0.6": - version "20.0.6" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-20.0.6.tgz#100ca9dd85d44d64be8383dd9d0c3fbfd32331f4" - integrity sha512-aVd3oIwIEYiIPiJOLBpjoBl+Sd+IdIKIam8uYAtoeq3CH+n9UPl1U0Zspl47yUZgbeYU63SAOKF9rthqGPzKCQ== + version "20.3.15" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-20.3.15.tgz#d66d71076f342a96e5e73dd8eec0c57a7e4c33bc" + integrity sha512-oD5rvAsZYzNqdJqMTYYp6T9yITG6axTI/j64v3qxHe+Y/PlHKfNHXcjENpA+LcR5wq0wtIE+s96APykCq9ouEQ== "@angular/material-moment-adapter@^20.0.4": - version "20.0.4" - resolved "https://registry.yarnpkg.com/@angular/material-moment-adapter/-/material-moment-adapter-20.0.4.tgz#e51e991d7cb395c87e32ed8365b8b4ce866cebd7" - integrity sha512-TbtUKrBXE2cCtJmArhtRyW5RsnXk2vKTm2idhZllNEx+mcZY/bgdaTkoanNXCqvH8asEgIexuy5BsgWK2s77qw== + version "20.2.14" + resolved "https://registry.yarnpkg.com/@angular/material-moment-adapter/-/material-moment-adapter-20.2.14.tgz#b5888dd0ad02de2dbd9fb4a5a92efd2be32c1952" + integrity sha512-K9LHW3MhesJjKbVZ5O58ZBT4pLwLIf+Yyjbf1slkBll++4W1saZuPbMHnVH+DyQ52iZ0Q2TIq17MM0KG9f/WFg== dependencies: tslib "^2.3.0" "@angular/material@^20.0.4": - version "20.0.4" - resolved "https://registry.yarnpkg.com/@angular/material/-/material-20.0.4.tgz#7ed2b21c6d3141883ab1cb8a3ebadd364460a38e" - integrity sha512-ET+znnyOVjBezHsjy7U42/88JPl9Mhumvf01gMBN8mNcaoSpeM4cc2uKBg30/3YzykKIsjXtvUJj/PaTujmJAQ== + version "20.2.14" + resolved "https://registry.yarnpkg.com/@angular/material/-/material-20.2.14.tgz#93027a9eb052d639e8e4f1bd7a3d65e072dc2702" + integrity sha512-IbAgV6XLsvmHiJzxycVhcNC1PA4M30qi+ERCOir6cT333Bxm8vDV32gsOjfL52uzG5YRARroPC+8s1XqR2oxeA== dependencies: tslib "^2.3.0" "@angular/platform-browser-dynamic@^20.0.6": - version "20.0.6" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.0.6.tgz#921fbb31237c5760210beaf0ec938fa1453d0115" - integrity sha512-Bolskz1hGGxgmKMR0YRSJvrnrvvSr7WfgikwglkWsSYXRi8kG2vjl2PC/F+OFCjhstw+XlE4qqkoE32LjV1s8A== + version "20.3.15" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.3.15.tgz#8b406429afb1e2e48396c243529341cda9dc6e7f" + integrity sha512-RizuRdBt0d6ongQ2y8cr8YsXFyjF8f91vFfpSNw+cFj+oiEmRC1txcWUlH5bPLD9qSDied8qazUi0Tb8VPQDGw== dependencies: tslib "^2.3.0" "@angular/platform-browser@^20.0.6": - version "20.0.6" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-20.0.6.tgz#c0521eee743cbafda76ae19c423b85612dc926ae" - integrity sha512-EZC6ILD0nXOddNuwqQqwTzvRgXs/1kZoRGzdG8zpHhRREBf6VFMZ+g7IN3EKnYN4hDL5EMxIKIsIcQjmCDsu2A== + version "20.3.15" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-20.3.15.tgz#90c9108069207865fb3fdfafe0b30b7cabe9f699" + integrity sha512-TxRM/wTW/oGXv/3/Iohn58yWoiYXOaeEnxSasiGNS1qhbkcKtR70xzxW6NjChBUYAixz2ERkLURkpx3pI8Q6Dw== dependencies: tslib "^2.3.0" "@angular/router@^20.0.6": - version "20.0.6" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-20.0.6.tgz#dc8ea1a06278caf56b501f6d6092b9292635821b" - integrity sha512-qmG08dm/uUUe70tjcy0hTLFa7hc8hIDpXovKl2olB+ziGqTuGUTJBC0A6tPc344m9EHknCHHmaC+03U+i1BtLw== + version "20.3.15" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-20.3.15.tgz#76db627a97a170cb6a4bfe514242bc5ad1daeddc" + integrity sha512-6+qgk8swGSoAu7ISSY//GatAyCP36hEvvUgvjbZgkXLLH9yUQxdo77ij05aJ5s0OyB25q/JkqS8VTY0z1yE9NQ== dependencies: tslib "^2.3.0" @@ -269,71 +390,71 @@ picocolors "^1.1.1" "@babel/compat-data@^7.27.2": - version "7.27.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.7.tgz#7fd698e531050cce432b073ab64857b99e0f3804" - integrity sha512-xgu/ySj2mTiUFmdE9yCMfBxLp4DHd5DwmbbD05YAuICfodYT3VvRxbrh81LGQ/8UpSdtMdfKMn3KouYDX59DGQ== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== -"@babel/core@7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6" - integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ== +"@babel/core@7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.3.tgz#aceddde69c5d1def69b839d09efa3e3ff59c97cb" + integrity sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.1" - "@babel/helper-compilation-targets" "^7.27.1" - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helpers" "^7.27.1" - "@babel/parser" "^7.27.1" - "@babel/template" "^7.27.1" - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@7.27.7", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.27.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.7.tgz#0ddeab1e7b17317dad8c3c3a887716f66b5c4428" - integrity sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.5" + "@babel/generator" "^7.28.3" "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-module-transforms" "^7.27.3" - "@babel/helpers" "^7.27.6" - "@babel/parser" "^7.27.7" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.3" + "@babel/parser" "^7.28.3" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.27.7" - "@babel/types" "^7.27.7" + "@babel/traverse" "^7.28.3" + "@babel/types" "^7.28.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.27.1", "@babel/generator@^7.27.5": - version "7.27.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.5.tgz#3eb01866b345ba261b04911020cbe22dd4be8c8c" - integrity sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw== +"@babel/core@^7.12.3", "@babel/core@^7.23.9": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== dependencies: - "@babel/parser" "^7.27.5" - "@babel/types" "^7.27.3" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.28.3", "@babel/generator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== + dependencies: + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" -"@babel/helper-annotate-as-pure@7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz#4345d81a9a46a6486e24d069469f13e60445c05d" - integrity sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow== +"@babel/helper-annotate-as-pure@7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== dependencies: - "@babel/types" "^7.27.1" + "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": +"@babel/helper-compilation-targets@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== @@ -344,6 +465,11 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + "@babel/helper-module-imports@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" @@ -352,14 +478,14 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.27.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02" - integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg== +"@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== dependencies: "@babel/helper-module-imports" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.3" + "@babel/traverse" "^7.28.3" "@babel/helper-split-export-declaration@7.24.7": version "7.24.7" @@ -373,37 +499,37 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== "@babel/helper-validator-option@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/helpers@^7.27.1", "@babel/helpers@^7.27.6": - version "7.27.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.6.tgz#6456fed15b2cb669d2d1fabe84b66b34991d812c" - integrity sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug== +"@babel/helpers@^7.28.3", "@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== dependencies: "@babel/template" "^7.27.2" - "@babel/types" "^7.27.6" + "@babel/types" "^7.28.4" -"@babel/parser@^7.14.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.1", "@babel/parser@^7.27.2", "@babel/parser@^7.27.5", "@babel/parser@^7.27.7": - version "7.27.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.7.tgz#1687f5294b45039c159730e3b9c1f1b242e425e9" - integrity sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q== +"@babel/parser@^7.14.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== dependencies: - "@babel/types" "^7.27.7" + "@babel/types" "^7.28.5" "@babel/runtime@^7.26.10": - version "7.27.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.6.tgz#ec4070a04d76bae8ddbb10770ba55714a417b7c6" - integrity sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q== + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" + integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== -"@babel/template@^7.27.1", "@babel/template@^7.27.2": +"@babel/template@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== @@ -412,223 +538,353 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.27.7": - version "7.27.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.7.tgz#8355c39be6818362eace058cf7f3e25ac2ec3b55" - integrity sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw== +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.5" - "@babel/parser" "^7.27.7" + "@babel/generator" "^7.28.5" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/types" "^7.27.7" + "@babel/types" "^7.28.5" debug "^4.3.1" - globals "^11.1.0" -"@babel/types@^7.24.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.27.6", "@babel/types@^7.27.7": - version "7.27.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.7.tgz#40eabd562049b2ee1a205fa589e629f945dce20f" - integrity sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw== +"@babel/types@^7.24.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== dependencies: "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@emnapi/core@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" - integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== +"@emnapi/core@^1.7.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.8.1.tgz#fd9efe721a616288345ffee17a1f26ac5dd01349" + integrity sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg== dependencies: - "@emnapi/wasi-threads" "1.0.2" + "@emnapi/wasi-threads" "1.1.0" tslib "^2.4.0" -"@emnapi/runtime@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" - integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== +"@emnapi/runtime@^1.7.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.8.1.tgz#550fa7e3c0d49c5fb175a116e8cd70614f9a22a5" + integrity sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg== dependencies: tslib "^2.4.0" -"@emnapi/wasi-threads@1.0.2", "@emnapi/wasi-threads@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" - integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== +"@emnapi/wasi-threads@1.1.0", "@emnapi/wasi-threads@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf" + integrity sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ== dependencies: tslib "^2.4.0" -"@esbuild/aix-ppc64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz#4e0f91776c2b340e75558f60552195f6fad09f18" - integrity sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA== +"@esbuild/aix-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz#80fcbe36130e58b7670511e888b8e88a259ed76c" + integrity sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA== -"@esbuild/android-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz#bc766407f1718923f6b8079c8c61bf86ac3a6a4f" - integrity sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg== +"@esbuild/aix-ppc64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz#bef96351f16520055c947aba28802eede3c9e9a9" + integrity sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA== -"@esbuild/android-arm@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz#4290d6d3407bae3883ad2cded1081a234473ce26" - integrity sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA== +"@esbuild/android-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz#8aa4965f8d0a7982dc21734bf6601323a66da752" + integrity sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg== -"@esbuild/android-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz#40c11d9cbca4f2406548c8a9895d321bc3b35eff" - integrity sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw== +"@esbuild/android-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz#d2e70be7d51a529425422091e0dcb90374c1546c" + integrity sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg== -"@esbuild/darwin-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz#49d8bf8b1df95f759ac81eb1d0736018006d7e34" - integrity sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ== +"@esbuild/android-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz#300712101f7f50f1d2627a162e6e09b109b6767a" + integrity sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg== -"@esbuild/darwin-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz#e27a5d92a14886ef1d492fd50fc61a2d4d87e418" - integrity sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ== +"@esbuild/android-arm@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.9.tgz#d2a753fe2a4c73b79437d0ba1480e2d760097419" + integrity sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ== -"@esbuild/freebsd-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz#97cede59d638840ca104e605cdb9f1b118ba0b1c" - integrity sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw== +"@esbuild/android-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz#87dfb27161202bdc958ef48bb61b09c758faee16" + integrity sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg== -"@esbuild/freebsd-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz#71c77812042a1a8190c3d581e140d15b876b9c6f" - integrity sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw== +"@esbuild/android-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.9.tgz#5278836e3c7ae75761626962f902a0d55352e683" + integrity sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw== -"@esbuild/linux-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz#f7b7c8f97eff8ffd2e47f6c67eb5c9765f2181b8" - integrity sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg== +"@esbuild/darwin-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz#79197898ec1ff745d21c071e1c7cc3c802f0c1fd" + integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg== -"@esbuild/linux-arm@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz#2a0be71b6cd8201fa559aea45598dffabc05d911" - integrity sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw== +"@esbuild/darwin-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz#f1513eaf9ec8fa15dcaf4c341b0f005d3e8b47ae" + integrity sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg== -"@esbuild/linux-ia32@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz#763414463cd9ea6fa1f96555d2762f9f84c61783" - integrity sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA== +"@esbuild/darwin-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz#146400a8562133f45c4d2eadcf37ddd09718079e" + integrity sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA== -"@esbuild/linux-loong64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz#428cf2213ff786a502a52c96cf29d1fcf1eb8506" - integrity sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg== +"@esbuild/darwin-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz#e27dbc3b507b3a1cea3b9280a04b8b6b725f82be" + integrity sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ== -"@esbuild/linux-mips64el@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz#5cbcc7fd841b4cd53358afd33527cd394e325d96" - integrity sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg== +"@esbuild/freebsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz#1c5f9ba7206e158fd2b24c59fa2d2c8bb47ca0fe" + integrity sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg== -"@esbuild/linux-ppc64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz#0d954ab39ce4f5e50f00c4f8c4fd38f976c13ad9" - integrity sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ== +"@esbuild/freebsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz#364e3e5b7a1fd45d92be08c6cc5d890ca75908ca" + integrity sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q== -"@esbuild/linux-riscv64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz#0e7dd30730505abd8088321e8497e94b547bfb1e" - integrity sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA== +"@esbuild/freebsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz#ea631f4a36beaac4b9279fa0fcc6ca29eaeeb2b3" + integrity sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ== -"@esbuild/linux-s390x@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz#5669af81327a398a336d7e40e320b5bbd6e6e72d" - integrity sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ== +"@esbuild/freebsd-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz#7c869b45faeb3df668e19ace07335a0711ec56ab" + integrity sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg== -"@esbuild/linux-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz#b2357dd153aa49038967ddc1ffd90c68a9d2a0d4" - integrity sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw== +"@esbuild/linux-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz#e1066bce58394f1b1141deec8557a5f0a22f5977" + integrity sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ== -"@esbuild/netbsd-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz#53b4dfb8fe1cee93777c9e366893bd3daa6ba63d" - integrity sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw== +"@esbuild/linux-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz#48d42861758c940b61abea43ba9a29b186d6cb8b" + integrity sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw== -"@esbuild/netbsd-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz#a0206f6314ce7dc8713b7732703d0f58de1d1e79" - integrity sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ== +"@esbuild/linux-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz#452cd66b20932d08bdc53a8b61c0e30baf4348b9" + integrity sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw== -"@esbuild/openbsd-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz#2a796c87c44e8de78001d808c77d948a21ec22fd" - integrity sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw== +"@esbuild/linux-arm@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz#6ce4b9cabf148274101701d112b89dc67cc52f37" + integrity sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw== -"@esbuild/openbsd-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz#28d0cd8909b7fa3953af998f2b2ed34f576728f0" - integrity sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg== +"@esbuild/linux-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz#b24f8acc45bcf54192c7f2f3be1b53e6551eafe0" + integrity sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA== -"@esbuild/sunos-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz#a28164f5b997e8247d407e36c90d3fd5ddbe0dc5" - integrity sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA== +"@esbuild/linux-ia32@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz#207e54899b79cac9c26c323fc1caa32e3143f1c4" + integrity sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A== -"@esbuild/win32-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz#6eadbead38e8bd12f633a5190e45eff80e24007e" - integrity sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw== +"@esbuild/linux-loong64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz#f9cfffa7fc8322571fbc4c8b3268caf15bd81ad0" + integrity sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng== -"@esbuild/win32-ia32@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz#bab6288005482f9ed2adb9ded7e88eba9a62cc0d" - integrity sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ== +"@esbuild/linux-loong64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz#0ba48a127159a8f6abb5827f21198b999ffd1fc0" + integrity sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ== -"@esbuild/win32-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz#7fc114af5f6563f19f73324b5d5ff36ece0803d1" - integrity sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g== +"@esbuild/linux-mips64el@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz#575a14bd74644ffab891adc7d7e60d275296f2cd" + integrity sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" - integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== +"@esbuild/linux-mips64el@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz#a4d4cc693d185f66a6afde94f772b38ce5d64eb5" + integrity sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA== + +"@esbuild/linux-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz#75b99c70a95fbd5f7739d7692befe60601591869" + integrity sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA== + +"@esbuild/linux-ppc64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz#0f5805c1c6d6435a1dafdc043cb07a19050357db" + integrity sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w== + +"@esbuild/linux-riscv64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz#2e3259440321a44e79ddf7535c325057da875cd6" + integrity sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w== + +"@esbuild/linux-riscv64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz#6776edece0f8fca79f3386398b5183ff2a827547" + integrity sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg== + +"@esbuild/linux-s390x@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz#17676cabbfe5928da5b2a0d6df5d58cd08db2663" + integrity sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg== + +"@esbuild/linux-s390x@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz#3f6f29ef036938447c2218d309dc875225861830" + integrity sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA== + +"@esbuild/linux-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz#0583775685ca82066d04c3507f09524d3cd7a306" + integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw== + +"@esbuild/linux-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz#831fe0b0e1a80a8b8391224ea2377d5520e1527f" + integrity sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg== + +"@esbuild/netbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz#f04c4049cb2e252fe96b16fed90f70746b13f4a4" + integrity sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg== + +"@esbuild/netbsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz#06f99d7eebe035fbbe43de01c9d7e98d2a0aa548" + integrity sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q== + +"@esbuild/netbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz#77da0d0a0d826d7c921eea3d40292548b258a076" + integrity sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ== + +"@esbuild/netbsd-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz#db99858e6bed6e73911f92a88e4edd3a8c429a52" + integrity sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g== + +"@esbuild/openbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz#6296f5867aedef28a81b22ab2009c786a952dccd" + integrity sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A== + +"@esbuild/openbsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz#afb886c867e36f9d86bb21e878e1185f5d5a0935" + integrity sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ== + +"@esbuild/openbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz#f8d23303360e27b16cf065b23bbff43c14142679" + integrity sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw== + +"@esbuild/openbsd-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz#30855c9f8381fac6a0ef5b5f31ac6e7108a66ecf" + integrity sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA== + +"@esbuild/openharmony-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz#49e0b768744a3924be0d7fd97dd6ce9b2923d88d" + integrity sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg== + +"@esbuild/openharmony-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz#2f2144af31e67adc2a8e3705c20c2bd97bd88314" + integrity sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg== + +"@esbuild/sunos-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz#a6ed7d6778d67e528c81fb165b23f4911b9b13d6" + integrity sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w== + +"@esbuild/sunos-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz#69b99a9b5bd226c9eb9c6a73f990fddd497d732e" + integrity sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw== + +"@esbuild/win32-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz#9ac14c378e1b653af17d08e7d3ce34caef587323" + integrity sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg== + +"@esbuild/win32-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz#d789330a712af916c88325f4ffe465f885719c6b" + integrity sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ== + +"@esbuild/win32-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz#918942dcbbb35cc14fca39afb91b5e6a3d127267" + integrity sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ== + +"@esbuild/win32-ia32@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz#52fc735406bd49688253e74e4e837ac2ba0789e3" + integrity sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww== + +"@esbuild/win32-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz#9bdad8176be7811ad148d1f8772359041f46c6c5" + integrity sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA== + +"@esbuild/win32-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz#585624dc829cfb6e7c0aa6c3ca7d7e6daa87e34f" + integrity sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ== + +"@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.8.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== dependencies: eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/config-array@^0.21.0": - version "0.21.0" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636" - integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== dependencies: - "@eslint/object-schema" "^2.1.6" + "@eslint/object-schema" "^2.1.7" debug "^4.3.1" minimatch "^3.1.2" -"@eslint/config-helpers@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.0.tgz#3e09a90dfb87e0005c7694791e58e97077271286" - integrity sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw== - -"@eslint/core@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.14.0.tgz#326289380968eaf7e96f364e1e4cf8f3adf2d003" - integrity sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg== +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== dependencies: - "@types/json-schema" "^7.0.15" + "@eslint/core" "^0.17.0" -"@eslint/core@^0.15.1": - version "0.15.1" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.1.tgz#d530d44209cbfe2f82ef86d6ba08760196dd3b60" - integrity sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA== +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== dependencies: "@types/json-schema" "^7.0.15" "@eslint/eslintrc@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" - integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac" + integrity sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -636,26 +892,26 @@ globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^4.1.0" + js-yaml "^4.1.1" minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.30.1": - version "9.30.1" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.30.1.tgz#ebe9dd52a38345784c486300175a28c6013c088d" - integrity sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg== +"@eslint/js@9.39.2": + version "9.39.2" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.2.tgz#2d4b8ec4c3ea13c1b3748e0c97ecd766bdd80599" + integrity sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA== -"@eslint/object-schema@^2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" - integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== -"@eslint/plugin-kit@^0.3.1": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz#32926b59bd407d58d817941e48b2a7049359b1fd" - integrity sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag== +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== dependencies: - "@eslint/core" "^0.15.1" + "@eslint/core" "^0.17.0" levn "^0.4.1" "@humanfs/core@^0.19.1": @@ -664,24 +920,19 @@ integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== "@humanfs/node@^0.16.6": - version "0.16.6" - resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" - integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + version "0.16.7" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== dependencies: "@humanfs/core" "^0.19.1" - "@humanwhocodes/retry" "^0.3.0" + "@humanwhocodes/retry" "^0.4.0" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/retry@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" - integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== - -"@humanwhocodes/retry@^0.4.2": +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": version "0.4.3" resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== @@ -691,152 +942,170 @@ resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== -"@inquirer/checkbox@^4.1.6": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.1.9.tgz#431c65a3a1fd289be8102034ece15c91dda1ceec" - integrity sha512-DBJBkzI5Wx4jFaYm221LHvAhpKYkhVS0k9plqHwaHhofGNxvYB7J3Bz8w+bFJ05zaMb0sZNHo4KdmENQFlNTuQ== - dependencies: - "@inquirer/core" "^10.1.14" - "@inquirer/figures" "^1.0.12" - "@inquirer/type" "^3.0.7" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" +"@inquirer/ansi@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.2.tgz#674a4c4d81ad460695cb2a1fc69d78cd187f337e" + integrity sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ== -"@inquirer/confirm@5.1.10": - version "5.1.10" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.10.tgz#de3732cb7ae9333bd3e354afee6a6ef8cf28d951" - integrity sha512-FxbQ9giWxUWKUk2O5XZ6PduVnH2CZ/fmMKMBkH71MHJvWr7WL5AHKevhzF1L5uYWB2P548o1RzVxrNd3dpmk6g== +"@inquirer/checkbox@^4.2.1": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.3.2.tgz#e1483e6519d6ffef97281a54d2a5baa0d81b3f3b" + integrity sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA== dependencies: - "@inquirer/core" "^10.1.11" - "@inquirer/type" "^3.0.6" + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/confirm@^5.1.10": - version "5.1.13" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.13.tgz#4931515edc63e25d833c9a40ccf1855e8e822dbc" - integrity sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw== +"@inquirer/confirm@5.1.14": + version "5.1.14" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.14.tgz#e6321edf51a3a5f54dc548b80ef6ba89891351ad" + integrity sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q== dependencies: - "@inquirer/core" "^10.1.14" - "@inquirer/type" "^3.0.7" + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" -"@inquirer/core@^10.1.11", "@inquirer/core@^10.1.14": - version "10.1.14" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.14.tgz#7678b2daaecf32fa2f6e02a03dc235f9620e197f" - integrity sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A== +"@inquirer/confirm@^5.1.14": + version "5.1.21" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.21.tgz#610c4acd7797d94890a6e2dde2c98eb1e891dd12" + integrity sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ== dependencies: - "@inquirer/figures" "^1.0.12" - "@inquirer/type" "^3.0.7" - ansi-escapes "^4.3.2" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/core@^10.1.15", "@inquirer/core@^10.3.2": + version "10.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.2.tgz#535979ff3ff4fe1e7cc4f83e2320504c743b7e20" + integrity sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" cli-width "^4.1.0" mute-stream "^2.0.0" signal-exit "^4.1.0" wrap-ansi "^6.2.0" - yoctocolors-cjs "^2.1.2" + yoctocolors-cjs "^2.1.3" -"@inquirer/editor@^4.2.11": - version "4.2.14" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.14.tgz#74565caa37cd5f892a44663455194c35a527bfaf" - integrity sha512-yd2qtLl4QIIax9DTMZ1ZN2pFrrj+yL3kgIWxm34SS6uwCr0sIhsNyudUjAo5q3TqI03xx4SEBkUJqZuAInp9uA== +"@inquirer/editor@^4.2.17": + version "4.2.23" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.23.tgz#fe046a3bfdae931262de98c1052437d794322e0b" + integrity sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ== dependencies: - "@inquirer/core" "^10.1.14" - "@inquirer/type" "^3.0.7" - external-editor "^3.1.0" + "@inquirer/core" "^10.3.2" + "@inquirer/external-editor" "^1.0.3" + "@inquirer/type" "^3.0.10" -"@inquirer/expand@^4.0.13": - version "4.0.16" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.16.tgz#c87bbb0d5b05e4b54366e2841f993819f2339290" - integrity sha512-oiDqafWzMtofeJyyGkb1CTPaxUkjIcSxePHHQCfif8t3HV9pHcw1Kgdw3/uGpDvaFfeTluwQtWiqzPVjAqS3zA== +"@inquirer/expand@^4.0.17": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.23.tgz#a38b5f32226d75717c370bdfed792313b92bdc05" + integrity sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew== dependencies: - "@inquirer/core" "^10.1.14" - "@inquirer/type" "^3.0.7" - yoctocolors-cjs "^2.1.2" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/figures@^1.0.12": - version "1.0.12" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.12.tgz#667d6254cc7ba3b0c010a323d78024a1d30c6053" - integrity sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ== - -"@inquirer/input@^4.1.10": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.2.0.tgz#ba13f09765b040964e21402b8f3d8019791996f9" - integrity sha512-opqpHPB1NjAmDISi3uvZOTrjEEU5CWVu/HBkDby8t93+6UxYX0Z7Ps0Ltjm5sZiEbWenjubwUkivAEYQmy9xHw== +"@inquirer/external-editor@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.3.tgz#c23988291ee676290fdab3fd306e64010a6d13b8" + integrity sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA== dependencies: - "@inquirer/core" "^10.1.14" - "@inquirer/type" "^3.0.7" + chardet "^2.1.1" + iconv-lite "^0.7.0" -"@inquirer/number@^3.0.13": - version "3.0.16" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.16.tgz#1abf6fc71af9f44954291a6d9211a9e572c64906" - integrity sha512-kMrXAaKGavBEoBYUCgualbwA9jWUx2TjMA46ek+pEKy38+LFpL9QHlTd8PO2kWPUgI/KB+qi02o4y2rwXbzr3Q== +"@inquirer/figures@^1.0.15": + version "1.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.15.tgz#dbb49ed80df11df74268023b496ac5d9acd22b3a" + integrity sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g== + +"@inquirer/input@^4.2.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.3.1.tgz#778683b4c4c4d95d05d4b05c4a854964b73565b4" + integrity sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g== dependencies: - "@inquirer/core" "^10.1.14" - "@inquirer/type" "^3.0.7" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" -"@inquirer/password@^4.0.13": - version "4.0.16" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.16.tgz#baa79020aa371b7b2acfaba973d93223adf91580" - integrity sha512-g8BVNBj5Zeb5/Y3cSN+hDUL7CsIFDIuVxb9EPty3lkxBaYpjL5BNRKSYOF9yOLe+JOcKFd+TSVeADQ4iSY7rbg== +"@inquirer/number@^3.0.17": + version "3.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.23.tgz#3fdec2540d642093fd7526818fd8d4bdc7335094" + integrity sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg== dependencies: - "@inquirer/core" "^10.1.14" - "@inquirer/type" "^3.0.7" - ansi-escapes "^4.3.2" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" -"@inquirer/prompts@7.5.1": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.5.1.tgz#44e70dacfe20314d233c61410618ceef29a8482f" - integrity sha512-5AOrZPf2/GxZ+SDRZ5WFplCA2TAQgK3OYrXCYmJL5NaTu4ECcoWFlfUZuw7Es++6Njv7iu/8vpYJhuzxUH76Vg== +"@inquirer/password@^4.0.17": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.23.tgz#b9f5187c8c92fd7aa9eceb9d8f2ead0d7e7b000d" + integrity sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA== dependencies: - "@inquirer/checkbox" "^4.1.6" - "@inquirer/confirm" "^5.1.10" - "@inquirer/editor" "^4.2.11" - "@inquirer/expand" "^4.0.13" - "@inquirer/input" "^4.1.10" - "@inquirer/number" "^3.0.13" - "@inquirer/password" "^4.0.13" - "@inquirer/rawlist" "^4.1.1" - "@inquirer/search" "^3.0.13" - "@inquirer/select" "^4.2.1" + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" -"@inquirer/rawlist@^4.1.1": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.4.tgz#a08ccbd2cc3c800fc09787a690918cb3932abbc6" - integrity sha512-5GGvxVpXXMmfZNtvWw4IsHpR7RzqAR624xtkPd1NxxlV5M+pShMqzL4oRddRkg8rVEOK9fKdJp1jjVML2Lr7TQ== +"@inquirer/prompts@7.8.2": + version "7.8.2" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.8.2.tgz#5d9d8d7273831bd512e9cfaf3d827cce0f2eae0f" + integrity sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw== dependencies: - "@inquirer/core" "^10.1.14" - "@inquirer/type" "^3.0.7" - yoctocolors-cjs "^2.1.2" + "@inquirer/checkbox" "^4.2.1" + "@inquirer/confirm" "^5.1.14" + "@inquirer/editor" "^4.2.17" + "@inquirer/expand" "^4.0.17" + "@inquirer/input" "^4.2.1" + "@inquirer/number" "^3.0.17" + "@inquirer/password" "^4.0.17" + "@inquirer/rawlist" "^4.1.5" + "@inquirer/search" "^3.1.0" + "@inquirer/select" "^4.3.1" -"@inquirer/search@^3.0.13": - version "3.0.16" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.16.tgz#b72a75216f59a42a77fc5727b47f6bc776d88d3d" - integrity sha512-POCmXo+j97kTGU6aeRjsPyuCpQQfKcMXdeTMw708ZMtWrj5aykZvlUxH4Qgz3+Y1L/cAVZsSpA+UgZCu2GMOMg== +"@inquirer/rawlist@^4.1.5": + version "4.1.11" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.11.tgz#313c8c3ffccb7d41e990c606465726b4a898a033" + integrity sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw== dependencies: - "@inquirer/core" "^10.1.14" - "@inquirer/figures" "^1.0.12" - "@inquirer/type" "^3.0.7" - yoctocolors-cjs "^2.1.2" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/select@^4.2.1": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.2.4.tgz#72c964e24bf15316cbc4dc08183106a094c975f2" - integrity sha512-unTppUcTjmnbl/q+h8XeQDhAqIOmwWYWNyiiP2e3orXrg6tOaa5DHXja9PChCSbChOsktyKgOieRZFnajzxoBg== +"@inquirer/search@^3.1.0": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.2.2.tgz#4cc6fd574dcd434e4399badc37c742c3fd534ac8" + integrity sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA== dependencies: - "@inquirer/core" "^10.1.14" - "@inquirer/figures" "^1.0.12" - "@inquirer/type" "^3.0.7" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/type@^1.5.5": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.5.5.tgz#303ea04ce7ad2e585b921b662b3be36ef7b4f09b" - integrity sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA== +"@inquirer/select@^4.3.1": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.4.2.tgz#2ac8fca960913f18f1d1b35323ed8fcd27d89323" + integrity sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w== dependencies: - mute-stream "^1.0.0" + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/type@^3.0.6", "@inquirer/type@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.7.tgz#b46bcf377b3172dbc768fdbd053e6492ad801a09" - integrity sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA== +"@inquirer/type@^3.0.10", "@inquirer/type@^3.0.7", "@inquirer/type@^3.0.8": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.10.tgz#11ed564ec78432a200ea2601a212d24af8150d50" + integrity sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA== + +"@isaacs/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== + +"@isaacs/brace-expansion@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3" + integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== + dependencies: + "@isaacs/balanced-match" "^4.0.1" "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -862,73 +1131,101 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.12" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz#2234ce26c62889f03db3d7fea43c1932ab3e927b" - integrity sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg== +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" +"@jridgewell/remapping@^2.3.4", "@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7" - integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.29" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz#a58d31eaadaf92c6695680b2e1d464a9b8fbf7fc" - integrity sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ== +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@listr2/prompt-adapter-inquirer@2.0.22": - version "2.0.22" - resolved "https://registry.yarnpkg.com/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.22.tgz#95f7730de62089be79a87a80aa333f5f4644f3c5" - integrity sha512-hV36ZoY+xKL6pYOt1nPNnkciFkn89KZwqLhAFzJvYysAvL5uBQdiADZx/8bIDXIukzzwG0QlPYolgMzQUtKgpQ== +"@listr2/prompt-adapter-inquirer@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.1.tgz#7e081b4dcde2f1bd5ac16c620ee2402908f03fe7" + integrity sha512-3XFmGwm3u6ioREG+ynAQB7FoxfajgQnMhIu8wC5eo/Lsih4aKDg0VuIMGaOsYn7hJSJagSeaD4K8yfpkEoDEmA== dependencies: - "@inquirer/type" "^1.5.5" + "@inquirer/type" "^3.0.7" -"@lmdb/lmdb-darwin-arm64@3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.3.0.tgz#8120e59facefd54c79b86761ef308db2833a494d" - integrity sha512-LipbQobyEfQtu8WixasaFUZZ+JCGlho4OWwWIQ5ol0rB1RKkcZvypu7sS1CBvofBGVAa3vbOh8IOGQMrbmL5dg== +"@lmdb/lmdb-darwin-arm64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.2.tgz#316848b41e26cf0ddb379fad193d49052f09d7df" + integrity sha512-NK80WwDoODyPaSazKbzd3NEJ3ygePrkERilZshxBViBARNz21rmediktGHExoj9n5t9+ChlgLlxecdFKLCuCKg== -"@lmdb/lmdb-darwin-x64@3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.3.0.tgz#3e5c7a1ea0e1d5c9c38ad89c9d1dce91e883924c" - integrity sha512-yA+9P+ZeA3vg76BLXWeUomIAjxfmSmR2eg8fueHXDg5Xe1Xmkl9JCKuHXUhtJ+mMVcH12d5k4kJBLbyXTadfGQ== +"@lmdb/lmdb-darwin-x64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.2.tgz#c2048ad9d4c4c23e420f8fb2f3c418f713715cb7" + integrity sha512-zevaowQNmrp3U7Fz1s9pls5aIgpKRsKb3dZWDINtLiozh3jZI9fBrI19lYYBxqdyiIyNdlyiidPnwPShj4aK+w== -"@lmdb/lmdb-linux-arm64@3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.3.0.tgz#cc04c17a35710a46432306c7c12a941aa1590722" - integrity sha512-OeWvSgjXXZ/zmtLqqL78I3910F6UYpUubmsUU+iBHo6nTtjkpXms95rJtGrjkWQqwswKBD7xSMplbYC4LEsiPA== +"@lmdb/lmdb-linux-arm64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.2.tgz#382a820e422c189feb0b64ce6ab2ad379ba7b097" + integrity sha512-ZBEfbNZdkneebvZs98Lq30jMY8V9IJzckVeigGivV7nTHJc+89Ctomp1kAIWKlwIG0ovCDrFI448GzFPORANYg== -"@lmdb/lmdb-linux-arm@3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.3.0.tgz#f36a07eb8f1656cc989ffa4e5a014b18d133079f" - integrity sha512-EDYrW9kle+8wI19JCj/PhRnGoCN9bked5cdOPdo1wdgH/HzjgoLPFTn9DHlZccgTEVhp3O+bpWXdN/rWySVvjw== +"@lmdb/lmdb-linux-arm@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.2.tgz#a3dbb70e1a1e999d7c82ccff3d6c938872241acd" + integrity sha512-OmHCULY17rkx/RoCoXlzU7LyR8xqrksgdYWwtYa14l/sseezZ8seKWXcogHcjulBddER5NnEFV4L/Jtr2nyxeg== -"@lmdb/lmdb-linux-x64@3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.3.0.tgz#0b4b0a73ee69d1d98695905065ff1de415f5ac72" - integrity sha512-wDd02mt5ScX4+xd6g78zKBr6ojpgCJCTrllCAabjgap5FzuETqOqaQfKhO+tJuGWv/J5q+GIds6uY7rNFueOxg== +"@lmdb/lmdb-linux-x64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.2.tgz#aa073eac33ede369d51afd0314b2e2af06a368e0" + integrity sha512-vL9nM17C77lohPYE4YaAQvfZCSVJSryE4fXdi8M7uWPBnU+9DJabgKVAeyDb84ZM2vcFseoBE4/AagVtJeRE7g== -"@lmdb/lmdb-win32-arm64@3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.3.0.tgz#e631dbe9bee71d00fb49b158b460a2306429ce46" - integrity sha512-COotWhHJgzXULLiEjOgWQwqig6PoA+6ji6W+sDl6M1HhMXWIymEVHGs0edsVSNtsNSCAWMxJgR3asv6FNX/2EA== +"@lmdb/lmdb-win32-arm64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.2.tgz#7e73500f0c81ca269a6ad9290fb1e7bf7137863d" + integrity sha512-SXWjdBfNDze4ZPeLtYIzsIeDJDJ/SdsA0pEXcUBayUIMO0FQBHfVZZyHXQjjHr4cvOAzANBgIiqaXRwfMhzmLw== -"@lmdb/lmdb-win32-x64@3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.3.0.tgz#02f81fa98bcd527a493de6009ba65e3758a322c4" - integrity sha512-kqUgQH+l8HDbkAapx+aoko7Ez4X4DqkIraOqY/k0QY5EN/iialVlFpBUXh4wFXzirdmEVjbIUMrceUh0Kh8LeA== +"@lmdb/lmdb-win32-x64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.2.tgz#99caf114bb74d39c9e1baca99b907353ad8bf461" + integrity sha512-IY+r3bxKW6Q6sIPiMC0L533DEfRJSXibjSI3Ft/w9Q8KQBNqEIvUFXt+09wV8S5BRk0a8uSF19YWxuRwEfI90g== + +"@modelcontextprotocol/sdk@1.24.0": + version "1.24.0" + resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.24.0.tgz#3bd1d539490d1d4228537ab815b8d854bc0e3143" + integrity sha512-D8h5KXY2vHFW8zTuxn2vuZGN0HGrQ5No6LkHwlEA9trVgNdPL3TF1dSqKA7Dny6BbBYKSW/rOBDXdC8KJAjUCg== + dependencies: + ajv "^8.17.1" + ajv-formats "^3.0.1" + content-type "^1.0.5" + cors "^2.8.5" + cross-spawn "^7.0.5" + eventsource "^3.0.2" + eventsource-parser "^3.0.0" + express "^5.0.1" + express-rate-limit "^7.5.0" + jose "^6.1.1" + pkce-challenge "^5.0.0" + raw-body "^3.0.0" + zod "^3.25 || ^4.0" + zod-to-json-schema "^3.25.0" "@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3": version "3.0.3" @@ -960,137 +1257,122 @@ resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz#0aa5502d547b57abfc4ac492de68e2006e417242" integrity sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ== -"@napi-rs/nice-android-arm-eabi@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz#9a0cba12706ff56500df127d6f4caf28ddb94936" - integrity sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w== +"@napi-rs/nice-android-arm-eabi@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz#4ebd966821cd6c2cc7cc020eb468de397bb9b40f" + integrity sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw== -"@napi-rs/nice-android-arm64@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz#32fc32e9649bd759d2a39ad745e95766f6759d2f" - integrity sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA== +"@napi-rs/nice-android-arm64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz#e183ba874512bc005852daab8b78c63e0a4288a8" + integrity sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw== -"@napi-rs/nice-darwin-arm64@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz#d3c44c51b94b25a82d45803e2255891e833e787b" - integrity sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA== +"@napi-rs/nice-darwin-arm64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz#64b1585809774cbb8bf95cea3d4c8827c9897394" + integrity sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A== -"@napi-rs/nice-darwin-x64@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz#f1b1365a8370c6a6957e90085a9b4873d0e6a957" - integrity sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ== +"@napi-rs/nice-darwin-x64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz#99c0c7f62cb1e23ca76881bb29cc6000aeccc6f0" + integrity sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ== -"@napi-rs/nice-freebsd-x64@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz#4280f081efbe0b46c5165fdaea8b286e55a8f89e" - integrity sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw== +"@napi-rs/nice-freebsd-x64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz#9a5ca0e3ced86207887c98a5a560de8cde5a909e" + integrity sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ== -"@napi-rs/nice-linux-arm-gnueabihf@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz#07aec23a9467ed35eb7602af5e63d42c5d7bd473" - integrity sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q== +"@napi-rs/nice-linux-arm-gnueabihf@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz#b8a6a1bc88d0de3e99ac3fdea69980dc6e20b502" + integrity sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg== -"@napi-rs/nice-linux-arm64-gnu@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz#038a77134cc6df3c48059d5a5e199d6f50fb9a90" - integrity sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA== +"@napi-rs/nice-linux-arm64-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz#226f1ef30fcb80fa40370e843b75cc86e39e1183" + integrity sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ== -"@napi-rs/nice-linux-arm64-musl@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz#715d0906582ba0cff025109f42e5b84ea68c2bcc" - integrity sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw== +"@napi-rs/nice-linux-arm64-musl@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz#01345c3db79210ba5406c8729e8db75ed11c5f14" + integrity sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg== -"@napi-rs/nice-linux-ppc64-gnu@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz#ac1c8f781c67b0559fa7a1cd4ae3ca2299dc3d06" - integrity sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q== +"@napi-rs/nice-linux-ppc64-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz#ce7a1025227daab491ded40784b561394d688fcb" + integrity sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg== -"@napi-rs/nice-linux-riscv64-gnu@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz#b0a430549acfd3920ffd28ce544e2fe17833d263" - integrity sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig== +"@napi-rs/nice-linux-riscv64-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz#9bef5dc89a0425d03163853b4968dbb686d98fd5" + integrity sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw== -"@napi-rs/nice-linux-s390x-gnu@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz#5b95caf411ad72a965885217db378c4d09733e97" - integrity sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg== +"@napi-rs/nice-linux-s390x-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz#247c8c7c45876877bdb337cfeb290ff4fd82de62" + integrity sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ== -"@napi-rs/nice-linux-x64-gnu@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz#a98cdef517549f8c17a83f0236a69418a90e77b7" - integrity sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA== +"@napi-rs/nice-linux-x64-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz#7fd1f5e037cb44ab4f5f95a3b3225a99e3248f12" + integrity sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg== -"@napi-rs/nice-linux-x64-musl@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz#5e26843eafa940138aed437c870cca751c8a8957" - integrity sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ== +"@napi-rs/nice-linux-x64-musl@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz#d447cd7157ae5da5c0b15fc618bf61f0c344ff6f" + integrity sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw== -"@napi-rs/nice-win32-arm64-msvc@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz#bd62617d02f04aa30ab1e9081363856715f84cd8" - integrity sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg== +"@napi-rs/nice-openharmony-arm64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz#1120e457d2cc6b2bc86ef0a697faefe2e194dfce" + integrity sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ== -"@napi-rs/nice-win32-ia32-msvc@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz#b8b7aad552a24836027473d9b9f16edaeabecf18" - integrity sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw== +"@napi-rs/nice-win32-arm64-msvc@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz#91e4cfecf339b43fa7934f0c8b19d04f4cdd9bc0" + integrity sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA== -"@napi-rs/nice-win32-x64-msvc@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz#37d8718b8f722f49067713e9f1e85540c9a3dd09" - integrity sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg== +"@napi-rs/nice-win32-ia32-msvc@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz#ed9300bba074d3e3b0a077d6b157f2b4ff70af0e" + integrity sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug== -"@napi-rs/nice@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/nice/-/nice-1.0.1.tgz#483d3ff31e5661829a1efb4825591a135c3bfa7d" - integrity sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ== +"@napi-rs/nice-win32-x64-msvc@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz#8292b82fb46458618ccff5b8130f78974349541e" + integrity sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ== + +"@napi-rs/nice@^1.0.4": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice/-/nice-1.1.1.tgz#c1aacd631ecd4c500c959e3e7cfedd5c73bffe2a" + integrity sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw== optionalDependencies: - "@napi-rs/nice-android-arm-eabi" "1.0.1" - "@napi-rs/nice-android-arm64" "1.0.1" - "@napi-rs/nice-darwin-arm64" "1.0.1" - "@napi-rs/nice-darwin-x64" "1.0.1" - "@napi-rs/nice-freebsd-x64" "1.0.1" - "@napi-rs/nice-linux-arm-gnueabihf" "1.0.1" - "@napi-rs/nice-linux-arm64-gnu" "1.0.1" - "@napi-rs/nice-linux-arm64-musl" "1.0.1" - "@napi-rs/nice-linux-ppc64-gnu" "1.0.1" - "@napi-rs/nice-linux-riscv64-gnu" "1.0.1" - "@napi-rs/nice-linux-s390x-gnu" "1.0.1" - "@napi-rs/nice-linux-x64-gnu" "1.0.1" - "@napi-rs/nice-linux-x64-musl" "1.0.1" - "@napi-rs/nice-win32-arm64-msvc" "1.0.1" - "@napi-rs/nice-win32-ia32-msvc" "1.0.1" - "@napi-rs/nice-win32-x64-msvc" "1.0.1" + "@napi-rs/nice-android-arm-eabi" "1.1.1" + "@napi-rs/nice-android-arm64" "1.1.1" + "@napi-rs/nice-darwin-arm64" "1.1.1" + "@napi-rs/nice-darwin-x64" "1.1.1" + "@napi-rs/nice-freebsd-x64" "1.1.1" + "@napi-rs/nice-linux-arm-gnueabihf" "1.1.1" + "@napi-rs/nice-linux-arm64-gnu" "1.1.1" + "@napi-rs/nice-linux-arm64-musl" "1.1.1" + "@napi-rs/nice-linux-ppc64-gnu" "1.1.1" + "@napi-rs/nice-linux-riscv64-gnu" "1.1.1" + "@napi-rs/nice-linux-s390x-gnu" "1.1.1" + "@napi-rs/nice-linux-x64-gnu" "1.1.1" + "@napi-rs/nice-linux-x64-musl" "1.1.1" + "@napi-rs/nice-openharmony-arm64" "1.1.1" + "@napi-rs/nice-win32-arm64-msvc" "1.1.1" + "@napi-rs/nice-win32-ia32-msvc" "1.1.1" + "@napi-rs/nice-win32-x64-msvc" "1.1.1" -"@napi-rs/wasm-runtime@^0.2.11": - version "0.2.11" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz#192c1610e1625048089ab4e35bc0649ce478500e" - integrity sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA== +"@napi-rs/wasm-runtime@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz#c3705ab549d176b8dc5172723d6156c3dc426af2" + integrity sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A== dependencies: - "@emnapi/core" "^1.4.3" - "@emnapi/runtime" "^1.4.3" - "@tybys/wasm-util" "^0.9.0" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "@emnapi/core" "^1.7.1" + "@emnapi/runtime" "^1.7.1" + "@tybys/wasm-util" "^0.10.1" "@npmcli/agent@^3.0.0": version "3.0.0" @@ -1151,9 +1433,9 @@ validate-npm-package-license "^3.0.4" "@npmcli/promise-spawn@^8.0.0": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz#053688f8bc2b4ecc036d2d52c691fd82af58ea5e" - integrity sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ== + version "8.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz#08c5e4c1cab7ff848e442e4b19bbf0ee699d133f" + integrity sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg== dependencies: which "^5.0.0" @@ -1268,218 +1550,253 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@rollup/rollup-android-arm-eabi@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz#c228d00a41f0dbd6fb8b7ea819bbfbf1c1157a10" - integrity sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg== +"@rollup/rollup-android-arm-eabi@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz#7050c2acdc1214a730058e21f613ab0e1fe1ced9" + integrity sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw== -"@rollup/rollup-android-arm-eabi@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.1.tgz#f768e3b2b0e6b55c595d7a053652c06413713983" - integrity sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w== +"@rollup/rollup-android-arm-eabi@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz#76e0fef6533b3ce313f969879e61e8f21f0eeb28" + integrity sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg== -"@rollup/rollup-android-arm64@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz#e2b38d0c912169fd55d7e38d723aada208d37256" - integrity sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw== +"@rollup/rollup-android-arm64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz#3f5b2afbfcbe9021649701cf6ff0d54b1fb7e4a5" + integrity sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw== -"@rollup/rollup-android-arm64@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.1.tgz#40379fd5501cfdfd7d8f86dfa1d3ce8d3a609493" - integrity sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ== +"@rollup/rollup-android-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz#d3cfc675a40bbdec97bda6d7fe3b3b05f0e1cd93" + integrity sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg== -"@rollup/rollup-darwin-arm64@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz#1fddb3690f2ae33df16d334c613377f05abe4878" - integrity sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w== +"@rollup/rollup-darwin-arm64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz#70a1679fb4393ba7bafb730ee56a5278cbcdafb0" + integrity sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg== -"@rollup/rollup-darwin-arm64@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.1.tgz#972c227bc89fe8a38a3f0c493e1966900e4e1ff7" - integrity sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg== +"@rollup/rollup-darwin-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz#eb912b8f59dd47c77b3c50a78489013b1d6772b4" + integrity sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg== -"@rollup/rollup-darwin-x64@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz#818298d11c8109e1112590165142f14be24b396d" - integrity sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ== +"@rollup/rollup-darwin-x64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz#ae75aec88fa72069de9bca3a3ec22bf4e6a962bf" + integrity sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A== -"@rollup/rollup-darwin-x64@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.1.tgz#96c919dcb87a5aa7dec5f7f77d90de881e578fdd" - integrity sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw== +"@rollup/rollup-darwin-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz#e7d0839fdfd1276a1d34bc5ebbbd0dfd7d0b81a0" + integrity sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ== -"@rollup/rollup-freebsd-arm64@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz#91a28dc527d5bed7f9ecf0e054297b3012e19618" - integrity sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ== +"@rollup/rollup-freebsd-arm64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz#8a2bda997faa1d7e335ce1961ce71d1a76ac6288" + integrity sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ== -"@rollup/rollup-freebsd-arm64@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.1.tgz#d199d8eaef830179c0c95b7a6e5455e893d1102c" - integrity sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA== +"@rollup/rollup-freebsd-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz#7ff8118760f7351e48fd0cd3717ff80543d6aac8" + integrity sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg== -"@rollup/rollup-freebsd-x64@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz#28acadefa76b5c7bede1576e065b51d335c62c62" - integrity sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q== +"@rollup/rollup-freebsd-x64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz#fc287bcc39b9a9c0df97336d68fd5f4458f87977" + integrity sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A== -"@rollup/rollup-freebsd-x64@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.1.tgz#cab01f9e06ca756c1fabe87d64825ae016af4713" - integrity sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw== +"@rollup/rollup-freebsd-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz#49d330dadbda1d4e9b86b4a3951b59928a9489a9" + integrity sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw== -"@rollup/rollup-linux-arm-gnueabihf@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz#819691464179cbcd9a9f9d3dc7617954840c6186" - integrity sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q== +"@rollup/rollup-linux-arm-gnueabihf@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz#5b5a2a55dffaa64d7c7a231e80e491219e33d4f3" + integrity sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA== -"@rollup/rollup-linux-arm-gnueabihf@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.1.tgz#f6f1c42036dba0e58dc2315305429beff0d02c78" - integrity sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ== +"@rollup/rollup-linux-arm-gnueabihf@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz#98c5f1f8b9776b4a36e466e2a1c9ed1ba52ef1b6" + integrity sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ== -"@rollup/rollup-linux-arm-musleabihf@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz#d149207039e4189e267e8724050388effc80d704" - integrity sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg== +"@rollup/rollup-linux-arm-musleabihf@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz#979eab95003c21837ea0fdd8a721aa3e69fa4aa3" + integrity sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA== -"@rollup/rollup-linux-arm-musleabihf@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.1.tgz#1157e98e740facf858993fb51431dce3a4a96239" - integrity sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw== +"@rollup/rollup-linux-arm-musleabihf@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz#b9acecd3672e742f70b0c8a94075c816a91ff040" + integrity sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg== -"@rollup/rollup-linux-arm64-gnu@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz#fa72ebddb729c3c6d88973242f1a2153c83e86ec" - integrity sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg== +"@rollup/rollup-linux-arm64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz#53b89f1289cbeca5ed9b6ca1602a6fe1a29dd4e2" + integrity sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ== -"@rollup/rollup-linux-arm64-gnu@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.1.tgz#b39db73f8a4c22e7db31a4f3fd45170105f33265" - integrity sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ== +"@rollup/rollup-linux-arm64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz#7a6ab06651bc29e18b09a50ed1a02bc972977c9b" + integrity sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ== -"@rollup/rollup-linux-arm64-musl@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz#2054216e34469ab8765588ebf343d531fc3c9228" - integrity sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg== +"@rollup/rollup-linux-arm64-musl@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz#3bbcf5e13c09d0c4c55bd9c75ec6a7aeee56fe28" + integrity sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw== -"@rollup/rollup-linux-arm64-musl@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.1.tgz#4043398049fe4449c1485312d1ae9ad8af4056dd" - integrity sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g== +"@rollup/rollup-linux-arm64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz#3c8c9072ba4a4d4ef1156b85ab9a2cbb57c1fad0" + integrity sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA== -"@rollup/rollup-linux-loongarch64-gnu@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz#818de242291841afbfc483a84f11e9c7a11959bc" - integrity sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw== +"@rollup/rollup-linux-loong64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz#1cc71838465a8297f92ccc5cc9c29756b71f6e73" + integrity sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg== -"@rollup/rollup-linux-loongarch64-gnu@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.1.tgz#855a80e7e86490da15a85dcce247dbc25265bc08" - integrity sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew== +"@rollup/rollup-linux-loong64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz#17a7af13530f4e4a7b12cd26276c54307a84a8b0" + integrity sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g== -"@rollup/rollup-linux-powerpc64le-gnu@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz#0bb4cb8fc4a2c635f68c1208c924b2145eb647cb" - integrity sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q== +"@rollup/rollup-linux-loong64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz#5cd7a900fd7b077ecd753e34a9b7ff1157fe70c1" + integrity sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw== -"@rollup/rollup-linux-powerpc64le-gnu@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.1.tgz#8cf843cb7ab1d42e1dda680937cf0a2db6d59047" - integrity sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA== +"@rollup/rollup-linux-ppc64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz#fe3fdf2ef57dc2d58fedd4f1e0678660772c843a" + integrity sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw== -"@rollup/rollup-linux-riscv64-gnu@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz#4b3b8e541b7b13e447ae07774217d98c06f6926d" - integrity sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg== +"@rollup/rollup-linux-ppc64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz#03a097e70243ddf1c07b59d3c20f38e6f6800539" + integrity sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw== -"@rollup/rollup-linux-riscv64-gnu@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.1.tgz#287c085472976c8711f16700326f736a527f2f38" - integrity sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw== +"@rollup/rollup-linux-ppc64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz#a5389873039d4650f35b4fa060d286392eb21a94" + integrity sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw== -"@rollup/rollup-linux-riscv64-musl@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz#e065405e67d8bd64a7d0126c931bd9f03910817f" - integrity sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg== +"@rollup/rollup-linux-riscv64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz#eebc99e75832891d58532501879ca749b1592f93" + integrity sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg== -"@rollup/rollup-linux-riscv64-musl@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.1.tgz#095ad5e53a54ba475979f1b3226b92440c95c892" - integrity sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg== +"@rollup/rollup-linux-riscv64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz#789e60e7d6e2b76132d001ffb24ba80007fb17d0" + integrity sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw== -"@rollup/rollup-linux-s390x-gnu@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz#dda3265bbbfe16a5d0089168fd07f5ebb2a866fe" - integrity sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ== +"@rollup/rollup-linux-riscv64-musl@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz#9a2df234d61763a44601eba17c36844a18f20539" + integrity sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg== -"@rollup/rollup-linux-s390x-gnu@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.1.tgz#a3dec8281d8f2aef1703e48ebc65d29fe847933c" - integrity sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw== +"@rollup/rollup-linux-riscv64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz#3556fa88d139282e9a73c337c9a170f3c5fe7aa4" + integrity sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg== -"@rollup/rollup-linux-x64-gnu@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz#90993269b8b995b4067b7b9d72ff1c360ef90a17" - integrity sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng== +"@rollup/rollup-linux-s390x-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz#f0e45ea7e41ee473c85458b1ec8fab9572cc1834" + integrity sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg== -"@rollup/rollup-linux-x64-gnu@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.1.tgz#4b211e6fd57edd6a134740f4f8e8ea61972ff2c5" - integrity sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw== +"@rollup/rollup-linux-s390x-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz#c085995b10143c16747a67f1a5487512b2ff04b2" + integrity sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg== -"@rollup/rollup-linux-x64-musl@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz#fdf5b09fd121eb8d977ebb0fda142c7c0167b8de" - integrity sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA== +"@rollup/rollup-linux-x64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz#ed63dec576799fa5571eee5b2040f65faa82b49b" + integrity sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA== -"@rollup/rollup-linux-x64-musl@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.1.tgz#3ecbf8e21b4157e57bb15dc6837b6db851f9a336" - integrity sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g== +"@rollup/rollup-linux-x64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz#9563a5419dd2604841bad31a39ccfdd2891690fb" + integrity sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg== -"@rollup/rollup-win32-arm64-msvc@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz#6397e1e012db64dfecfed0774cb9fcf89503d716" - integrity sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg== +"@rollup/rollup-linux-x64-musl@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz#755c56ac79b17fbdf0359bce7e2293a11de30ad0" + integrity sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw== -"@rollup/rollup-win32-arm64-msvc@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.1.tgz#d4aae38465b2ad200557b53c8c817266a3ddbfd0" - integrity sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg== +"@rollup/rollup-linux-x64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz#691bb06e6269a8959c13476b0cd2aa7458facb31" + integrity sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w== -"@rollup/rollup-win32-ia32-msvc@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz#df0991464a52a35506103fe18d29913bf8798a0c" - integrity sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA== +"@rollup/rollup-openbsd-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz#223e71224746a59ce6d955bbc403577bb5a8be9d" + integrity sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg== -"@rollup/rollup-win32-ia32-msvc@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.1.tgz#0258e8ca052abd48b23fd6113360fa0cd1ec3e23" - integrity sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A== +"@rollup/rollup-openharmony-arm64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz#84b4170fe28c2b41e406add6ccf8513bf91195ea" + integrity sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA== -"@rollup/rollup-win32-x64-msvc@4.40.2": - version "4.40.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz#8dae04d01a2cbd84d6297d99356674c6b993f0fc" - integrity sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA== +"@rollup/rollup-openharmony-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz#0817e5d8ecbfeb8b7939bf58f8ce3c9dd67fce77" + integrity sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw== -"@rollup/rollup-win32-x64-msvc@4.44.1": - version "4.44.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.1.tgz#1c982f6a5044ffc2a35cd754a0951bdcb44d5ba0" - integrity sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug== +"@rollup/rollup-win32-arm64-msvc@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz#4fb0cd004183da819bec804eba70f1ef6936ccbf" + integrity sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA== + +"@rollup/rollup-win32-arm64-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz#de56d8f2013c84570ef5fb917aae034abda93e4a" + integrity sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g== + +"@rollup/rollup-win32-ia32-msvc@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz#1788ba80313477a31e6214390906201604ee38eb" + integrity sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g== + +"@rollup/rollup-win32-ia32-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz#659aff5244312475aeea2c9479a6c7d397b517bf" + integrity sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA== + +"@rollup/rollup-win32-x64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz#867222f288a9557487900c7836998123ebbadc9d" + integrity sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ== + +"@rollup/rollup-win32-x64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz#2cb09549cbb66c1b979f9238db6dd454cac14a88" + integrity sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg== + +"@rollup/rollup-win32-x64-msvc@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz#3f55b6e8fe809a7d29959d6bc686cce1804581f0" + integrity sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA== + +"@rollup/rollup-win32-x64-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz#f79437939020b83057faf07e98365b1fa51c458b" + integrity sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw== "@rtsao/scc@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== -"@schematics/angular@20.0.5": - version "20.0.5" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-20.0.5.tgz#835723cb2ba241d02c2dec5e415d03eb432f556a" - integrity sha512-CVscKyuDHULxKEo4rl/jOlr4mrkCwfWdoA7Xp63dEY3lIM895Oiw9SUhfmk4n5PaEGtlDbIV1TNnPXNrc+y3ww== +"@schematics/angular@20.3.13": + version "20.3.13" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-20.3.13.tgz#fe0f29ad3271cdc0eb68e70de4652adea83c6f77" + integrity sha512-ETJ1budKmrkdxojo5QP6TPr6zQZYGxtWWf8NrX1cBIS851zPCmFkKyhSFLZsoksariYF/LP8ljvm8tlcIzt/XA== dependencies: - "@angular-devkit/core" "20.0.5" - "@angular-devkit/schematics" "20.0.5" + "@angular-devkit/core" "20.3.13" + "@angular-devkit/schematics" "20.3.13" jsonc-parser "3.3.1" "@sigstore/bundle@^3.1.0": @@ -1533,117 +1850,114 @@ resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== -"@tailwindcss/node@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.11.tgz#d626af65fc9872e5e9d8884791d7e3856e945359" - integrity sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q== +"@tailwindcss/node@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.18.tgz#9863be0d26178638794a38d6c7c14666fb992e8a" + integrity sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ== dependencies: - "@ampproject/remapping" "^2.3.0" - enhanced-resolve "^5.18.1" - jiti "^2.4.2" - lightningcss "1.30.1" - magic-string "^0.30.17" + "@jridgewell/remapping" "^2.3.4" + enhanced-resolve "^5.18.3" + jiti "^2.6.1" + lightningcss "1.30.2" + magic-string "^0.30.21" source-map-js "^1.2.1" - tailwindcss "4.1.11" + tailwindcss "4.1.18" -"@tailwindcss/oxide-android-arm64@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz#1f387d8302f011b61c226deb0c3a1d2bd79c6915" - integrity sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg== +"@tailwindcss/oxide-android-arm64@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz#79717f87e90135e5d3d23a3d3aecde4ca5595dd5" + integrity sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q== -"@tailwindcss/oxide-darwin-arm64@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz#acd35ffb7e4eae83d0a3fe2f8ea36cfcc9b21f7e" - integrity sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ== +"@tailwindcss/oxide-darwin-arm64@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz#7fa47608d62d60e9eb020682249d20159667fbb0" + integrity sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A== -"@tailwindcss/oxide-darwin-x64@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz#a0022312993a3893d6ff0312d6e3c83c4636fef4" - integrity sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw== +"@tailwindcss/oxide-darwin-x64@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz#c05991c85aa2af47bf9d1f8172fe9e4636591e79" + integrity sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw== -"@tailwindcss/oxide-freebsd-x64@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz#dd8e55eb0b88fe7995b8148c0e0ae5fa27092d22" - integrity sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA== +"@tailwindcss/oxide-freebsd-x64@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz#3d48e8d79fd08ece0e02af8e72d5059646be34d0" + integrity sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA== -"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz#02ee99090988847d3f13d277679012cbffcdde37" - integrity sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg== +"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz#982ecd1a65180807ccfde67dc17c6897f2e50aa8" + integrity sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA== -"@tailwindcss/oxide-linux-arm64-gnu@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz#4837559c102bebe65089879f6a0278ed473b4813" - integrity sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ== +"@tailwindcss/oxide-linux-arm64-gnu@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz#df49357bc9737b2e9810ea950c1c0647ba6573c3" + integrity sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw== -"@tailwindcss/oxide-linux-arm64-musl@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz#bec465112a13a1383558ff36afdf28b8a8cb9021" - integrity sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ== +"@tailwindcss/oxide-linux-arm64-musl@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz#b266c12822bf87883cf152615f8fffb8519d689c" + integrity sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg== -"@tailwindcss/oxide-linux-x64-gnu@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz#f9e47e6aa67ff77f32f7412bc9698d4278e101bf" - integrity sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg== +"@tailwindcss/oxide-linux-x64-gnu@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz#5c737f13dd9529b25b314e6000ff54e05b3811da" + integrity sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g== -"@tailwindcss/oxide-linux-x64-musl@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz#7d6e8adcfb9bc84d8e2e2e8781d661edb9e41ba8" - integrity sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q== +"@tailwindcss/oxide-linux-x64-musl@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz#3380e17f7be391f1ef924be9f0afe1f304fe3478" + integrity sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ== -"@tailwindcss/oxide-wasm32-wasi@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz#a1762f4939c6ebaa824696fda2fd7db1b85fbed2" - integrity sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g== +"@tailwindcss/oxide-wasm32-wasi@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz#9464df0e28a499aab1c55e97682be37b3a656c88" + integrity sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA== dependencies: - "@emnapi/core" "^1.4.3" - "@emnapi/runtime" "^1.4.3" - "@emnapi/wasi-threads" "^1.0.2" - "@napi-rs/wasm-runtime" "^0.2.11" - "@tybys/wasm-util" "^0.9.0" - tslib "^2.8.0" + "@emnapi/core" "^1.7.1" + "@emnapi/runtime" "^1.7.1" + "@emnapi/wasi-threads" "^1.1.0" + "@napi-rs/wasm-runtime" "^1.1.0" + "@tybys/wasm-util" "^0.10.1" + tslib "^2.4.0" -"@tailwindcss/oxide-win32-arm64-msvc@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz#70ba392dca0fa3707ebe27d2bd6ac3e69d35e3b7" - integrity sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w== +"@tailwindcss/oxide-win32-arm64-msvc@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz#bbcdd59c628811f6a0a4d5b09616967d8fb0c4d4" + integrity sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA== -"@tailwindcss/oxide-win32-x64-msvc@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz#cdcb9eea9225a346c0695f67f621990b0534763f" - integrity sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg== +"@tailwindcss/oxide-win32-x64-msvc@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz#9c628d04623aa4c3536c508289f58d58ba4b3fb1" + integrity sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q== -"@tailwindcss/oxide@4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.11.tgz#569b668c99c337b7b8204bc5b6a833429755a05b" - integrity sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg== - dependencies: - detect-libc "^2.0.4" - tar "^7.4.3" +"@tailwindcss/oxide@4.1.18": + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.18.tgz#c8335cd0a83e9880caecd60abf7904f43ebab582" + integrity sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A== optionalDependencies: - "@tailwindcss/oxide-android-arm64" "4.1.11" - "@tailwindcss/oxide-darwin-arm64" "4.1.11" - "@tailwindcss/oxide-darwin-x64" "4.1.11" - "@tailwindcss/oxide-freebsd-x64" "4.1.11" - "@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.11" - "@tailwindcss/oxide-linux-arm64-gnu" "4.1.11" - "@tailwindcss/oxide-linux-arm64-musl" "4.1.11" - "@tailwindcss/oxide-linux-x64-gnu" "4.1.11" - "@tailwindcss/oxide-linux-x64-musl" "4.1.11" - "@tailwindcss/oxide-wasm32-wasi" "4.1.11" - "@tailwindcss/oxide-win32-arm64-msvc" "4.1.11" - "@tailwindcss/oxide-win32-x64-msvc" "4.1.11" + "@tailwindcss/oxide-android-arm64" "4.1.18" + "@tailwindcss/oxide-darwin-arm64" "4.1.18" + "@tailwindcss/oxide-darwin-x64" "4.1.18" + "@tailwindcss/oxide-freebsd-x64" "4.1.18" + "@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.18" + "@tailwindcss/oxide-linux-arm64-gnu" "4.1.18" + "@tailwindcss/oxide-linux-arm64-musl" "4.1.18" + "@tailwindcss/oxide-linux-x64-gnu" "4.1.18" + "@tailwindcss/oxide-linux-x64-musl" "4.1.18" + "@tailwindcss/oxide-wasm32-wasi" "4.1.18" + "@tailwindcss/oxide-win32-arm64-msvc" "4.1.18" + "@tailwindcss/oxide-win32-x64-msvc" "4.1.18" "@tailwindcss/postcss@^4.1.11": - version "4.1.11" - resolved "https://registry.yarnpkg.com/@tailwindcss/postcss/-/postcss-4.1.11.tgz#4d844f7ff295c731ceab54934531bece7380ce0c" - integrity sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA== + version "4.1.18" + resolved "https://registry.yarnpkg.com/@tailwindcss/postcss/-/postcss-4.1.18.tgz#19152640d676beaa2a4a70b00bbc36ef54e998b5" + integrity sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g== dependencies: "@alloc/quick-lru" "^5.2.0" - "@tailwindcss/node" "4.1.11" - "@tailwindcss/oxide" "4.1.11" + "@tailwindcss/node" "4.1.18" + "@tailwindcss/oxide" "4.1.18" postcss "^8.4.41" - tailwindcss "4.1.11" + tailwindcss "4.1.18" "@tufjs/canonical-json@2.0.0": version "2.0.0" @@ -1658,10 +1972,10 @@ "@tufjs/canonical-json" "2.0.0" minimatch "^9.0.5" -"@tybys/wasm-util@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" - integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== +"@tybys/wasm-util@^0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" + integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== dependencies: tslib "^2.4.0" @@ -1672,20 +1986,15 @@ dependencies: "@types/node" "*" -"@types/estree@1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" - integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== - "@types/estree@1.0.8", "@types/estree@^1.0.6": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/jasmine@~5.1.4": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.8.tgz#b20f78ca416d7a2a8e726f8321e0b2827a78ceaa" - integrity sha512-u7/CnvRdh6AaaIzYjCgUuVbREFgulhX05Qtf6ZtW+aOcjCKKVvKgpkPYJBFTZSHtFBYimzU4zP0V2vrEsq9Wcg== + version "5.1.13" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.13.tgz#c27d125ebac28d7d1c34b650fc593f96f89b088a" + integrity sha512-MYCcDkruFc92LeYZux5BC0dmqo2jk+M5UIZ4/oFnAPCXN9mCcQhLyj7F3/Za7rocVyt5YRr1MmqJqFlvQ9LVcg== "@types/json-schema@^7.0.15": version "7.0.15" @@ -1703,118 +2012,117 @@ integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/node@*", "@types/node@>=10.0.0": - version "24.0.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.10.tgz#f65a169779bf0d70203183a1890be7bee8ca2ddb" - integrity sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA== + version "25.0.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.3.tgz#79b9ac8318f373fbfaaf6e2784893efa9701f269" + integrity sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA== dependencies: - undici-types "~7.8.0" + undici-types "~7.16.0" "@types/normalize-package-data@^2.4.0": version "2.4.4" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== -"@typescript-eslint/eslint-plugin@8.35.1": - version "8.35.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz#06b1129fe26d6532abd58fb2b3fe9810bd016935" - integrity sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg== +"@typescript-eslint/eslint-plugin@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.51.0.tgz#8985230730c0d955bf6aa0aed98c5c2c95102e1a" + integrity sha512-XtssGWJvypyM2ytBnSnKtHYOGT+4ZwTnBVl36TA4nRO2f4PRNGz5/1OszHzcZCvcBMh+qb7I06uoCmLTRdR9og== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.35.1" - "@typescript-eslint/type-utils" "8.35.1" - "@typescript-eslint/utils" "8.35.1" - "@typescript-eslint/visitor-keys" "8.35.1" - graphemer "^1.4.0" + "@typescript-eslint/scope-manager" "8.51.0" + "@typescript-eslint/type-utils" "8.51.0" + "@typescript-eslint/utils" "8.51.0" + "@typescript-eslint/visitor-keys" "8.51.0" ignore "^7.0.0" natural-compare "^1.4.0" - ts-api-utils "^2.1.0" + ts-api-utils "^2.2.0" -"@typescript-eslint/parser@8.35.1": - version "8.35.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.35.1.tgz#787312e80f0f337d85f4c2a569411c469e852d44" - integrity sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w== +"@typescript-eslint/parser@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.51.0.tgz#584fb8be3a867cbf980917aabed5f7528f615d6b" + integrity sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A== dependencies: - "@typescript-eslint/scope-manager" "8.35.1" - "@typescript-eslint/types" "8.35.1" - "@typescript-eslint/typescript-estree" "8.35.1" - "@typescript-eslint/visitor-keys" "8.35.1" + "@typescript-eslint/scope-manager" "8.51.0" + "@typescript-eslint/types" "8.51.0" + "@typescript-eslint/typescript-estree" "8.51.0" + "@typescript-eslint/visitor-keys" "8.51.0" debug "^4.3.4" -"@typescript-eslint/project-service@8.35.1": - version "8.35.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.35.1.tgz#815bb771f2f6c97780e44299434ece3c2e526127" - integrity sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q== +"@typescript-eslint/project-service@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.51.0.tgz#3cfef313d8bebbf4b2442675a4dd463cef4c8369" + integrity sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.35.1" - "@typescript-eslint/types" "^8.35.1" + "@typescript-eslint/tsconfig-utils" "^8.51.0" + "@typescript-eslint/types" "^8.51.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.35.1": - version "8.35.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz#b19f9be65c8d1059e88a323a1a6567dbfe0a1a4e" - integrity sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg== +"@typescript-eslint/scope-manager@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.51.0.tgz#19b42f65680c21f7b6f40fe9024327f6bb1893c1" + integrity sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA== dependencies: - "@typescript-eslint/types" "8.35.1" - "@typescript-eslint/visitor-keys" "8.35.1" + "@typescript-eslint/types" "8.51.0" + "@typescript-eslint/visitor-keys" "8.51.0" -"@typescript-eslint/tsconfig-utils@8.35.1", "@typescript-eslint/tsconfig-utils@^8.35.1": - version "8.35.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz#c2db8714c181cc0700216c1a2e3cf55719c58006" - integrity sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ== +"@typescript-eslint/tsconfig-utils@8.51.0", "@typescript-eslint/tsconfig-utils@^8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.51.0.tgz#a575e9885e62dbd260fb64474eff1dae6e317515" + integrity sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw== -"@typescript-eslint/type-utils@8.35.1": - version "8.35.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz#4f9a07d6efa0e617a67e1890d28117e68ce154bd" - integrity sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ== +"@typescript-eslint/type-utils@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.51.0.tgz#ec165b0312a6025c2a2a3f39641e46ab4f049564" + integrity sha512-0XVtYzxnobc9K0VU7wRWg1yiUrw4oQzexCG2V2IDxxCxhqBMSMbjB+6o91A+Uc0GWtgjCa3Y8bi7hwI0Tu4n5Q== dependencies: - "@typescript-eslint/typescript-estree" "8.35.1" - "@typescript-eslint/utils" "8.35.1" + "@typescript-eslint/types" "8.51.0" + "@typescript-eslint/typescript-estree" "8.51.0" + "@typescript-eslint/utils" "8.51.0" debug "^4.3.4" - ts-api-utils "^2.1.0" + ts-api-utils "^2.2.0" -"@typescript-eslint/types@8.35.1", "@typescript-eslint/types@^8.0.0", "@typescript-eslint/types@^8.34.1", "@typescript-eslint/types@^8.35.1": - version "8.35.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.35.1.tgz#4344dcf934495bbf25a9f83a06dd9fe2acf15780" - integrity sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ== +"@typescript-eslint/types@8.51.0", "@typescript-eslint/types@^8.0.0", "@typescript-eslint/types@^8.38.0", "@typescript-eslint/types@^8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.51.0.tgz#6996e59d49e92fb893531bdc249f0d92a7bebdbb" + integrity sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag== -"@typescript-eslint/typescript-estree@8.35.1": - version "8.35.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz#b80e85fcb6bfbcbacb3224b1367f6ca3f03e6183" - integrity sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g== +"@typescript-eslint/typescript-estree@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.51.0.tgz#b57f5157d1ac2127bd7c2c9ad8060fa017df4a1a" + integrity sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng== dependencies: - "@typescript-eslint/project-service" "8.35.1" - "@typescript-eslint/tsconfig-utils" "8.35.1" - "@typescript-eslint/types" "8.35.1" - "@typescript-eslint/visitor-keys" "8.35.1" + "@typescript-eslint/project-service" "8.51.0" + "@typescript-eslint/tsconfig-utils" "8.51.0" + "@typescript-eslint/types" "8.51.0" + "@typescript-eslint/visitor-keys" "8.51.0" debug "^4.3.4" - fast-glob "^3.3.2" - is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" - ts-api-utils "^2.1.0" + tinyglobby "^0.2.15" + ts-api-utils "^2.2.0" -"@typescript-eslint/utils@8.35.1", "@typescript-eslint/utils@^8.0.0", "@typescript-eslint/utils@^8.34.1": - version "8.35.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.35.1.tgz#a9a0ceeb81c9d132f3f75537ad2ca7f6ca266523" - integrity sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ== +"@typescript-eslint/utils@8.51.0", "@typescript-eslint/utils@^8.0.0", "@typescript-eslint/utils@^8.38.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.51.0.tgz#b9a071cd210647f860a38873acf9bc5157bea56a" + integrity sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.35.1" - "@typescript-eslint/types" "8.35.1" - "@typescript-eslint/typescript-estree" "8.35.1" + "@typescript-eslint/scope-manager" "8.51.0" + "@typescript-eslint/types" "8.51.0" + "@typescript-eslint/typescript-estree" "8.51.0" -"@typescript-eslint/visitor-keys@8.35.1": - version "8.35.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz#aac78ab2265dd11927bc6af3f9c5a021bbc1670a" - integrity sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw== +"@typescript-eslint/visitor-keys@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.51.0.tgz#d37f5c82b9bece2c8aeb3ba7bb836bbba0f92bb8" + integrity sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg== dependencies: - "@typescript-eslint/types" "8.35.1" + "@typescript-eslint/types" "8.51.0" eslint-visitor-keys "^4.2.1" -"@vitejs/plugin-basic-ssl@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.0.0.tgz#9169bfe748743b8806553e0d1aa78e8227c27b2d" - integrity sha512-gc9Tjg8bUxBVSTzeWT3Njc0Cl3PakHFKdNfABnZWiUgbxqmHDEn7uECv3fHVylxoYgNzAcmU7ZrILz+BwSo3sA== +"@vitejs/plugin-basic-ssl@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz#c70d2a922bc437f154089d7ef0505db4b383eb7b" + integrity sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA== "@yarnpkg/lockfile@1.1.0": version "1.1.0" @@ -1834,6 +2142,14 @@ abbrev@^3.0.0: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-3.0.1.tgz#8ac8b3b5024d31464fe2a5feeea9f4536bf44025" integrity sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg== +accepts@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" + integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== + dependencies: + mime-types "^3.0.0" + negotiator "^1.0.0" + accepts@~1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -1858,18 +2174,18 @@ add-stream@^1.0.0: integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== agent-base@^7.1.0, agent-base@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" - integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== -ajv-formats@3.0.1: +ajv-formats@3.0.1, ajv-formats@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== dependencies: ajv "^8.0.0" -ajv@8.17.1, ajv@^8.0.0: +ajv@8.17.1, ajv@^8.0.0, ajv@^8.17.1: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -1889,32 +2205,45 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +algoliasearch@5.35.0: + version "5.35.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.35.0.tgz#ce12d1d287d6f4a80b9998568f806c92dabba566" + integrity sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg== + dependencies: + "@algolia/abtesting" "1.1.0" + "@algolia/client-abtesting" "5.35.0" + "@algolia/client-analytics" "5.35.0" + "@algolia/client-common" "5.35.0" + "@algolia/client-insights" "5.35.0" + "@algolia/client-personalization" "5.35.0" + "@algolia/client-query-suggestions" "5.35.0" + "@algolia/client-search" "5.35.0" + "@algolia/ingestion" "1.35.0" + "@algolia/monitoring" "1.35.0" + "@algolia/recommend" "5.35.0" + "@algolia/requester-browser-xhr" "5.35.0" + "@algolia/requester-fetch" "5.35.0" + "@algolia/requester-node-http" "5.35.0" + angular-eslint@^20.1.1: - version "20.1.1" - resolved "https://registry.yarnpkg.com/angular-eslint/-/angular-eslint-20.1.1.tgz#d75081c7bd3629bacb3213634f8a932db32cc249" - integrity sha512-sJ/7vdBMmmYGq5054UHfBXCWHABo79bPbNiXVznqBu6mV85RZsT+IBV1JKLHmV4JtfHoNx1ElkSL2hR3ZeJbkQ== + version "20.7.0" + resolved "https://registry.yarnpkg.com/angular-eslint/-/angular-eslint-20.7.0.tgz#b6468b0fd5c0eaa1d45e755550356180d9e1470a" + integrity sha512-BCiTCLO3dr8pGPaM7qLcCruWNcoNNHnLn4DPqE5tHk1TAnTx5TcGy0p/FygharZw5RjWfDHLBjFfpeh4XWLMmQ== dependencies: "@angular-devkit/core" ">= 20.0.0 < 21.0.0" "@angular-devkit/schematics" ">= 20.0.0 < 21.0.0" - "@angular-eslint/builder" "20.1.1" - "@angular-eslint/eslint-plugin" "20.1.1" - "@angular-eslint/eslint-plugin-template" "20.1.1" - "@angular-eslint/schematics" "20.1.1" - "@angular-eslint/template-parser" "20.1.1" + "@angular-eslint/builder" "20.7.0" + "@angular-eslint/eslint-plugin" "20.7.0" + "@angular-eslint/eslint-plugin-template" "20.7.0" + "@angular-eslint/schematics" "20.7.0" + "@angular-eslint/template-parser" "20.7.0" "@typescript-eslint/types" "^8.0.0" "@typescript-eslint/utils" "^8.0.0" -ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - ansi-escapes@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.0.0.tgz#00fc19f491bbb18e1d481b97868204f92109bfe7" - integrity sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw== + version "7.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.2.0.tgz#31b25afa3edd3efc09d98c2fee831d460ff06b49" + integrity sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw== dependencies: environment "^1.0.0" @@ -1924,9 +2253,9 @@ ansi-regex@^5.0.1: integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== ansi-styles@^3.2.1: version "3.2.1" @@ -1943,9 +2272,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: color-convert "^2.0.1" ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== anymatch@~3.1.2: version "3.1.3" @@ -2049,14 +2378,13 @@ async-function@^1.0.0: integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== autoprefixer@^10.4.19: - version "10.4.21" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" - integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== + version "10.4.23" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.23.tgz#c6aa6db8e7376fcd900f9fd79d143ceebad8c4e6" + integrity sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA== dependencies: - browserslist "^4.24.4" - caniuse-lite "^1.0.30001702" - fraction.js "^4.3.7" - normalize-range "^0.1.2" + browserslist "^4.28.1" + caniuse-lite "^1.0.30001760" + fraction.js "^5.3.4" picocolors "^1.1.1" postcss-value-parser "^4.2.0" @@ -2082,13 +2410,18 @@ base64id@2.0.0, base64id@~2.0.0: resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== -beasties@0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/beasties/-/beasties-0.3.4.tgz#a2268bd84ee9b51b0a89d208f768e93b7be5ee63" - integrity sha512-NmzN1zN1cvGccXFyZ73335+ASXwBlVWcUPssiUDIlFdfyatHPRRufjCd5w8oPaQPvVnf9ELklaCGb1gi9FBwIw== +baseline-browser-mapping@^2.9.0: + version "2.9.11" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz#53724708c8db5f97206517ecfe362dbe5181deea" + integrity sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ== + +beasties@0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/beasties/-/beasties-0.3.5.tgz#a52abea4ead105c1aded66b1a01a74e96585dc81" + integrity sha512-NaWu+f4YrJxEttJSm16AzMIFtVldCvaJ68b1L098KpqXmxt9xOLtKoLkKxb8ekhOrLqEJAbvT6n6SEvB/sac7A== dependencies: - css-select "^5.1.0" - css-what "^6.1.0" + css-select "^6.0.0" + css-what "^7.0.0" dom-serializer "^2.0.0" domhandler "^5.0.3" htmlparser2 "^10.0.0" @@ -2102,22 +2435,37 @@ binary-extensions@^2.0.0: integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== body-parser@^1.19.0: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== dependencies: - bytes "3.1.2" + bytes "~3.1.2" content-type "~1.0.5" debug "2.6.9" depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" type-is "~1.6.18" - unpipe "1.0.0" + unpipe "~1.0.0" + +body-parser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.1.tgz#6df606b0eb0a6e3f783dde91dde182c24c82438c" + integrity sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw== + dependencies: + bytes "^3.1.2" + content-type "^1.0.5" + debug "^4.4.3" + http-errors "^2.0.0" + iconv-lite "^0.7.0" + on-finished "^2.4.1" + qs "^6.14.0" + raw-body "^3.0.1" + type-is "^2.0.1" boolbase@^1.0.0: version "1.0.0" @@ -2146,22 +2494,23 @@ braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.24.4: - version "4.25.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.1.tgz#ba9e8e6f298a1d86f829c9b975e07948967bb111" - integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw== +browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.28.1: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== dependencies: - caniuse-lite "^1.0.30001726" - electron-to-chromium "^1.5.173" - node-releases "^2.0.19" - update-browserslist-db "^1.1.3" + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -bytes@3.1.2: +bytes@^3.1.2, bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== @@ -2229,10 +2578,10 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001726: - version "1.0.30001726" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz#a15bd87d5a4bf01f6b6f70ae7c97fdfd28b5ae47" - integrity sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw== +caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760: + version "1.0.30001762" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz#e4dbfeda63d33258cdde93e53af2023a13ba27d4" + integrity sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw== chalk@^2.4.2: version "2.4.2" @@ -2251,15 +2600,15 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.3.0, chalk@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" - integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== +chalk@^5.3.0: + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chardet@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8" + integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== chokidar@^3.5.1: version "3.6.0" @@ -2313,6 +2662,14 @@ cli-truncate@^4.0.0: slice-ansi "^5.0.0" string-width "^7.0.0" +cli-truncate@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-5.1.1.tgz#455476face9904d94b7d11e98d9adbca15292ea5" + integrity sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A== + dependencies: + slice-ansi "^7.1.0" + string-width "^8.0.0" + cli-width@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" @@ -2327,15 +2684,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - cliui@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-9.0.1.tgz#6f7890f386f6f1f79953adc1f78dec46fcc2d291" @@ -2374,10 +2722,10 @@ colorette@^2.0.20: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -commander@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.0.tgz#f244fc74a92343514e56229f16ef5c5e22ced5e9" - integrity sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA== +commander@^14.0.2: + version "14.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.2.tgz#b71fd37fe4069e4c3c7c13925252ada4eba14e8e" + integrity sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ== compare-func@^2.0.0: version "2.0.0" @@ -2388,9 +2736,9 @@ compare-func@^2.0.0: dot-prop "^5.1.0" complex.js@^2.2.5: - version "2.4.2" - resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.4.2.tgz#76f260a9e7e232d8ad26348484a9b128c13fcc9a" - integrity sha512-qtx7HRhPGSCBtGiST4/WGHuW+zeaND/6Ld+db6PbrulIB1i2Ev/2UPiqcmpQNPSyfBKraC0EOvOKCB5dGZKt3g== + version "2.4.3" + resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.4.3.tgz#72ee9c303a9b89ebcfeca0d39f74927d38721fce" + integrity sha512-UrQVSUur14tNX6tiP4y8T4w4FeJAX3bi2cIv0pu/DTLFNxoq7z2Yh83Vfzztj6Px3X/lubqQ9IrPp7Bpn6p4MQ== concat-map@0.0.1: version "0.0.1" @@ -2417,7 +2765,12 @@ connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" -content-type@~1.0.5: +content-disposition@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.1.tgz#a8b7bbeb2904befdfb6787e5c0c086959f605f9b" + integrity sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q== + +content-type@^1.0.5, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -2595,7 +2948,12 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie@~0.7.2: +cookie-signature@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" + integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== + +cookie@^0.7.1, cookie@~0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== @@ -2605,7 +2963,7 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cors@~2.8.5: +cors@^2.8.5, cors@~2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== @@ -2613,7 +2971,7 @@ cors@~2.8.5: object-assign "^4" vary "^1" -cross-spawn@^7.0.6: +cross-spawn@^7.0.5, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -2622,21 +2980,21 @@ cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" -css-select@^5.1.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e" - integrity sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw== +css-select@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-6.0.0.tgz#7e63f09881ad118084091048ed543786dad96644" + integrity sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw== dependencies: boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" + css-what "^7.0.0" + domhandler "^5.0.3" + domutils "^3.2.2" + nth-check "^2.1.1" -css-what@^6.1.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" - integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== +css-what@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-7.0.0.tgz#5796fbebd43571d73c60ba0dd7a6e75dd0d22fe4" + integrity sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ== custom-event@~1.0.0: version "1.0.1" @@ -2692,10 +3050,10 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.6, debug@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3, debug@~4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" @@ -2706,13 +3064,6 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -2727,9 +3078,9 @@ decamelize@^1.1.0: integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js@^10.4.3: - version "10.5.0" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" - integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== + version "10.6.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" + integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== deep-is@^0.1.3: version "0.1.4" @@ -2754,12 +3105,12 @@ define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -depd@2.0.0: +depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -destroy@1.2.0: +destroy@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== @@ -2774,10 +3125,10 @@ detect-libc@^1.0.3: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== -detect-libc@^2.0.1, detect-libc@^2.0.3, detect-libc@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" - integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== +detect-libc@^2.0.1, detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== detect-newline@^3.1.0: version "3.1.0" @@ -2827,7 +3178,7 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -domutils@^3.0.1, domutils@^3.2.1: +domutils@^3.2.1, domutils@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== @@ -2870,15 +3221,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.173: - version "1.5.178" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.178.tgz#6fc4d69eb5275bb13068931448fd822458901fbb" - integrity sha512-wObbz/ar3Bc6e4X5vf0iO8xTN8YAjN/tgiAOJLr7yjYFtP9wAjq8Mb5h0yn6kResir+VYx2DXBj9NNobs0ETSA== +electron-to-chromium@^1.5.263: + version "1.5.267" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" + integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw== emoji-regex@^10.3.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" - integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== + version "10.6.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d" + integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A== emoji-regex@^8.0.0: version "8.0.0" @@ -2890,6 +3241,11 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +encodeurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -2908,9 +3264,9 @@ engine.io-parser@~5.2.1: integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== engine.io@~6.6.0: - version "6.6.4" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.4.tgz#0a89a3e6b6c1d4b0c2a2a637495e7c149ec8d8ee" - integrity sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g== + version "6.6.5" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.5.tgz#a009522f5d5628109781b46722014349859269d2" + integrity sha512-2RZdgEbXmp5+dVbRm0P7HQUImZpICccJy7rN7Tv+SFa55pH+lxnuw6/K1ZxxBfHoYpSkHLAO92oa8O4SwFXA2A== dependencies: "@types/cors" "^2.8.12" "@types/node" ">=10.0.0" @@ -2918,14 +3274,14 @@ engine.io@~6.6.0: base64id "2.0.0" cookie "~0.7.2" cors "~2.8.5" - debug "~4.3.1" + debug "~4.4.1" engine.io-parser "~5.2.1" - ws "~8.17.1" + ws "~8.18.3" -enhanced-resolve@^5.18.1: - version "5.18.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz#7903c5b32ffd4b2143eeb4b92472bd68effd5464" - integrity sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ== +enhanced-resolve@^5.18.3: + version "5.18.4" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz#c22d33055f3952035ce6a144ce092447c525f828" + integrity sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -2966,16 +3322,16 @@ err-code@^2.0.2: integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== dependencies: is-arrayish "^0.2.1" es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: - version "1.24.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" - integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== + version "1.24.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.1.tgz#f0c131ed5ea1bb2411134a8dd94def09c46c7899" + integrity sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw== dependencies: array-buffer-byte-length "^1.0.2" arraybuffer.prototype.slice "^1.0.4" @@ -3075,43 +3431,76 @@ es-to-primitive@^1.3.0: is-date-object "^1.0.5" is-symbol "^1.0.4" -esbuild@0.25.5, esbuild@^0.25.0: - version "0.25.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.5.tgz#71075054993fdfae76c66586f9b9c1f8d7edd430" - integrity sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ== +esbuild@0.25.9: + version "0.25.9" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.9.tgz#15ab8e39ae6cdc64c24ff8a2c0aef5b3fd9fa976" + integrity sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g== optionalDependencies: - "@esbuild/aix-ppc64" "0.25.5" - "@esbuild/android-arm" "0.25.5" - "@esbuild/android-arm64" "0.25.5" - "@esbuild/android-x64" "0.25.5" - "@esbuild/darwin-arm64" "0.25.5" - "@esbuild/darwin-x64" "0.25.5" - "@esbuild/freebsd-arm64" "0.25.5" - "@esbuild/freebsd-x64" "0.25.5" - "@esbuild/linux-arm" "0.25.5" - "@esbuild/linux-arm64" "0.25.5" - "@esbuild/linux-ia32" "0.25.5" - "@esbuild/linux-loong64" "0.25.5" - "@esbuild/linux-mips64el" "0.25.5" - "@esbuild/linux-ppc64" "0.25.5" - "@esbuild/linux-riscv64" "0.25.5" - "@esbuild/linux-s390x" "0.25.5" - "@esbuild/linux-x64" "0.25.5" - "@esbuild/netbsd-arm64" "0.25.5" - "@esbuild/netbsd-x64" "0.25.5" - "@esbuild/openbsd-arm64" "0.25.5" - "@esbuild/openbsd-x64" "0.25.5" - "@esbuild/sunos-x64" "0.25.5" - "@esbuild/win32-arm64" "0.25.5" - "@esbuild/win32-ia32" "0.25.5" - "@esbuild/win32-x64" "0.25.5" + "@esbuild/aix-ppc64" "0.25.9" + "@esbuild/android-arm" "0.25.9" + "@esbuild/android-arm64" "0.25.9" + "@esbuild/android-x64" "0.25.9" + "@esbuild/darwin-arm64" "0.25.9" + "@esbuild/darwin-x64" "0.25.9" + "@esbuild/freebsd-arm64" "0.25.9" + "@esbuild/freebsd-x64" "0.25.9" + "@esbuild/linux-arm" "0.25.9" + "@esbuild/linux-arm64" "0.25.9" + "@esbuild/linux-ia32" "0.25.9" + "@esbuild/linux-loong64" "0.25.9" + "@esbuild/linux-mips64el" "0.25.9" + "@esbuild/linux-ppc64" "0.25.9" + "@esbuild/linux-riscv64" "0.25.9" + "@esbuild/linux-s390x" "0.25.9" + "@esbuild/linux-x64" "0.25.9" + "@esbuild/netbsd-arm64" "0.25.9" + "@esbuild/netbsd-x64" "0.25.9" + "@esbuild/openbsd-arm64" "0.25.9" + "@esbuild/openbsd-x64" "0.25.9" + "@esbuild/openharmony-arm64" "0.25.9" + "@esbuild/sunos-x64" "0.25.9" + "@esbuild/win32-arm64" "0.25.9" + "@esbuild/win32-ia32" "0.25.9" + "@esbuild/win32-x64" "0.25.9" + +esbuild@^0.25.0: + version "0.25.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" + integrity sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.12" + "@esbuild/android-arm" "0.25.12" + "@esbuild/android-arm64" "0.25.12" + "@esbuild/android-x64" "0.25.12" + "@esbuild/darwin-arm64" "0.25.12" + "@esbuild/darwin-x64" "0.25.12" + "@esbuild/freebsd-arm64" "0.25.12" + "@esbuild/freebsd-x64" "0.25.12" + "@esbuild/linux-arm" "0.25.12" + "@esbuild/linux-arm64" "0.25.12" + "@esbuild/linux-ia32" "0.25.12" + "@esbuild/linux-loong64" "0.25.12" + "@esbuild/linux-mips64el" "0.25.12" + "@esbuild/linux-ppc64" "0.25.12" + "@esbuild/linux-riscv64" "0.25.12" + "@esbuild/linux-s390x" "0.25.12" + "@esbuild/linux-x64" "0.25.12" + "@esbuild/netbsd-arm64" "0.25.12" + "@esbuild/netbsd-x64" "0.25.12" + "@esbuild/openbsd-arm64" "0.25.12" + "@esbuild/openbsd-x64" "0.25.12" + "@esbuild/openharmony-arm64" "0.25.12" + "@esbuild/sunos-x64" "0.25.12" + "@esbuild/win32-arm64" "0.25.12" + "@esbuild/win32-ia32" "0.25.12" + "@esbuild/win32-x64" "0.25.12" escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== @@ -3132,9 +3521,9 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-prettier@^10.1.5: - version "10.1.5" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz#00c18d7225043b6fbce6a665697377998d453782" - integrity sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw== + version "10.1.8" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" + integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== eslint-import-resolver-node@^0.3.9: version "0.3.9" @@ -3178,20 +3567,20 @@ eslint-plugin-import@^2.31.0: tsconfig-paths "^3.15.0" eslint-plugin-perfectionist@^4.15.0: - version "4.15.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.15.0.tgz#320029162b0ec439af522d5b146903f0e47bfbd4" - integrity sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw== + version "4.15.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.15.1.tgz#d38e80b2442d83b0a6482d2079cfd63dd53266d9" + integrity sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q== dependencies: - "@typescript-eslint/types" "^8.34.1" - "@typescript-eslint/utils" "^8.34.1" + "@typescript-eslint/types" "^8.38.0" + "@typescript-eslint/utils" "^8.38.0" natural-orderby "^5.0.0" eslint-plugin-unused-imports@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz#62ddc7446ccbf9aa7b6f1f0b00a980423cda2738" - integrity sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.3.0.tgz#69ff9c4f83f02f7789808bbbab77636cb742af50" + integrity sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA== -eslint-scope@^8.0.2, eslint-scope@^8.4.0: +eslint-scope@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== @@ -3199,6 +3588,14 @@ eslint-scope@^8.0.2, eslint-scope@^8.4.0: esrecurse "^4.3.0" estraverse "^5.2.0" +eslint-scope@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-9.0.0.tgz#b4eeba2278f9cfc440c7a126da58795b666909c6" + integrity sha512-+Yh0LeQKq+mW/tQArNj67tljR3L1HajDTQPuZOEwC00oBdoIDQrr89yBgjAlzAwRrY/5zDkM3v99iGHwz9y0dw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" @@ -3210,23 +3607,22 @@ eslint-visitor-keys@^4.2.1: integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint@^9.28.0: - version "9.30.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.30.1.tgz#d4107b39964412acd9b5c0744f1c6df514fa1211" - integrity sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ== + version "9.39.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.2.tgz#cb60e6d16ab234c0f8369a3fe7cc87967faf4b6c" + integrity sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.21.0" - "@eslint/config-helpers" "^0.3.0" - "@eslint/core" "^0.14.0" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.30.1" - "@eslint/plugin-kit" "^0.3.1" + "@eslint/js" "9.39.2" + "@eslint/plugin-kit" "^0.4.1" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" - "@types/json-schema" "^7.0.15" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.6" @@ -3260,9 +3656,9 @@ espree@^10.0.1, espree@^10.4.0: eslint-visitor-keys "^4.2.1" esquery@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + version "1.7.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== dependencies: estraverse "^5.1.0" @@ -3283,6 +3679,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -3293,41 +3694,72 @@ eventemitter3@^5.0.1: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== +eventsource-parser@^3.0.0, eventsource-parser@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.6.tgz#292e165e34cacbc936c3c92719ef326d4aeb4e90" + integrity sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg== + +eventsource@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-3.0.7.tgz#1157622e2f5377bb6aef2114372728ba0c156989" + integrity sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA== + dependencies: + eventsource-parser "^3.0.1" + exponential-backoff@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91" - integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6" + integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA== + +express-rate-limit@^7.5.0: + version "7.5.1" + resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.1.tgz#8c3a42f69209a3a1c969890070ece9e20a879dec" + integrity sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw== + +express@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/express/-/express-5.2.1.tgz#8f21d15b6d327f92b4794ecf8cb08a72f956ac04" + integrity sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw== + dependencies: + accepts "^2.0.0" + body-parser "^2.2.1" + content-disposition "^1.0.0" + content-type "^1.0.5" + cookie "^0.7.1" + cookie-signature "^1.2.1" + debug "^4.4.0" + depd "^2.0.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + finalhandler "^2.1.0" + fresh "^2.0.0" + http-errors "^2.0.0" + merge-descriptors "^2.0.0" + mime-types "^3.0.0" + on-finished "^2.4.1" + once "^1.4.0" + parseurl "^1.3.3" + proxy-addr "^2.0.7" + qs "^6.14.0" + range-parser "^1.2.1" + router "^2.2.0" + send "^1.1.0" + serve-static "^2.2.0" + statuses "^2.0.1" + type-is "^2.0.1" + vary "^1.1.2" extend@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -3339,21 +3771,14 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-uri@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" - integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== -fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== - dependencies: - reusify "^1.0.4" - -fdir@^6.4.4: - version "6.4.6" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" - integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== +fdir@^6.4.4, fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== figures@^3.1.0: version "3.2.0" @@ -3389,6 +3814,18 @@ finalhandler@1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +finalhandler@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099" + integrity sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA== + dependencies: + debug "^4.4.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + on-finished "^2.4.1" + parseurl "^1.3.3" + statuses "^2.0.1" + find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -3433,9 +3870,9 @@ flatted@^3.2.7, flatted@^3.2.9: integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== follow-redirects@^1.0.0: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== for-each@^0.3.3, for-each@^0.3.5: version "0.3.5" @@ -3452,15 +3889,20 @@ foreground-child@^3.1.0: cross-spawn "^7.0.6" signal-exit "^4.0.1" -fraction.js@^4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-5.2.2.tgz#c1295bc47307c5f93f75790859645fd74edaa195" - integrity sha512-uXBDv5knpYmv/2gLzWQ5mBHGBRk9wcKTeWu6GLTUEQfjCxO09uM/mHDrojlL+Q1mVGIIFo149Gba7od1XPgSzQ== +fraction.js@^5.2.1, fraction.js@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-5.3.4.tgz#8c0fcc6a9908262df4ed197427bdeef563e0699a" + integrity sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ== + +fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" + integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== fs-extra@^8.1.0: version "8.1.0" @@ -3517,6 +3959,11 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +generator-function@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" + integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -3527,10 +3974,10 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-east-asian-width@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389" - integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== +get-east-asian-width@^1.0.0, get-east-asian-width@^1.3.0, get-east-asian-width@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz#9bc4caa131702b4b61729cb7e42735bc550c9ee6" + integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q== get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: version "1.3.0" @@ -3558,7 +4005,7 @@ get-pkg-repo@^4.0.0: through2 "^2.0.0" yargs "^16.2.0" -get-proto@^1.0.0, get-proto@^1.0.1: +get-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== @@ -3609,13 +4056,6 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" @@ -3623,15 +4063,22 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@^10.2.2: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== dependencies: foreground-child "^3.1.0" jackspeak "^3.1.2" @@ -3652,11 +4099,6 @@ glob@^7.1.3, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^14.0.0: version "14.0.0" resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" @@ -3680,11 +4122,6 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - handlebars@^4.7.7: version "4.7.8" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" @@ -3769,6 +4206,13 @@ hosted-git-info@^8.0.0: dependencies: lru-cache "^10.0.1" +hosted-git-info@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-9.0.2.tgz#b38c8a802b274e275eeeccf9f4a1b1a0a8557ada" + integrity sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg== + dependencies: + lru-cache "^11.1.0" + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -3789,16 +4233,16 @@ http-cache-semantics@^4.1.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== +http-errors@^2.0.0, http-errors@^2.0.1, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" http-proxy-agent@^7.0.0: version "7.0.2" @@ -3830,13 +4274,6 @@ husky@^9.1.7: resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -3844,12 +4281,26 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ignore-walk@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-7.0.0.tgz#8350e475cf4375969c12eb49618b3fd9cca6704f" - integrity sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ== +iconv-lite@^0.7.0, iconv-lite@~0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.1.tgz#d4af1d2092f2bb05aab6296e5e7cd286d2f15432" + integrity sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw== dependencies: - minimatch "^9.0.0" + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@~0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-8.0.0.tgz#380c173badc3a18c57ff33440753f0052f572b14" + integrity sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A== + dependencies: + minimatch "^10.0.3" ignore@7.0.5, ignore@^7.0.0: version "7.0.5" @@ -3862,9 +4313,9 @@ ignore@^5.2.0: integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immutable@^5.0.2: - version "5.1.3" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.3.tgz#e6486694c8b76c37c063cca92399fa64098634d4" - integrity sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg== + version "5.1.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.4.tgz#e3f8c1fe7b567d56cf26698f31918c241dae8c1f" + integrity sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA== import-fresh@^3.2.1: version "3.3.1" @@ -3892,7 +4343,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3916,13 +4367,15 @@ internal-slot@^1.1.0: hasown "^2.0.2" side-channel "^1.1.0" -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" +ip-address@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" + integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: version "3.0.5" @@ -4023,19 +4476,20 @@ is-fullwidth-code-point@^4.0.0: integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== is-fullwidth-code-point@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" - integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== + version "5.1.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz#046b2a6d4f6b156b2233d3207d4b5a9783999b98" + integrity sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ== dependencies: - get-east-asian-width "^1.0.0" + get-east-asian-width "^1.3.1" is-generator-function@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" - integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" + integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== dependencies: - call-bound "^1.0.3" - get-proto "^1.0.0" + call-bound "^1.0.4" + generator-function "^2.0.0" + get-proto "^1.0.1" has-tostringtag "^1.0.2" safe-regex-test "^1.1.0" @@ -4084,6 +4538,11 @@ is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== +is-promise@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + is-regex@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" @@ -4238,9 +4697,9 @@ istanbul-lib-source-maps@^4.0.1: source-map "^0.6.1" istanbul-reports@^3.0.5: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -4260,37 +4719,37 @@ jasmine-core@^4.1.0: integrity sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ== jasmine-core@^5.5.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-5.8.0.tgz#8a68b7b209b06c2247d67490bca8604c2fa498cd" - integrity sha512-Q9dqmpUAfptwyueW3+HqBOkSuYd9I/clZSSfN97wXE/Nr2ROFNCwIBEC1F6kb3QXS9Fcz0LjFYSDQT+BiwjuhA== + version "5.13.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-5.13.0.tgz#3ff5765a93a23bac0728ae87ad82ce0569a5f7a8" + integrity sha512-vsYjfh7lyqvZX5QgqKc4YH8phs7g96Z8bsdIFNEU3VqXhlHaq+vov/Fgn/sr6MiUczdZkyXRC3TX369Ll4Nzbw== javascript-natural-sort@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== -jiti@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560" - integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== +jiti@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + +jose@^6.1.1: + version "6.1.3" + resolved "https://registry.yarnpkg.com/jose/-/jose-6.1.3.tgz#8453d7be88af7bb7d64a0481d6a35a0145ba3ea5" + integrity sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ== js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - jsesc@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -4446,78 +4905,79 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lightningcss-darwin-arm64@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz#3d47ce5e221b9567c703950edf2529ca4a3700ae" - integrity sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ== +lightningcss-android-arm64@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz#6966b7024d39c94994008b548b71ab360eb3a307" + integrity sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A== -lightningcss-darwin-x64@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz#e81105d3fd6330860c15fe860f64d39cff5fbd22" - integrity sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA== +lightningcss-darwin-arm64@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz#a5fa946d27c029e48c7ff929e6e724a7de46eb2c" + integrity sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA== -lightningcss-freebsd-x64@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz#a0e732031083ff9d625c5db021d09eb085af8be4" - integrity sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig== +lightningcss-darwin-x64@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz#5ce87e9cd7c4f2dcc1b713f5e8ee185c88d9b7cd" + integrity sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ== -lightningcss-linux-arm-gnueabihf@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz#1f5ecca6095528ddb649f9304ba2560c72474908" - integrity sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q== +lightningcss-freebsd-x64@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz#6ae1d5e773c97961df5cff57b851807ef33692a5" + integrity sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA== -lightningcss-linux-arm64-gnu@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz#eee7799726103bffff1e88993df726f6911ec009" - integrity sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw== +lightningcss-linux-arm-gnueabihf@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz#62c489610c0424151a6121fa99d77731536cdaeb" + integrity sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA== -lightningcss-linux-arm64-musl@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz#f2e4b53f42892feeef8f620cbb889f7c064a7dfe" - integrity sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ== +lightningcss-linux-arm64-gnu@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz#2a3661b56fe95a0cafae90be026fe0590d089298" + integrity sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A== -lightningcss-linux-x64-gnu@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz#2fc7096224bc000ebb97eea94aea248c5b0eb157" - integrity sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw== +lightningcss-linux-arm64-musl@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz#d7ddd6b26959245e026bc1ad9eb6aa983aa90e6b" + integrity sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA== -lightningcss-linux-x64-musl@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz#66dca2b159fd819ea832c44895d07e5b31d75f26" - integrity sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ== +lightningcss-linux-x64-gnu@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz#5a89814c8e63213a5965c3d166dff83c36152b1a" + integrity sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w== -lightningcss-win32-arm64-msvc@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz#7d8110a19d7c2d22bfdf2f2bb8be68e7d1b69039" - integrity sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA== +lightningcss-linux-x64-musl@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz#808c2e91ce0bf5d0af0e867c6152e5378c049728" + integrity sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA== -lightningcss-win32-x64-msvc@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz#fd7dd008ea98494b85d24b4bea016793f2e0e352" - integrity sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg== +lightningcss-win32-arm64-msvc@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz#ab4a8a8a2e6a82a4531e8bbb6bf0ff161ee6625a" + integrity sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ== -lightningcss@1.30.1: - version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.1.tgz#78e979c2d595bfcb90d2a8c0eb632fe6c5bfed5d" - integrity sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg== +lightningcss-win32-x64-msvc@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz#f01f382c8e0a27e1c018b0bee316d210eac43b6e" + integrity sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw== + +lightningcss@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.2.tgz#4ade295f25d140f487d37256f4cd40dc607696d0" + integrity sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ== dependencies: detect-libc "^2.0.3" optionalDependencies: - lightningcss-darwin-arm64 "1.30.1" - lightningcss-darwin-x64 "1.30.1" - lightningcss-freebsd-x64 "1.30.1" - lightningcss-linux-arm-gnueabihf "1.30.1" - lightningcss-linux-arm64-gnu "1.30.1" - lightningcss-linux-arm64-musl "1.30.1" - lightningcss-linux-x64-gnu "1.30.1" - lightningcss-linux-x64-musl "1.30.1" - lightningcss-win32-arm64-msvc "1.30.1" - lightningcss-win32-x64-msvc "1.30.1" - -lilconfig@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" - integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + lightningcss-android-arm64 "1.30.2" + lightningcss-darwin-arm64 "1.30.2" + lightningcss-darwin-x64 "1.30.2" + lightningcss-freebsd-x64 "1.30.2" + lightningcss-linux-arm-gnueabihf "1.30.2" + lightningcss-linux-arm64-gnu "1.30.2" + lightningcss-linux-arm64-musl "1.30.2" + lightningcss-linux-x64-gnu "1.30.2" + lightningcss-linux-x64-musl "1.30.2" + lightningcss-win32-arm64-msvc "1.30.2" + lightningcss-win32-x64-msvc "1.30.2" lines-and-columns@^1.1.6: version "1.2.4" @@ -4525,25 +4985,22 @@ lines-and-columns@^1.1.6: integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lint-staged@^16.1.2: - version "16.1.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.1.2.tgz#8cb84daa844f39c7a9790dd2c0caa327125ef059" - integrity sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q== + version "16.2.7" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.2.7.tgz#c4a635960c17b52fe774f1f40aee8ce1bd86531f" + integrity sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow== dependencies: - chalk "^5.4.1" - commander "^14.0.0" - debug "^4.4.1" - lilconfig "^3.1.3" - listr2 "^8.3.3" + commander "^14.0.2" + listr2 "^9.0.5" micromatch "^4.0.8" - nano-spawn "^1.0.2" + nano-spawn "^2.0.0" pidtree "^0.6.0" string-argv "^0.3.2" - yaml "^2.8.0" + yaml "^2.8.1" -listr2@8.3.3, listr2@^8.3.3: - version "8.3.3" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.3.3.tgz#815fc8f738260ff220981bf9e866b3e11e8121bf" - integrity sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ== +listr2@9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.1.tgz#3cad12d81d998f8024621d9b35c969dba5da4103" + integrity sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g== dependencies: cli-truncate "^4.0.0" colorette "^2.0.20" @@ -4552,10 +5009,22 @@ listr2@8.3.3, listr2@^8.3.3: rfdc "^1.4.1" wrap-ansi "^9.0.0" -lmdb@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-3.3.0.tgz#85149c8178a3fa57a9230bd1adf9fd96ceb9125f" - integrity sha512-MgJocUI6QEiSXQBFWLeyo1R7eQj8Rke5dlPxX0KFwli8/bsCxpM/KbXO5y0qmV/5llQ3wpneDWcTYxa+4vn8iQ== +listr2@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.5.tgz#92df7c4416a6da630eb9ef46da469b70de97b316" + integrity sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g== + dependencies: + cli-truncate "^5.0.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^6.1.0" + rfdc "^1.4.1" + wrap-ansi "^9.0.0" + +lmdb@3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-3.4.2.tgz#8d90d12ec9a575052d30262e69b0a02a3d103ceb" + integrity sha512-nwVGUfTBUwJKXd6lRV8pFNfnrCC1+l49ESJRM19t/tFb/97QfJEixe5DYRvug5JO7DSFKoKaVy7oGMt5rVqZvg== dependencies: msgpackr "^1.11.2" node-addon-api "^6.1.0" @@ -4563,13 +5032,13 @@ lmdb@3.3.0: ordered-binary "^1.5.3" weak-lru-cache "^1.2.2" optionalDependencies: - "@lmdb/lmdb-darwin-arm64" "3.3.0" - "@lmdb/lmdb-darwin-x64" "3.3.0" - "@lmdb/lmdb-linux-arm" "3.3.0" - "@lmdb/lmdb-linux-arm64" "3.3.0" - "@lmdb/lmdb-linux-x64" "3.3.0" - "@lmdb/lmdb-win32-arm64" "3.3.0" - "@lmdb/lmdb-win32-x64" "3.3.0" + "@lmdb/lmdb-darwin-arm64" "3.4.2" + "@lmdb/lmdb-darwin-x64" "3.4.2" + "@lmdb/lmdb-linux-arm" "3.4.2" + "@lmdb/lmdb-linux-arm64" "3.4.2" + "@lmdb/lmdb-linux-x64" "3.4.2" + "@lmdb/lmdb-win32-arm64" "3.4.2" + "@lmdb/lmdb-win32-x64" "3.4.2" load-json-file@^4.0.0: version "4.0.0" @@ -4661,6 +5130,11 @@ lru-cache@^10.0.1, lru-cache@^10.2.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== +lru-cache@^11.1.0: + version "11.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.4.tgz#ecb523ebb0e6f4d837c807ad1abaea8e0619770d" + integrity sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4675,13 +5149,20 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -magic-string@0.30.17, magic-string@^0.30.17: +magic-string@0.30.17: version "0.30.17" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" +magic-string@^0.30.21: + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -4689,7 +5170,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-fetch-happen@^14.0.0, make-fetch-happen@^14.0.1, make-fetch-happen@^14.0.2, make-fetch-happen@^14.0.3: +make-fetch-happen@^14.0.0, make-fetch-happen@^14.0.2, make-fetch-happen@^14.0.3: version "14.0.3" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz#d74c3ecb0028f08ab604011e0bc6baed483fcdcd" integrity sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ== @@ -4722,9 +5203,9 @@ math-intrinsics@^1.1.0: integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== mathjs@^14.0.1: - version "14.5.2" - resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-14.5.2.tgz#0f0aa8e7f11791aa3e26feff8d431b5d70c758e6" - integrity sha512-51U6hp7j4M4Rj+l+q2KbmXAV9EhQVQzUdw1wE67RnUkKKq5ibxdrl9Ky2YkSUEIc2+VU8/IsThZNu6QSHUoyTA== + version "14.9.1" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-14.9.1.tgz#cba4403b1bef0d0302a2c814ae6b2b7763a526c8" + integrity sha512-xhqv8Xjf+caWG3WlaPekg4v8QFOR3D5+8ycfcjMcPcnCNDgAONQLaLfyGgrggJrcHx2yUGCpACRpiD4GmXwX+Q== dependencies: "@babel/runtime" "^7.26.10" complex.js "^2.2.5" @@ -4741,6 +5222,11 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== +media-typer@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561" + integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== + meow@^8.0.0: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -4758,10 +5244,10 @@ meow@^8.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +merge-descriptors@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808" + integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== micromatch@^4.0.5, micromatch@^4.0.8: version "4.0.8" @@ -4776,6 +5262,18 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-types@^3.0.0, mime-types@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + dependencies: + mime-db "^1.54.0" + mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -4798,6 +5296,13 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +minimatch@^10.0.3: + version "10.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55" + integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" + minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -4805,7 +5310,7 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.0, minimatch@^9.0.4, minimatch@^9.0.5: +minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -4890,10 +5395,10 @@ minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -minizlib@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.2.tgz#f33d638eb279f664439aa38dc5f91607468cb574" - integrity sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA== +minizlib@^3.0.1, minizlib@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" + integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== dependencies: minipass "^7.1.2" @@ -4909,11 +5414,6 @@ mkdirp@^1.0.3: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -4954,26 +5454,21 @@ msgpackr-extract@^3.0.2: "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.3" msgpackr@^1.11.2: - version "1.11.4" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.11.4.tgz#14703caead8ee0c2e7c89417de5a3ec94adf5d3e" - integrity sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg== + version "1.11.8" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.11.8.tgz#8283c79eb6e5d488f6fb3fac4996006baa390614" + integrity sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA== optionalDependencies: msgpackr-extract "^3.0.2" -mute-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - mute-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== -nano-spawn@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nano-spawn/-/nano-spawn-1.0.2.tgz#9853795681f0e96ef6f39104c2e4347b6ba79bf6" - integrity sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg== +nano-spawn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nano-spawn/-/nano-spawn-2.0.0.tgz#f1250434c09ae18870d4f729fc54b406cf85a3e1" + integrity sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw== nanoid@^3.3.11: version "3.3.11" @@ -5023,9 +5518,9 @@ node-gyp-build-optional-packages@5.2.2: detect-libc "^2.0.1" node-gyp@^11.0.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-11.2.0.tgz#fe2ee7f0511424d6ad70f7a0c88d7346f2fc6a6e" - integrity sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA== + version "11.5.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-11.5.0.tgz#82661b5f40647a7361efe918e3cea76d297fcc56" + integrity sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ== dependencies: env-paths "^2.2.0" exponential-backoff "^3.1.1" @@ -5038,10 +5533,10 @@ node-gyp@^11.0.0: tinyglobby "^0.2.12" which "^5.0.0" -node-releases@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== nopt@^8.0.0: version "8.1.0" @@ -5075,11 +5570,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - npm-bundled@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-4.0.0.tgz#f5b983f053fe7c61566cf07241fab2d4e9d513d3" @@ -5088,9 +5578,9 @@ npm-bundled@^4.0.0: npm-normalize-package-bin "^4.0.0" npm-install-checks@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-7.1.1.tgz#e9d679fc8a1944c75cdcc96478a22f9d0f763632" - integrity sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg== + version "7.1.2" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-7.1.2.tgz#e338d333930ee18e0fb0be6bd8b67af98be3d2fa" + integrity sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ== dependencies: semver "^7.1.1" @@ -5099,7 +5589,17 @@ npm-normalize-package-bin@^4.0.0: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1" integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== -npm-package-arg@12.0.2, npm-package-arg@^12.0.0: +npm-package-arg@13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-13.0.0.tgz#be6fd7e60c6fd605b85f570e88cace45e2416c8b" + integrity sha512-+t2etZAGcB7TbbLHfDwooV9ppB2LhhcT6A+L9cahsf9mEUAoQ6CktLEVvEnpD0N5CkX7zJqnPGaFtoQDy9EkHQ== + dependencies: + hosted-git-info "^9.0.0" + proc-log "^5.0.0" + semver "^7.3.5" + validate-npm-package-name "^6.0.0" + +npm-package-arg@^12.0.0: version "12.0.2" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-12.0.2.tgz#3b1e04ebe651cc45028e298664e8c15ce9c0ca40" integrity sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA== @@ -5110,13 +5610,14 @@ npm-package-arg@12.0.2, npm-package-arg@^12.0.0: validate-npm-package-name "^6.0.0" npm-packlist@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.0.tgz#35634f0a90f84a811ebdf565eb78d2b36252888c" - integrity sha512-rht9U6nS8WOBDc53eipZNPo5qkAV4X2rhKE2Oj1DYUQ3DieXfj0mKkVmjnf3iuNdtMd8WfLdi2L6ASkD/8a+Kg== + version "10.0.3" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.3.tgz#e22c039357faf81a75d1b0cdf53dd113f2bed9c7" + integrity sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg== dependencies: - ignore-walk "^7.0.0" + ignore-walk "^8.0.0" + proc-log "^6.0.0" -npm-pick-manifest@10.0.0, npm-pick-manifest@^10.0.0: +npm-pick-manifest@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz#6cc120c6473ceea56dfead500f00735b2b892851" integrity sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ== @@ -5140,7 +5641,7 @@ npm-registry-fetch@^18.0.0: npm-package-arg "^12.0.0" proc-log "^5.0.0" -nth-check@^2.0.1: +nth-check@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== @@ -5203,7 +5704,7 @@ object.values@^1.2.1: define-properties "^1.2.1" es-object-atoms "^1.0.0" -on-finished@2.4.1: +on-finished@^2.4.1, on-finished@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -5217,7 +5718,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.0: +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -5259,14 +5760,9 @@ ora@8.2.0: strip-ansi "^7.1.0" ordered-binary@^1.5.3: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.6.0.tgz#9c490dadc0b1336ca6917d8d41dd474b8c0bff32" - integrity sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ== - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + version "1.6.1" + resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.6.1.tgz#5ac240ea719d6a0e6d4f0485385d3f9cb1cd4432" + integrity sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w== own-keys@^1.0.1: version "1.0.1" @@ -5327,9 +5823,9 @@ p-locate@^5.0.0: p-limit "^3.0.2" p-map@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.3.tgz#7ac210a2d36f81ec28b736134810f7ba4418cdb6" - integrity sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA== + version "7.0.4" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.4.tgz#b81814255f542e252d5729dca4d66e5ec14935b8" + integrity sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ== p-try@^1.0.0: version "1.0.0" @@ -5394,30 +5890,30 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5-html-rewriting-stream@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.1.0.tgz#ac64eb98ed3681b8b1e514ef22284557a66f2ad9" - integrity sha512-2ifK6Jb+ONoqOy5f+cYHsqvx1obHQdvIk13Jmt/5ezxP0U9p+fqd+R6O73KblGswyuzBYfetmsfK9ThMgnuPPg== +parse5-html-rewriting-stream@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz#3f442e5b5811a5456e2a56b68ea44ef153b44d92" + integrity sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw== dependencies: entities "^6.0.0" - parse5 "^7.0.0" - parse5-sax-parser "^7.0.0" + parse5 "^8.0.0" + parse5-sax-parser "^8.0.0" -parse5-sax-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz#4c05064254f0488676aca75fb39ca069ec96dee5" - integrity sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg== +parse5-sax-parser@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz#49755efbd2b63846c7b908a297a874af00760715" + integrity sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw== dependencies: - parse5 "^7.0.0" + parse5 "^8.0.0" -parse5@^7.0.0, parse5@^7.1.2: - version "7.3.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" - integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== +parse5@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-8.0.0.tgz#aceb267f6b15f9b6e6ba9e35bfdd481fc2167b12" + integrity sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA== dependencies: entities "^6.0.0" -parseurl@~1.3.3: +parseurl@^1.3.3, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -5455,6 +5951,11 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-to-regexp@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f" + integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA== + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -5467,10 +5968,10 @@ picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@4.0.2, picomatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" - integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== +picomatch@4.0.3, picomatch@^4.0.2, picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" @@ -5492,12 +5993,17 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== -piscina@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/piscina/-/piscina-5.1.1.tgz#7a34e080d0500b3b7a56d0b3f37d8a00ec4d60fe" - integrity sha512-9rPDIPsCwOivatEZGM8+apgM7AiTDLSnpwMmLaSmdm2PeND8bFJzZLZZxyrJjLH8Xx/MpKoVaKf+vZOWALNHbw== +piscina@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/piscina/-/piscina-5.1.3.tgz#30a460500a08770fc97d622e63857a5978dfc466" + integrity sha512-0u3N7H4+hbr40KjuVn2uNhOcthu/9usKhnw5vT3J7ply79v3D3M8naI00el9Klcy16x557VsEkkUQaHCWFXC/g== optionalDependencies: - "@napi-rs/nice" "^1.0.1" + "@napi-rs/nice" "^1.0.4" + +pkce-challenge@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/pkce-challenge/-/pkce-challenge-5.0.1.tgz#3b4446865b17b1745e9ace2016a31f48ddf6230d" + integrity sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ== possible-typed-array-names@^1.0.0: version "1.1.0" @@ -5514,7 +6020,7 @@ postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.41, postcss@^8.4.49, postcss@^8.5.3, postcss@^8.5.6: +postcss@^8.4.41, postcss@^8.4.49, postcss@^8.5.6: version "8.5.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== @@ -5529,15 +6035,20 @@ prelude-ls@^1.2.1: integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier@^3.4.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393" - integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== + version "3.7.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.7.4.tgz#d2f8335d4b1cec47e1c8098645411b0c9dff9c0f" + integrity sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA== proc-log@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8" integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== +proc-log@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.1.0.tgz#18519482a37d5198e231133a70144a50f21f0215" + integrity sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -5551,6 +6062,14 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" +proxy-addr@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -5571,17 +6090,12 @@ qjobs@^1.2.0: resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== +qs@^6.14.0, qs@~6.14.0: + version "6.14.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159" + integrity sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ== dependencies: - side-channel "^1.0.6" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + side-channel "^1.1.0" quick-lru@^4.0.1: version "4.0.1" @@ -5593,15 +6107,25 @@ range-parser@^1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== +raw-body@^3.0.0, raw-body@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.2.tgz#3e3ada5ae5568f9095d84376fd3a49b8fb000a51" + integrity sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA== dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.7.0" + unpipe "~1.0.0" + +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== + dependencies: + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" read-pkg-up@^3.0.0: version "3.0.0" @@ -5732,7 +6256,7 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@1.22.10, resolve@^1.10.0, resolve@^1.22.4: +resolve@1.22.10: version "1.22.10" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== @@ -5741,6 +6265,15 @@ resolve@1.22.10, resolve@^1.10.0, resolve@^1.22.4: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.10.0, resolve@^1.22.4: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + restore-cursor@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" @@ -5754,11 +6287,6 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - rfdc@^1.3.0, rfdc@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" @@ -5771,70 +6299,81 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup@4.40.2: - version "4.40.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.40.2.tgz#778e88b7a197542682b3e318581f7697f55f0619" - integrity sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg== - dependencies: - "@types/estree" "1.0.7" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.40.2" - "@rollup/rollup-android-arm64" "4.40.2" - "@rollup/rollup-darwin-arm64" "4.40.2" - "@rollup/rollup-darwin-x64" "4.40.2" - "@rollup/rollup-freebsd-arm64" "4.40.2" - "@rollup/rollup-freebsd-x64" "4.40.2" - "@rollup/rollup-linux-arm-gnueabihf" "4.40.2" - "@rollup/rollup-linux-arm-musleabihf" "4.40.2" - "@rollup/rollup-linux-arm64-gnu" "4.40.2" - "@rollup/rollup-linux-arm64-musl" "4.40.2" - "@rollup/rollup-linux-loongarch64-gnu" "4.40.2" - "@rollup/rollup-linux-powerpc64le-gnu" "4.40.2" - "@rollup/rollup-linux-riscv64-gnu" "4.40.2" - "@rollup/rollup-linux-riscv64-musl" "4.40.2" - "@rollup/rollup-linux-s390x-gnu" "4.40.2" - "@rollup/rollup-linux-x64-gnu" "4.40.2" - "@rollup/rollup-linux-x64-musl" "4.40.2" - "@rollup/rollup-win32-arm64-msvc" "4.40.2" - "@rollup/rollup-win32-ia32-msvc" "4.40.2" - "@rollup/rollup-win32-x64-msvc" "4.40.2" - fsevents "~2.3.2" - -rollup@^4.34.9: - version "4.44.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.44.1.tgz#641723932894e7acbe6052aea34b8e72ef8b7c8f" - integrity sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg== +rollup@4.52.3: + version "4.52.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.52.3.tgz#cc5c28d772b022ce48b235a97b347ccd9d88c1a3" + integrity sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.44.1" - "@rollup/rollup-android-arm64" "4.44.1" - "@rollup/rollup-darwin-arm64" "4.44.1" - "@rollup/rollup-darwin-x64" "4.44.1" - "@rollup/rollup-freebsd-arm64" "4.44.1" - "@rollup/rollup-freebsd-x64" "4.44.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.44.1" - "@rollup/rollup-linux-arm-musleabihf" "4.44.1" - "@rollup/rollup-linux-arm64-gnu" "4.44.1" - "@rollup/rollup-linux-arm64-musl" "4.44.1" - "@rollup/rollup-linux-loongarch64-gnu" "4.44.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.44.1" - "@rollup/rollup-linux-riscv64-gnu" "4.44.1" - "@rollup/rollup-linux-riscv64-musl" "4.44.1" - "@rollup/rollup-linux-s390x-gnu" "4.44.1" - "@rollup/rollup-linux-x64-gnu" "4.44.1" - "@rollup/rollup-linux-x64-musl" "4.44.1" - "@rollup/rollup-win32-arm64-msvc" "4.44.1" - "@rollup/rollup-win32-ia32-msvc" "4.44.1" - "@rollup/rollup-win32-x64-msvc" "4.44.1" + "@rollup/rollup-android-arm-eabi" "4.52.3" + "@rollup/rollup-android-arm64" "4.52.3" + "@rollup/rollup-darwin-arm64" "4.52.3" + "@rollup/rollup-darwin-x64" "4.52.3" + "@rollup/rollup-freebsd-arm64" "4.52.3" + "@rollup/rollup-freebsd-x64" "4.52.3" + "@rollup/rollup-linux-arm-gnueabihf" "4.52.3" + "@rollup/rollup-linux-arm-musleabihf" "4.52.3" + "@rollup/rollup-linux-arm64-gnu" "4.52.3" + "@rollup/rollup-linux-arm64-musl" "4.52.3" + "@rollup/rollup-linux-loong64-gnu" "4.52.3" + "@rollup/rollup-linux-ppc64-gnu" "4.52.3" + "@rollup/rollup-linux-riscv64-gnu" "4.52.3" + "@rollup/rollup-linux-riscv64-musl" "4.52.3" + "@rollup/rollup-linux-s390x-gnu" "4.52.3" + "@rollup/rollup-linux-x64-gnu" "4.52.3" + "@rollup/rollup-linux-x64-musl" "4.52.3" + "@rollup/rollup-openharmony-arm64" "4.52.3" + "@rollup/rollup-win32-arm64-msvc" "4.52.3" + "@rollup/rollup-win32-ia32-msvc" "4.52.3" + "@rollup/rollup-win32-x64-gnu" "4.52.3" + "@rollup/rollup-win32-x64-msvc" "4.52.3" fsevents "~2.3.2" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== +rollup@^4.43.0: + version "4.55.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.55.1.tgz#4ec182828be440648e7ee6520dc35e9f20e05144" + integrity sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A== dependencies: - queue-microtask "^1.2.2" + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.55.1" + "@rollup/rollup-android-arm64" "4.55.1" + "@rollup/rollup-darwin-arm64" "4.55.1" + "@rollup/rollup-darwin-x64" "4.55.1" + "@rollup/rollup-freebsd-arm64" "4.55.1" + "@rollup/rollup-freebsd-x64" "4.55.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.55.1" + "@rollup/rollup-linux-arm-musleabihf" "4.55.1" + "@rollup/rollup-linux-arm64-gnu" "4.55.1" + "@rollup/rollup-linux-arm64-musl" "4.55.1" + "@rollup/rollup-linux-loong64-gnu" "4.55.1" + "@rollup/rollup-linux-loong64-musl" "4.55.1" + "@rollup/rollup-linux-ppc64-gnu" "4.55.1" + "@rollup/rollup-linux-ppc64-musl" "4.55.1" + "@rollup/rollup-linux-riscv64-gnu" "4.55.1" + "@rollup/rollup-linux-riscv64-musl" "4.55.1" + "@rollup/rollup-linux-s390x-gnu" "4.55.1" + "@rollup/rollup-linux-x64-gnu" "4.55.1" + "@rollup/rollup-linux-x64-musl" "4.55.1" + "@rollup/rollup-openbsd-x64" "4.55.1" + "@rollup/rollup-openharmony-arm64" "4.55.1" + "@rollup/rollup-win32-arm64-msvc" "4.55.1" + "@rollup/rollup-win32-ia32-msvc" "4.55.1" + "@rollup/rollup-win32-x64-gnu" "4.55.1" + "@rollup/rollup-win32-x64-msvc" "4.55.1" + fsevents "~2.3.2" + +router@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" + integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== + dependencies: + debug "^4.4.0" + depd "^2.0.0" + is-promise "^4.0.0" + parseurl "^1.3.3" + path-to-regexp "^8.0.0" rxjs@7.8.2, rxjs@~7.8.0: version "7.8.2" @@ -5886,10 +6425,10 @@ safe-regex-test@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass@1.88.0: - version "1.88.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.88.0.tgz#cd1495749bebd9e4aca86e93ee60b3904a107789" - integrity sha512-sF6TWQqjFvr4JILXzG4ucGOLELkESHL+I5QJhh7CNaE+Yge0SI+ehCatsXhJ7ymU1hAFcIS3/PBpjdIbXoyVbg== +sass@1.90.0: + version "1.90.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.90.0.tgz#d6fc2be49c7c086ce86ea0b231a35bf9e33cb84b" + integrity sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q== dependencies: chokidar "^4.0.0" immutable "^5.0.2" @@ -5907,16 +6446,48 @@ seedrandom@^3.0.5: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.7.2, semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: +semver@7.7.2: version "7.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +semver@7.7.3, semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +send@^1.1.0, send@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed" + integrity sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ== + dependencies: + debug "^4.4.3" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + fresh "^2.0.0" + http-errors "^2.0.1" + mime-types "^3.0.2" + ms "^2.1.3" + on-finished "^2.4.1" + range-parser "^1.2.1" + statuses "^2.0.2" + +serve-static@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.1.tgz#7f186a4a4e5f5b663ad7a4294ff1bf37cf0e98a9" + integrity sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw== + dependencies: + encodeurl "^2.0.0" + escape-html "^1.0.3" + parseurl "^1.3.3" + send "^1.2.0" + set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" @@ -5948,7 +6519,7 @@ set-proto@^1.0.0: es-errors "^1.3.0" es-object-atoms "^1.0.0" -setprototypeof@1.2.0: +setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== @@ -5994,7 +6565,7 @@ side-channel-weakmap@^1.0.2: object-inspect "^1.13.3" side-channel-map "^1.0.1" -side-channel@^1.0.6, side-channel@^1.1.0: +side-channel@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== @@ -6031,9 +6602,9 @@ slice-ansi@^5.0.0: is-fullwidth-code-point "^4.0.0" slice-ansi@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" - integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + version "7.1.2" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.2.tgz#adf7be70aa6d72162d907cd0e6d5c11f507b5403" + integrity sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w== dependencies: ansi-styles "^6.2.1" is-fullwidth-code-point "^5.0.0" @@ -6044,30 +6615,30 @@ smart-buffer@^4.2.0: integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socket.io-adapter@~2.5.2: - version "2.5.5" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz#c7a1f9c703d7756844751b6ff9abfc1780664082" - integrity sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg== + version "2.5.6" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.6.tgz#c697f609d36a676a46749782274607d8df52c1d8" + integrity sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ== dependencies: - debug "~4.3.4" - ws "~8.17.1" + debug "~4.4.1" + ws "~8.18.3" socket.io-parser@~4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" - integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== + version "4.2.5" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.5.tgz#3f41b8d369129a93268f2abecba94b5292850099" + integrity sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ== dependencies: "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" + debug "~4.4.1" socket.io@^4.7.2: - version "4.8.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.1.tgz#fa0eaff965cc97fdf4245e8d4794618459f7558a" - integrity sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg== + version "4.8.3" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.3.tgz#ca6ba1431c69532e1e0a6f496deebeb601dbc4df" + integrity sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A== dependencies: accepts "~1.3.4" base64id "~2.0.0" cors "~2.8.5" - debug "~4.3.2" + debug "~4.4.1" engine.io "~6.6.0" socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" @@ -6082,11 +6653,11 @@ socks-proxy-agent@^8.0.3: socks "^2.8.3" socks@^2.8.3: - version "2.8.5" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.5.tgz#bfe18f5ead1efc93f5ec90c79fa8bdccbcee2e64" - integrity sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww== + version "2.8.7" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" + integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== dependencies: - ip-address "^9.0.5" + ip-address "^10.0.1" smart-buffer "^4.2.0" "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1: @@ -6102,10 +6673,10 @@ source-map-support@0.5.21: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== +source-map@0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" @@ -6134,9 +6705,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.21" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" - integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== + version "3.0.22" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz#abf5a08a6f5d7279559b669f47f0a43e8f3464ef" + integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ== split2@^3.0.0: version "3.2.2" @@ -6152,11 +6723,6 @@ split@^1.0.0: dependencies: through "2" -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - ssri@^12.0.0: version "12.0.0" resolved "https://registry.yarnpkg.com/ssri/-/ssri-12.0.0.tgz#bcb4258417c702472f8191981d3c8a771fee6832" @@ -6184,10 +6750,10 @@ standard-version@^9.5.0: stringify-package "^1.0.1" yargs "^16.0.0" -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== statuses@~1.5.0: version "1.5.0" @@ -6230,7 +6796,7 @@ string-argv@^0.3.2: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6257,6 +6823,14 @@ string-width@^7.0.0, string-width@^7.2.0: get-east-asian-width "^1.0.0" strip-ansi "^7.1.0" +string-width@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-8.1.0.tgz#9e9fb305174947cf45c30529414b5da916e9e8d1" + integrity sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg== + dependencies: + get-east-asian-width "^1.3.0" + strip-ansi "^7.1.0" + string.prototype.trim@^1.2.10: version "1.2.10" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" @@ -6323,9 +6897,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: ansi-regex "^5.0.1" strip-ansi@^7.0.1, strip-ansi@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + version "7.1.2" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" + integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== dependencies: ansi-regex "^6.0.1" @@ -6365,15 +6939,15 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tailwindcss@4.1.11, tailwindcss@^4.1.11: - version "4.1.11" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.11.tgz#799af3e98c19c5baaefafc6e0c16304a0e684854" - integrity sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA== +tailwindcss@4.1.18, tailwindcss@^4.1.11: + version "4.1.18" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.18.tgz#f488ba47853abdb5354daf9679d3e7791fc4f4e3" + integrity sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw== tapable@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872" - integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== tar@^6.1.11: version "6.2.1" @@ -6388,15 +6962,14 @@ tar@^6.1.11: yallist "^4.0.0" tar@^7.4.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" - integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== + version "7.5.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.2.tgz#115c061495ec51ff3c6745ff8f6d0871c5b1dedc" + integrity sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg== dependencies: "@isaacs/fs-minipass" "^4.0.0" chownr "^3.0.0" minipass "^7.1.2" - minizlib "^3.0.1" - mkdirp "^3.0.1" + minizlib "^3.1.0" yallist "^5.0.0" text-extensions@^1.0.0: @@ -6429,15 +7002,7 @@ tiny-emitter@^2.1.0: resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== -tinyglobby@0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.13.tgz#a0e46515ce6cbcd65331537e57484af5a7b2ff7e" - integrity sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw== - dependencies: - fdir "^6.4.4" - picomatch "^4.0.2" - -tinyglobby@^0.2.12, tinyglobby@^0.2.13: +tinyglobby@0.2.14: version "0.2.14" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== @@ -6445,17 +7010,18 @@ tinyglobby@^0.2.12, tinyglobby@^0.2.13: fdir "^6.4.4" picomatch "^4.0.2" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== +tinyglobby@^0.2.12, tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== dependencies: - os-tmpdir "~1.0.2" + fdir "^6.5.0" + picomatch "^4.0.3" tmp@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== to-regex-range@^5.0.1: version "5.0.1" @@ -6464,7 +7030,7 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.1: +toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== @@ -6474,10 +7040,10 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -ts-api-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" - integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== +ts-api-utils@^2.1.0, ts-api-utils@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8" + integrity sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA== tsconfig-paths@^3.15.0: version "3.15.0" @@ -6489,19 +7055,19 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.0, tslib@^2.8.0: +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tuf-js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-3.0.1.tgz#e3f07ed3d8e87afaa70607bd1ef801d5c1f57177" - integrity sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-3.1.0.tgz#61b847fe9aa86a7d5bda655a4647e026aa73a1be" + integrity sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg== dependencies: "@tufjs/models" "3.0.1" - debug "^4.3.6" - make-fetch-happen "^14.0.1" + debug "^4.4.1" + make-fetch-happen "^14.0.3" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -6515,11 +7081,6 @@ type-fest@^0.18.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -6530,6 +7091,15 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" + integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== + dependencies: + content-type "^1.0.5" + media-typer "^1.1.0" + mime-types "^3.0.0" + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -6584,9 +7154,9 @@ typed-array-length@^1.0.7: reflect.getprototypeof "^1.0.6" typed-function@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-4.2.1.tgz#19aa51847aa2dea9ef5e7fb7641c060179a74426" - integrity sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA== + version "4.2.2" + resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-4.2.2.tgz#49939f58d133a40cb03bdc05d969f59e4bdc3190" + integrity sha512-VwaXim9Gp1bngi/q3do8hgttYn2uC3MoT/gfuMWylnj1IeZBUAyPddHZlo1K05BDoj8DYPpMdiHqH1dDYdJf2A== typedarray@^0.0.6: version "0.0.6" @@ -6594,13 +7164,14 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript-eslint@^8.33.1: - version "8.35.1" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.35.1.tgz#4ddeda5c5777a7bd86516280d8099ada06055f2f" - integrity sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw== + version "8.51.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.51.0.tgz#3cf2ead3d7c5adf940fbac213c043370c0c000b2" + integrity sha512-jh8ZuM5oEh2PSdyQG9YAEM1TCGuWenLSuSUhf/irbVUNW9O5FhbFVONviN2TgMTBnUmyHv7E56rYnfLZK6TkiA== dependencies: - "@typescript-eslint/eslint-plugin" "8.35.1" - "@typescript-eslint/parser" "8.35.1" - "@typescript-eslint/utils" "8.35.1" + "@typescript-eslint/eslint-plugin" "8.51.0" + "@typescript-eslint/parser" "8.51.0" + "@typescript-eslint/typescript-estree" "8.51.0" + "@typescript-eslint/utils" "8.51.0" typescript@~5.8.3: version "5.8.3" @@ -6608,9 +7179,9 @@ typescript@~5.8.3: integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== ua-parser-js@^0.7.30: - version "0.7.40" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.40.tgz#c87d83b7bb25822ecfa6397a0da5903934ea1562" - integrity sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ== + version "0.7.41" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.41.tgz#9f6dee58c389e8afababa62a4a2dc22edb69a452" + integrity sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg== uglify-js@^3.1.4: version "3.19.3" @@ -6627,10 +7198,10 @@ unbox-primitive@^1.1.0: has-symbols "^1.1.0" which-boxed-primitive "^1.1.1" -undici-types@~7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.8.0.tgz#de00b85b710c54122e44fbfd911f8d70174cd294" - integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== unique-filename@^4.0.0: version "4.0.0" @@ -6651,15 +7222,15 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -6690,26 +7261,26 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-expression-parse "^3.0.0" validate-npm-package-name@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-6.0.1.tgz#7b928e5fe23996045a6de5b5a22eedb3611264dd" - integrity sha512-OaI//3H0J7ZkR1OqlhGA8cA+Cbk/2xFOQpJOt5+s27/ta9eZwpeervh4Mxh4w0im/kdgktowaqVNR7QOrUd7Yg== + version "6.0.2" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz#4e8d2c4d939975a73dd1b7a65e8f08d44c85df96" + integrity sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ== -vary@^1: +vary@^1, vary@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vite@6.3.5: - version "6.3.5" - resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.5.tgz#fec73879013c9c0128c8d284504c6d19410d12a3" - integrity sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ== +vite@7.1.11: + version "7.1.11" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.11.tgz#4d006746112fee056df64985191e846ebfb6007e" + integrity sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg== dependencies: esbuild "^0.25.0" - fdir "^6.4.4" - picomatch "^4.0.2" - postcss "^8.5.3" - rollup "^4.34.9" - tinyglobby "^0.2.13" + fdir "^6.5.0" + picomatch "^4.0.3" + postcss "^8.5.6" + rollup "^4.43.0" + tinyglobby "^0.2.15" optionalDependencies: fsevents "~2.3.3" @@ -6718,10 +7289,10 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== -watchpack@2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" - integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== +watchpack@2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" + integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -6852,9 +7423,9 @@ wrap-ansi@^8.1.0: strip-ansi "^7.0.1" wrap-ansi@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" - integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + version "9.0.2" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz#956832dea9494306e6d209eb871643bb873d7c98" + integrity sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww== dependencies: ansi-styles "^6.2.1" string-width "^7.0.0" @@ -6865,10 +7436,10 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@~8.17.1: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +ws@~8.18.3: + version "8.18.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== xtend@~4.0.1: version "4.0.2" @@ -6895,38 +7466,32 @@ yallist@^5.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== -yaml@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6" - integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== +yaml@^2.8.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - yargs-parser@^22.0.0: version "22.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-22.0.0.tgz#87b82094051b0567717346ecd00fd14804b357c8" integrity sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw== -yargs@17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== +yargs@18.0.0, yargs@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-18.0.0.tgz#6c84259806273a746b09f579087b68a3c2d25bd1" + integrity sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg== dependencies: - cliui "^8.0.1" + cliui "^9.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" + string-width "^7.2.0" y18n "^5.0.5" - yargs-parser "^21.1.1" + yargs-parser "^22.0.0" yargs@^16.0.0, yargs@^16.1.1, yargs@^16.2.0: version "16.2.0" @@ -6941,24 +7506,27 @@ yargs@^16.0.0, yargs@^16.1.1, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-18.0.0.tgz#6c84259806273a746b09f579087b68a3c2d25bd1" - integrity sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg== - dependencies: - cliui "^9.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - string-width "^7.2.0" - y18n "^5.0.5" - yargs-parser "^22.0.0" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yoctocolors-cjs@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" - integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== +yoctocolors-cjs@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" + integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== + +zod-to-json-schema@^3.25.0: + version "3.25.1" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz#7f24962101a439ddade2bf1aeab3c3bfec7d84ba" + integrity sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA== + +zod@4.1.13: + version "4.1.13" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.1.13.tgz#93699a8afe937ba96badbb0ce8be6033c0a4b6b1" + integrity sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig== + +"zod@^3.25 || ^4.0": + version "4.3.5" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.3.5.tgz#aeb269a6f9fc259b1212c348c7c5432aaa474d2a" + integrity sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g== diff --git a/frank/printing.py b/frank/printing.py index 82aba9eb..f3eb2bf6 100644 --- a/frank/printing.py +++ b/frank/printing.py @@ -2,30 +2,28 @@ import re # noqa: F401 import socket # noqa: F401 import sys # noqa: F401 -from arq import Retry - async def sent_to_printer(ctx: dict, data: str, address: str, cut_code: str): address = "/printer" - try: - print("Printing to :", address, "\n", data, "\n") - with open(address, "w") as printer: - printer.write(data) - printer.write("\n") - print(cut_code) - printer.write(cut_code) - except LookupError as e: - print("Lookup error:", e) - raise Retry(defer=ctx["job_try"] * 30) - except FileNotFoundError as e: - print("File not found error:", e) - raise Retry(defer=ctx["job_try"] * 30) - except: # noqa: E722 - print("Unexpected error:", sys.exc_info()[0]) - # retry the job with increasing back-off - # delays will be 5s, 10s, 15s, 20s - # after max_tries (default 5) the job will permanently fail - raise Retry(defer=ctx["job_try"] * 30) + # try: + print("Printing to :", address, "\n", data, "\n") + # with open(address, "w") as printer: + # printer.write(data) + # printer.write("\n") + # print(cut_code) + # printer.write(cut_code) + # except LookupError as e: + # print("Lookup error:", e) + # raise Retry(defer=ctx["job_try"] * 30) + # except FileNotFoundError as e: + # print("File not found error:", e) + # raise Retry(defer=ctx["job_try"] * 30) + # except: # noqa: E722 + # print("Unexpected error:", sys.exc_info()[0]) + # # retry the job with increasing back-off + # # delays will be 5s, 10s, 15s, 20s + # # after max_tries (default 5) the job will permanently fail + # raise Retry(defer=ctx["job_try"] * 30) # GS = "\x1d" # PAPER_CUT = GS + "\x56"